CTF題解記錄-web篇【持續更新】
好好學習,天天向上,目錄如下:
WEEK 1
- 加了報錯的注入
- 後臺登入
- 上傳繞過
WEEK 2
- 沒時間解釋了
- welcome to bugkuctf
- never give up
WEEK 1
加了報錯的注入
實驗吧: ofollow,noindex">http://ctf5.shiyanbar.com/web/baocuo/index.php
- 檢視頁面原始碼,註釋說明有sql注入
- 然後測試一下username和password,發現有過濾
- bp簡單爆破一下過濾字元,得出結果:
username過濾了(
)
=
#
等字元以及order by
等關鍵字, password過濾了#
=
;
等字元以及updatexml()
和ext()
兩個報錯函式。
- 在偉大的搜尋引擎的幫助下,我們查到了這兩個報錯函式的資訊,順便搜到了注入格式。
- 爆資料庫測試一下可用
- 然後爆表名,列名,flag,注意到
=
被過濾,換LIKE
,結果LIKE
也被過濾,於是換上了正則regexp
,同樣show
也被過濾。
payload: username=1' and updatexml/*&password=*/(1,concat(0x24,(select database()),0x24),1) and '1 username=1' or updatexml/*&password=*/(1,concat(0x3b,(select group_concat(table_name) from information_schema.tables where table_schema regexp database())),1) and '1 username=1' or updatexml/*&password=*/(1,concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_name regexp 'ffll44jj' )),1) and '1 username=1' or updatexml/*&password=*/(1,concat(0x3a,(select value from ffll44jj)),1) adn '1
看了dalao的wp後發現password並沒有過濾 exp()
函式可以直接利用 password
構造payload,不用分割注入。
flag{err0r_b4sed_sqli_+_hpf}
上傳繞過
實驗吧: http://ctf5.shiyanbar.com/web/upload/
- 這道題看上去是一個檔案上傳漏洞,檢視原始碼,注意到了
hidden
表單,感覺有用。
- 按要求傳檔案,報錯要jpg,傳jpg又報錯要php,估計是有兩次驗證。
- 直接字元截斷沒有用,想起那個表單,估計是要構造路徑截斷。
- 構造路徑,進hex改包再發即可得flag!
flag{SimCTF_huachuan}
後臺登入
實驗吧: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
- 原始碼有程式碼,估計是要構造md5注入。
- 怎麼構造?
- 怎麼構造?
- 怎麼構造?
- 算了看wp吧
- ……
- 直接用檔名
ffifdyop
構造md5有了'or'xxxx'
的語句,注入成功,告辭。
flag{ffifdyop_has_trash}
WEEK 2
1. 沒時間解釋了
moctf: http://119.23.73.3:5006/web2/index2.php
抓包阻止重定向->路徑構造->時間競爭
常規性的 F12
檢視原始碼,並沒有找到什麼有用的資訊,測試一波 .svn
和 .git
的原始碼洩露,仍然並沒有什麼有用的資訊,遂放棄。
自閉一段時間後,觀察到url index2.php
覺得可能有問題,然後嘗試訪問 index.php
,重定向回了 index2.php
,於是改用BP截包,得到 index.php
返回如下:
訪問 uploadsomething.php
,令人熟悉的表單映入眼簾,隨意輸入後顯示:
估計是一個路徑構造,寫了php一句話webshell並沒有連上,試著訪問了一下返回 Too Slow
,根據標題和該返回猜測是一個 時間競爭 ,同時觀察到不同提交返回的base64的路徑是相同的,那麼可以寫指令碼去構造路徑並讀取。
然而……
指令碼都是 Too Slow
!這不合理啊!後來用BP Intruder持續抓包,獲得 flag
,至於指令碼比BP慢這實在沒有想到。
2. welcome to bugkuctf
bugkuctf: http://123.206.87.240:8006/test1/
php協議->檔案包含->php反序列化
這是一道硬核題。
常規 F12
得到原始碼:
嘗試直接訪問 hint.php
無果,注意到原始碼中檔案包含函式 file_get_contents()
,
我們可以利用php協議操作資料流的方法,將字串構造檔案利用 php://input
上傳 $user
,再利用 php://filter
獲取返回的資料裡,相關參考PHP官方文件: http://php.net/manual/zh/wrappers.php.php 。
php://filter
相關資訊:
利用這個方法我們可以這樣構造 payload
:
從何獲得 index.php
和 hint.php
的原始碼 base64 :
繼續程式碼審計。
觀察得到這是一個php反序列化漏洞,利用在 hint.php
中得到的類名為 Flag
,使用的是 __toString
魔法函式,由此我們可以構造反序列化 payload
為 O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
,
並得到 flag
:
3. never give up
bugkuctf: http://123.206.87.240:8006/test/hello.php
php任意檔案讀取->解碼*3->字元截斷
這道題比較逗逼。
常規 F12
得到兩行程式碼,帶入註釋裡的 1p.html
發現重定向到了BugkuCTF的首頁,於是Postman抓包得到如下結果:
URL解碼一把梭!
base64解碼一把梭!
又是URL?一把梭!
經過三次大起大落的編碼轉化,最後得到原始碼:
注意到程式碼中有兩處矛盾:
-
$id
即是0又不是0 -
$b
的首位字元必須是4
又不能是4
對於前者,我們採用php的鬆散比較,利用 'aaa' == 0
的特性繞過,對於後者,我們採用字元截斷(對於php版本的判斷可以利用 $data
實現,這裡已經確定是可截斷的了)
那麼!那麼!那麼!
就闊以構造粗配樓德 payload
:
id=aaa&a=php://input&b=%00abcde
得到 flag
:
似乎安排得明明白白…直到我看到其他大佬的wp…
我的表情:
看來似出題人忘記遮蔽了,不然這題也是小硬核。