以前的LFI,就是利用一些基本的php伪协议或者日志文件包含来getshell,这儿总结一下一些进阶的一些LFI
PHPSESSION文件包含 原理:配置session.upload_progress.enabled = on表示upload_progress功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中
我们通过PHP_SESSION_UPLOAD_PROGRESS
将恶意语句写入session的文件,得知session的文件名,就可以再次包含实现getshell
因为session.upload_progress.cleanup = on
导致文件上传后,session文件内容立即清空
所以进行条件竞争来RCE
详见:https://blog.csdn.net/unexpectedthing/article/details/122888905
通过/proc/self/environ关于/proc
的知识,看看这篇
当然/proc/self/environ
就可以得到当前进程的环境变量
具体的操作流程:
如果/proc/self/environ
文件可以通过LFI访问,那么在这种情况下RCE
可以通过请求文件结合写入HTTP User-Agent字段的payload来实现。
GET lfi.php?file=../../../proc/self/environ HTTP/1.1
User-Agent:
现在,如果攻击者将上述 http 请求发送到 Web 服务器,那么:
- 首先将 User-Agent 字段上的数据写入
/proc/self/environ
文件。 - 然后页面请求
lfi.php?file=../../../proc/self/environ
会将/proc/self/environ
文件的内容包含到输出页面中,并且我们的有效负载被执行。
可以看看这篇
利用临时文件来getshell 通过PHPINFO特性包含临时文件 利用php7 Segment Fault包含临时文件懒得自己写了,下面这个写得比较清楚了
直接上链接
compress.zip://产生临时文件主要作用是:compress.zip://
上传文件的话,可以保持http长链接竞争保存临时文件。当然 我们也可以上传大文件来增长产生临时文件的时间。
看看这个题(includer):https://blog.zeddyu.info/2020/01/08/36c3-web/#get-flag
思路很好,利用点就是
- 利用
compress.zlib://http://
orcompress.zlib://ftp://
来上传任意文件,并保持 HTTP 长链接竞争保存我们的临时文件 - 利用超长的 name 溢出 output buffer 得到 sandbox 路径
- 利用 Nginx 配置错误,通过
.well-known../files/sandbox/
来获取我们 tmp 文件的文件名 - 发送另一个请求包含我们的 tmp 文件,此时并没有 PHP 代码
- 绕过 WAF 判断后,发送 PHP 代码段,包含我们的 PHP 代码拿到 Flag
原理:
- Nginx 在后端 Fastcgi 响应过大 或 请求正文 body 过大时会产生临时文件
- 通过多重链接绕过 PHP LFI stat 限制完成 LFI
从中还介绍了利用/proc/self/fd
来找到进程下删除的文件
php源码分析 require_once 绕过不能重复包含文件的限制
利用多次重复 / proc/self/root 绕过
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?