PHP代码审计实战之盾灵CMS
2017-10-20 21:01
387 查看
先下载一套盾灵投稿系统吧,可以在站长下载中下载。下载好之后放到自己的Web服务器相应的目录中安装配置好即可,然后使用Sublime等工具来进行白盒审计吧。
通常后台是挖掘漏洞的重要地方,这里我们只挖掘后台的一些漏洞,所以就只打开后台目录admin:
查看源代码,发现是JS对敏感字符进行过滤:
直接用Burpsuite代理绕过JS前端过滤即可成功登录后台:
现在来看下源代码,位于/admin/login.php:
可以看到,在服务端并没有任何的过滤机制。
修复方案:
使用转义过滤函数mysql_real_escape_string()对用户输入的内容进行转义和过滤,如下:
再次使用Burpsuite和万能密码绕过前端JS过滤:
重定向回登录页面,防御成功。
可以看到其先通过require()函数将check.php包含了进来,查看check.php文件:
发现第二句isset语句为鸡肋,第一句为获取cookie的admin值,若为空则重定向到index.php主页。这里就可以进行cookie欺骗,利用Burpsuite写入cookie信息给admin一个值即可绕过登录而直接登录后台。
在主页的URL中直接输入后台的地址,如http://服务器URL/dunling/admin/axadmin.php,然后用Burpsuite抓包添加Cookie信息admin的值后重发请求,直接绕过登录进入到了后台:
注意一点的就是Cookie要放置在Connection前面或者将Connection内容去掉,不然不能成功进行cookie欺骗。
防御方法:
在login.php中可以看到,在正常登录时是将cookie中admin的值设置为“Y”的,那么在check.php中则判断条件就将admin==null改为admin!=’Y’。
当cookie的admin值不为Y时,会跳转回网站的主页:
但是当值为Y时还是可以免登录进后台,为了进一步地防御,将check.php中的第二句isset语句利用上,因为登录之后cookie中admin_name的值为‘admin’,所以还需要在if判断语句中增加条件:
最后,只有当cookie中admin值为Y、admin_name值为admin时,才能成功登录:
简单的防御已经实现,至于更深层的防御则需要运用cookie欺骗的防御方法来实现。
修改之后管理员的账号密码就改为a和1了。
这里没办法进行弹窗,因为弹窗需要alert()函数,但是查看源代码发现这一块内容是在一个array数组中的,即已经包含了括号,再加进去就会报错,所以可以进行其他利用如将其链接改为重定向到另外的网站,这里以新浪为例:
咋一看没啥用,但是要是攻击者构造恶意的SQL注入会进行破坏性的攻击、如删除相关数据库信息等。
还有更多的一些漏洞可以自己挖掘一下,以上的纯属想熟悉下PHP代码审计的方法和流程~
通常后台是挖掘漏洞的重要地方,这里我们只挖掘后台的一些漏洞,所以就只打开后台目录admin:
一、绕过前端JS过滤的SQL注入漏洞登录后台漏洞:
首先是访问盾灵的主页面,然后直接在URL后添加admin跳转到后台登陆界面,账号输入admin再添加单引号,发现单引号会被自动删掉:查看源代码,发现是JS对敏感字符进行过滤:
直接用Burpsuite代理绕过JS前端过滤即可成功登录后台:
现在来看下源代码,位于/admin/login.php:
可以看到,在服务端并没有任何的过滤机制。
修复方案:
使用转义过滤函数mysql_real_escape_string()对用户输入的内容进行转义和过滤,如下:
再次使用Burpsuite和万能密码绕过前端JS过滤:
重定向回登录页面,防御成功。
二、cookie欺骗登录后台漏洞:
接着查看后台相关的文件,从后台登陆后的主页axadmin.php开始:可以看到其先通过require()函数将check.php包含了进来,查看check.php文件:
发现第二句isset语句为鸡肋,第一句为获取cookie的admin值,若为空则重定向到index.php主页。这里就可以进行cookie欺骗,利用Burpsuite写入cookie信息给admin一个值即可绕过登录而直接登录后台。
在主页的URL中直接输入后台的地址,如http://服务器URL/dunling/admin/axadmin.php,然后用Burpsuite抓包添加Cookie信息admin的值后重发请求,直接绕过登录进入到了后台:
注意一点的就是Cookie要放置在Connection前面或者将Connection内容去掉,不然不能成功进行cookie欺骗。
防御方法:
在login.php中可以看到,在正常登录时是将cookie中admin的值设置为“Y”的,那么在check.php中则判断条件就将admin==null改为admin!=’Y’。
当cookie的admin值不为Y时,会跳转回网站的主页:
但是当值为Y时还是可以免登录进后台,为了进一步地防御,将check.php中的第二句isset语句利用上,因为登录之后cookie中admin_name的值为‘admin’,所以还需要在if判断语句中增加条件:
最后,只有当cookie中admin值为Y、admin_name值为admin时,才能成功登录:
简单的防御已经实现,至于更深层的防御则需要运用cookie欺骗的防御方法来实现。
三、其他的一些无关紧要的漏洞?
1、修改密码缺乏认证机制:
在登录后台之后,点击系统管理的修改密码,这里缺乏验证机制如重新输入旧密码,可以导致管理员账号和密码全部被改掉,最其中典型的利用就是CSRF(如DVWA中的利用场景一样这里就不累赘了),这里在前端用JS限定密码必须大于4位,直接通过Burpsuite可绕过密码位数限制:修改之后管理员的账号密码就改为a和1了。
2、系统设置存在XSS漏洞:
当然这个漏洞的利用前提是已经绕过后台登陆上来了。这里没办法进行弹窗,因为弹窗需要alert()函数,但是查看源代码发现这一块内容是在一个array数组中的,即已经包含了括号,再加进去就会报错,所以可以进行其他利用如将其链接改为重定向到另外的网站,这里以新浪为例:
3、会员管理存在SQL注入漏洞:
注册两个会员user1和user2,虽然在后台的会员管理中可以直接看到,但是在根据UID的搜索框中是存在SQL注入的:咋一看没啥用,但是要是攻击者构造恶意的SQL注入会进行破坏性的攻击、如删除相关数据库信息等。
还有更多的一些漏洞可以自己挖掘一下,以上的纯属想熟悉下PHP代码审计的方法和流程~
相关文章推荐
- PHP代码审计实战之MetInfo CMS
- 一个CMS案例实战讲解PHP代码审计入门
- PHP代码审计实战之XDcms
- [代码审计]eyoucms前台未授权任意文件上传
- PHP代码审计小计
- [置顶] PHP语言代码漏洞审计技巧笔记分享
- mysql分库分表实战及php代码操作完整实例
- php代码审计基础笔记
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 8.全局防护盲点的总结下篇
- mysql分库分表实战及php代码操作完整实例
- Jarvis OJ PHPINFO【审计代码反序列化】
- [置顶] mysql分库分表实战及php代码操作完整实例
- PHP代码审计学习总结
- PHP代码审计之路——1.文件、目录、浏览查看相关
- PHP代码审计
- PHP代码审计系统—RIPS
- PHP代码审计学习总结
- php漏洞挖掘与代码审计方法
- [代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)
- PHP代码审计教程