PHP代码审计实战之盾灵CMS

先下载一套盾灵投稿系统吧,可以在站长下载中下载。下载好之后放到自己的Web服务器相应的目录中安装配置好即可,然后使用Sublime等工具来进行白盒审计吧。

通常后台是挖掘漏洞的重要地方,这里我们只挖掘后台的一些漏洞,所以就只打开后台目录admin:

PHP代码审计实战之盾灵CMS


一、绕过前端JS过滤的SQL注入漏洞登录后台漏洞:

首先是访问盾灵的主页面,然后直接在URL后添加admin跳转到后台登陆界面,账号输入admin再添加单引号,发现单引号会被自动删掉:

PHP代码审计实战之盾灵CMS


查看源代码,发现是JS对敏感字符进行过滤:

PHP代码审计实战之盾灵CMS


直接用Burpsuite代理绕过JS前端过滤即可成功登录后台:

PHP代码审计实战之盾灵CMS

PHP代码审计实战之盾灵CMS


现在来看下源代码,位于/admin/login.php:

PHP代码审计实战之盾灵CMS

可以看到,在服务端并没有任何的过滤机制。


修复方案:

使用转义过滤函数mysql_real_escape_string()对用户输入的内容进行转义和过滤,如下:

PHP代码审计实战之盾灵CMS


再次使用Burpsuite和万能密码绕过前端JS过滤:

PHP代码审计实战之盾灵CMS

重定向回登录页面,防御成功。


二、cookie欺骗登录后台漏洞:

接着查看后台相关的文件,从后台登陆后的主页axadmin.php开始:

PHP代码审计实战之盾灵CMS


可以看到其先通过require()函数将check.php包含了进来,查看check.php文件:

PHP代码审计实战之盾灵CMS

发现第二句isset语句为鸡肋,第一句为获取cookie的admin值,若为空则重定向到index.php主页。这里就可以进行cookie欺骗,利用Burpsuite写入cookie信息给admin一个值即可绕过登录而直接登录后台。


在主页的URL中直接输入后台的地址,如http://服务器URL/dunling/admin/axadmin.php,然后用Burpsuite抓包添加Cookie信息admin的值后重发请求,直接绕过登录进入到了后台:

PHP代码审计实战之盾灵CMS

注意一点的就是Cookie要放置在Connection前面或者将Connection内容去掉,不然不能成功进行cookie欺骗。


防御方法:

在login.php中可以看到,在正常登录时是将cookie中admin的值设置为“Y”的,那么在check.php中则判断条件就将admin==null改为admin!=’Y’。

当cookie的admin值不为Y时,会跳转回网站的主页:

PHP代码审计实战之盾灵CMS


但是当值为Y时还是可以免登录进后台,为了进一步地防御,将check.php中的第二句isset语句利用上,因为登录之后cookie中admin_name的值为‘admin’,所以还需要在if判断语句中增加条件:

PHP代码审计实战之盾灵CMS


最后,只有当cookie中admin值为Y、admin_name值为admin时,才能成功登录:

PHP代码审计实战之盾灵CMS

PHP代码审计实战之盾灵CMS

简单的防御已经实现,至于更深层的防御则需要运用cookie欺骗的防御方法来实现。


三、其他的一些无关紧要的漏洞?

1、修改密码缺乏认证机制:

在登录后台之后,点击系统管理的修改密码,这里缺乏验证机制如重新输入旧密码,可以导致管理员账号和密码全部被改掉,最其中典型的利用就是CSRF(如DVWA中的利用场景一样这里就不累赘了),这里在前端用JS限定密码必须大于4位,直接通过Burpsuite可绕过密码位数限制:

PHP代码审计实战之盾灵CMS

PHP代码审计实战之盾灵CMS

修改之后管理员的账号密码就改为a和1了。


2、系统设置存在XSS漏洞:

当然这个漏洞的利用前提是已经绕过后台登陆上来了。

PHP代码审计实战之盾灵CMS

这里没办法进行弹窗,因为弹窗需要alert()函数,但是查看源代码发现这一块内容是在一个array数组中的,即已经包含了括号,再加进去就会报错,所以可以进行其他利用如将其链接改为重定向到另外的网站,这里以新浪为例:

PHP代码审计实战之盾灵CMS


3、会员管理存在SQL注入漏洞:

注册两个会员user1和user2,虽然在后台的会员管理中可以直接看到,但是在根据UID的搜索框中是存在SQL注入的:

PHP代码审计实战之盾灵CMS

咋一看没啥用,但是要是攻击者构造恶意的SQL注入会进行破坏性的攻击、如删除相关数据库信息等。


还有更多的一些漏洞可以自己挖掘一下,以上的纯属想熟悉下PHP代码审计的方法和流程~