千灯愿之xdcmsV2代码审计

代码审计方法之一:全局搜索危险函数,然后溯源

1、 可能存在漏洞的变量,例如X_FORWARDED_FOR,CLIENT_IP等等。
千灯愿之xdcmsV2代码审计_第1张图片
存在获取IP地址的方法使用了类似变量,之后溯源,可以全局搜索,看有什么地方调用了getip方法。
千灯愿之xdcmsV2代码审计_第2张图片
一共有几处,先看一下关于登录这一块:
千灯愿之xdcmsV2代码审计_第3张图片
可以看到应该是一个update语句,在这之前getip的值经过了两个过滤函数,具体看一下:
千灯愿之xdcmsV2代码审计_第4张图片
千灯愿之xdcmsV2代码审计_第5张图片
关于第一个safe_html函数,可以采用双写的形式绕过,而且并没有!过滤单双引号,在safe_replace才过滤单引号等等
千灯愿之xdcmsV2代码审计_第6张图片
在这个更新语句的位置经过了两个安全函数,单引号被过滤了,不知道怎么逃逸,所以利用不了,不过在上面一点的代码有了新的发现,在输入用户名密码的时候只使用了safe_html函数过滤,这样的话就可以尝试一下是否存在注入了。
千灯愿之xdcmsV2代码审计_第7张图片
为了测试方便先把关于验证码的校验注释一下:
千灯愿之xdcmsV2代码审计_第8张图片
千灯愿之xdcmsV2代码审计_第9张图片
输入单引号触发报错,通过双写的形式可以看到and关键字已经被逃逸了:
千灯愿之xdcmsV2代码审计_第10张图片
测试字段数为10:(语句不报错显示的应该是密码错误)
千灯愿之xdcmsV2代码审计_第11张图片
千灯愿之xdcmsV2代码审计_第12张图片
利用报错可以注入:
千灯愿之xdcmsV2代码审计_第13张图片
如果全局通过这种方式进行过滤,可以发现很多注入点。
之后使用SQLMAP进行尝试,因为存在过滤,所以要添加一个自定义的绕过脚本,将一些关键字双写绕过:
千灯愿之xdcmsV2代码审计_第14张图片
其中学到了一些关于bypass的知识:=用like代替,where id=1可以换成limit 1表示只查一条记录,也可以用in来代替等于
在这里插入图片描述
千灯愿之xdcmsV2代码审计_第15张图片

审计方法之二:全局阅读代码

这个憨批系统有问题,后续很多审计未记录
变量覆盖导致系统重装漏洞:
1、 install\index.php通过变量$insLockfile来判断系统是否已经安装。
在这里插入图片描述
而$insLockfile变量在程序开始前赋值:
在这里插入图片描述
2、 在程序第12到19行,存在对各类传值的遍历检查,此时可以通过手动传递一个$insLockfile变量,然后覆盖程序原来设置的值,造成系统重装。
千灯愿之xdcmsV2代码审计_第16张图片
程序遍历获取$_GET,$_POST,$_COOIE的值,然后再遍历检查每一个全局数组内的数据,最后取数组的键为变量名,取数组的值为变量值。例如传递index.php?id=123,最后会有一个$id=’123’的变量。那么就可以通过这种方式覆盖原来定义的$insLockfile。
千灯愿之xdcmsV2代码审计_第17张图片
千灯愿之xdcmsV2代码审计_第18张图片
0x01 安装步骤跳过
系统安装过程中,安装步骤未校验其先后顺序,导致可以直接跳过安装步骤限制。
在这里插入图片描述
千灯愿之xdcmsV2代码审计_第19张图片
可以看到,从步骤二到步骤三之间没有校验步骤二是否已经完成,可以直接跳过该步骤。

通过审计这个系统,对代码审计的熟练度,阅读代码的能力又有了提高,加油!!!

你可能感兴趣的:(代码审计)