⽂件上传之结合phpinfo与本地⽂件包含利⽤
背景
某站点存在本地⽂件包含及phpinfo,可以利⽤其执⾏脚本。
原理
原理: 利⽤php post上传⽂件产⽣临时⽂件,phpinfo()读临时⽂件的路径和名字,本地包含漏洞⽣成1句话后门
1.php在解析multipart/form-data请求时,会创建临时⽂件,并写⼊上传内容,脚本执⾏后即删除
2.phpinfo可以输出$_FILE信息
3.通过多种⽅式争取时间,在临时⽂件删除前进⾏执⾏包含
1)通过在数据报⽂中加⼊⼤量的垃圾数据,似phpinfo页⾯过⼤,导致phpinfo页⾯过⼤,导致php输出进⼊流式输出,并不⼀次输出完毕
2)通过⼤量请求来延迟php脚本的执⾏速度
环境复现
源码存在code⽬录下,利⽤docker进⾏复现
漏洞利⽤
php上传
向服务器上任意php⽂件post请求上传⽂件时,都会⽣成临时⽂件,可以直接在phpinfo页⾯到临时⽂件的路径及名字。
post上传⽂件
php post⽅式上传任意⽂件,服务器都会创建临时⽂件来保存⽂件内容。
在HTTP协议中为了⽅便进⾏⽂件传输,规定了⼀种基于表单的 HTML⽂件传输⽅法
其中要确保上传表单的属性是 enctype="multipart/form-data"
其中PHP引擎对enctype=”multipart/form-data”这种请求的处理过程如下:
1、请求到达;
2、创建临时⽂件,并写⼊上传⽂件的内容;
3、调⽤相应PHP脚本进⾏处理,如校验名称、⼤⼩等;
4、删除临时⽂件。
PHP引擎会⾸先将⽂件内容保存到临时⽂件,然后进⾏相应的操作。临时⽂件的名称是 php+随机字符。
$_FILES信息,包括临时⽂件路径、名称
在PHP中,有超全局变量$_FILES,保存上传⽂件的信息,包括⽂件名、类型、临时⽂件名、错误代号、⼤⼩⼿⼯测试phpinfo()获取临时⽂件路径
html表单
⽂件 upload.html
<!doctype html>
<html>
<body>
<form action="phpinfo.php" method="POST" enctype="multipart/form-data">
<h3> Test upload tmp file</h3>
<label for="file">Filename:</label>
<input type="file" name="file"/><br/>
<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>
浏览器访问 upload.html, 上传⽂件
<?php
eval($_REQUEST["cmd"]);
>
burp 查看POST 信息如下
phpinfo获得如下信息
通过分析可见,php post上传⽂件时确实经历了:创建临时⽂件--->调⽤相关php脚本,在phpinfo中回显⽂件信息--->
删除临时⽂件
ps: 发现inotifywait确实是款好⼯具,它可以实时监测linux某⼀⽂件夹下的⽂件的实时变化
安装:
apt-get install -y inotify-tools
使⽤:
inotifywait -m /tmpshell创建文件并写入内容
inotifywait 命令参数说明:
-m 选项表⽰ monitor ,即开启监视
-r 选项表⽰递归监视,但是会⽐较慢⼀些,若监视/etc ⽬录,其中的⼦⽬录下修改⽂件也是能被监控到。
-e 选项指定要监控的“事件”(events)包括了:access、modify、 attrib、 close_write、 close_nowrite、close、open、 moved_to、 moved_from、move、 move_self、 create、delete、delete_self、unmount。
如果不加参数-e的话,默认就是监控所有的事件,在⽇常运维时,这个⼯具可以帮助你监控服务器上重要⽂件和重要⽬录的变化情况。
GetShell演⽰

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。