【web】php文件包含(利用phpinfo)
Docker搭建复现环境
地址:https://github.com/vulhub/vulhub/tree/master/php/inclusion
ps. github单独下载一个文件夹的方法:
安装:SVN 命令:sudo apt-get install subversion 如果想下载的文件夹链接是:https://github.com/vulhub/vulhub/tree/master/php/inclusion 那么改为:https://github.com/vulhub/vulhub/trunk/php/inclusion 命令行下载:svn checkout https://github.com/vulhub/vulhub/trunk/php/inclusion
下好了以后直接
docker-compose up -d
如果出现 AttributeError: 'module' object has no attribute 'SSL_ST_INIT' 问题:
rm -rf /usr/lib/python2.7/dist-packages/OpenSSL
rm -rf /usr/lib/python2.7/dist-packages/pyOpenSSL-0.15.1.egg-info
sudo pip install pyopenssl

复现
docker 执行完命令之后,直接访问网站 8080 端口会出现 phpinfo 界面
lfi.php?file=/etc/passwd 发现存在文件包含的

使用脚本进行 get shell:
python2 运行:python2 exp.py 192.168.149.133 8080 10(IP 端口 线程)

脚本报的结果:Got it! Sehll created in /tmp/g
所以使用:lfi.php?file=/tmp/g&1=system('ls'); 可以执行命令了!

漏洞原理
完全来自:https://github.com/vulhub/vulhub/tree/master/php/inclusion
大佬们写的太详细了,一看就懂,我就不胡说八道了
在给 php 发送 post 数据包的时候,如果数据包里面包含文件区块,无论访问的代码中有没有处理文件上传的逻辑,php 都会将这个文件保存成临时文件(通常是 /tmp/php[6个随机字符]),文件名可以通过在 $_FILES 这个变量中找到,这个临时文件,在请求结束后就会被删除
同时,因为 phpinfo 页面会将当前请求上下文所有变量都打印出来,所以我们如果向 phpinfo 页面发送包含文件区块的数据包,则可以在返回包里找到 $_FILES 变量的内容,自然也包含临时文件名
在文件包含找不到可利用的文件时,即可用这种方法(为什么我觉得这样一把梭更舒服?),找到临时文件名,然后包含
但是文件包含漏洞和 phpinfo 页面通常是两个页面,理论上我们需要先发数据包给 phpinfo 页面,然后从返回页面中匹配出临时文件名,再将这个文件名发送给文件包含漏洞页面,进行 getshell。在第一个请求结束时,临时文件就被删除了,第二个请求自然也无法包含
这时候需要用到条件竞争,具体流程如下:
1、发送包含 webshell 的上传数据给 phpinfo 页面,这个页面数据包的 header、get 等位置需要塞满垃圾数据
2、因为 phpinfo 页面会将所有数据都打印出来,第一步中的垃圾数据会使得 phpinfo 页面变得非常大
3、php 默认的输出缓冲区大小为 4096,可以理解为 php 每次返回 4096 个字节给 socket 连接
4、我们直接操作原生 socket,每次读取 4096 个字节,只要读取到的字符里面包含临时文件名,就立即发送第二个数据包
5、此时,第一个数据包的 socket 连接实际上还没有结束,因为 php 还在继续每次输出 4096 个字节,所以临时文件此时还没有删除
6、利用这个时间差,第二个数据包,也就是文件包含漏洞的利用,即可成功包含临时文件,最终 getshell
参考
https://github.com/vulhub/vulhub/tree/master/php/inclusion
【web】php文件包含(利用phpinfo)的更多相关文章
- 文件上传之结合phpinfo与本地文件包含利用
背景 某站点存在本地文件包含及phpinfo,可以利用其执行脚本. 原理 原理: 利用php post上传文件产生临时文件,phpinfo()读临时文件的路径和名字,本地包含漏洞生成1句话后门 1.p ...
- web安全~文件包含总结
文章来自freebuf,作者总结的很好,所以拿来做笔记用!!! 0×01 文件包含简介 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大 ...
- 应用安全 - Web安全 - 文件包含攻防
LFI - 无限制本地文件包含 通过目录遍历漏洞可以获取到系统中其他文件的内容 常见的敏感信息路径 Windows系统 c:\boot.ini // 查看系统版本 c:\windows\system3 ...
- 【CTF WEB】文件包含
文件包含 题目要求: 请找到题目中FLAG 漏洞源码 <meta charset='utf-8'> <center><h1>文件阅读器</h1>< ...
- web文件包含
web安全~文件包含总结 文章来自freebuf,作者总结的很好,所以拿来做笔记用!!! 0×01 文件包含简介 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当P ...
- PHP安全(文件包含、变量覆盖、代码执行)
文件包含漏洞 本地文件包含 截断技巧: ../../etc/passwd%00(\x00 \0) 利用操作系统对目录最大长度的限制,可以不需要0字节而达到截断的目的.目录字符串,在windows下25 ...
- web.xml文件的简单说明
在javaEE提供的tutorial中的hello1中的web.xml文件写到: <?xml version="1.0" encoding="UTF-8" ...
- 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击
风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...
- php文件包含漏洞(利用phpinfo)复现
利用docker复现该漏洞,访问http://192.168.80.156:8080/phpinfo.php,可以看到页面出现phpinfo页面 再访问http://192.168.80.156:8 ...
随机推荐
- ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项
前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...
- buu
buuCTFwp(1~32) 1.签到题 题里就有flag flag{buu_ctf} 2.二维码 1.题目是一个二维码,用010发现提示四位数字,想到应该是暗藏压缩包 2.虚拟机foremost分离 ...
- 如何在Docker容器中使用Arthas
Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar ...
- Java培训机构如何选择才能避免被骗?
近年来,随着IT行业的快速崛起,各类互联网人才供不应求,而Java工程师作为目前最为火爆的岗位之一,更是以高薪+高新技术的标签受到了人们的广泛关注.许多年轻人也看到了这个行业的发展前景,决定报名培训机 ...
- Redis概述以及Linux安装
Redis 概述 Redis是什么 Redis,Remote Dictionary Server,远程字典服务.是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.key-v ...
- 洛谷 P5048 - [Ynoi2019 模拟赛] Yuno loves sqrt technology III(分块)
题面传送门 qwq 感觉跟很多年前做过的一道题思路差不多罢,结果我竟然没想起那道题?!!所以说我 wtcl/wq 首先将 \(a_i\) 离散化. 如果允许离线那显然一遍莫队就能解决,复杂度 \(n\ ...
- WC 2007 剪刀石头布
WC 2007 剪刀石头布 看到这个三元环的问题很容易可以考虑到求不合法的三元环的数量的最小值. 什么情况不合法?既然不合法,当且仅当三元环中有一个人赢了另外两个人.所以我们考虑对于一个人而言,如果她 ...
- Codeforces 1368H - Breadboard Capacity(最小割+线段树维护矩阵乘法)
Easy version:Codeforces 题面传送门 & 洛谷题面传送门 Hard version:Codeforces 题面传送门 & 洛谷题面传送门 首先看到这种从某一种颜色 ...
- 洛谷 P6499 - [COCI2016-2017#2] Burza(状压 dp)
题面传送门 一道挺有意思的思维题(?) 首先我们假设根节点深度为 \(0\),那么 Daniel 的目标显然就是堵住一些节点使得 Stjepan 不能移动到深度为 \(k\) 的节点,Stjepan ...
- Linux关机/重启/用户切换/注销
目录 1. 关机/重启命令 2. 用户切换/注销 2.1 基本说明 2.2 切换用户 2.3 注销用户 1. 关机/重启命令 # shutdown命令 shutdown -h now # 立即关机 s ...