代码审计之xhcms
2021-03-18 13:06:03 Author: www.secpulse.com(查看原文) 阅读量:234 收藏

闲来无事,想想搞点啥,这两天天天渗透app和小程序,搞得头都是大的,刚好前两天朋友给了个熊海cms,顺便审计一下

下载熊海cms源码,源码之家等都有,小心软件捆绑!!!

下载地址:

https://www.mycodes.net/43/7855.html

php代码审计需要准备的工具

- phpstudy
- phpstrom

用途就不多说了,phpstrom比较好用,方便代码审计下断点以及跟进函数,phpstudy集成web服务以及mysql数据库也比较方便。

安装成功提示如下

微信截图_20210317105518.png

配置php环境位置

>File->Settings-> Languages&Frameworks->PHP

微信截图_20210317111808.png

接下来安装xdebug扩展,根据php版本选择扩展文件,由于我的php版本为**5.6**所以选择下载地址为

[php-5.6-xdebug]

https://xdebug.org/files/php_xdebug-2.5.5-5.6-vc11-nts-x86_64.dll

安装位置放在phpstudy下的php文件夹对应的php可执行程序的ext文件夹下

微信截图_20210317114650.png

接着修改**php.ini**配置文件,添加xdebug配置内容

[XDebug]
xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug"
xdebug.trace_output_dir="D:\phpStudy\tmp\xdebug"
;zend_extension="D:\phpStudy\php\php-5.6.27-nts\ext\php_xdebug.dll"
;zend_extension="C:\phpStudy20161103\php\php-5.6.27-nts\ext\php_xdebug.dll"
zend_extension="D:\phpStudy\php\php-5.6.27-nts\ext\php_xdebug-2.5.5-5.6-vc11-nts-x86_64.dll"  ;指定Xdebug扩展文件的绝对路径
xdebug.auto_trace=on  ;启用代码自动跟踪
xdebug.collect_params=on  ;允许收集传递给函数的参数变量
xdebug.collect_return=on  ;允许收集函数调用的返回值
xdebug.trace_output_dir="D:\phpStudy\tmp\xdebug"  ;指定堆栈跟踪文件的存放目录
xdebug.profiler_enable=on  ;是否启用Xdebug的性能分析,并创建性能信息文件
xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug"  ;指定性能分析信息文件的输出目录
xdebug.remote_enable = on  ;是否开启远程调试
xdebug.remote_handler = dbgp  ;指定远程调试的处理协议
xdebug.remote_host= localhost  ;指定远程调试的主机名
xdebug.remote_port = 9000  ;指定远程调试的端口号
xdebug.idekey = PHPSTORM  ;指定传递给DBGp调试器处理程序的IDE Key

在这里尽量根据访问[该xdebug网址]

https://xdebug.org/wizard

去识别对应的xdebug,否则无法启动debug,或者选用路径为对应php版本下的xdebug

微信截图_20210317114848.png

phpstudy启用cmd命令行运行命令

php -m

微信截图_20210317115433.png

查看xdebug已经安装完毕

phpstrom配置debug环境

微信截图_20210317123310.png

配置server

微信截图_20210317123442.png

运行时选择配置的servers

微信截图_20210317123535.png

浏览器安装插件方便使用进行debug测试

微信截图_20210317123629.png

验证phpstrom能否下断点进行debug测试

微信截图_20210317123712.png

熊海cms已经能够正常访问了,自己手动测试一下,数据交互也都没有问题

微信截图_20210317123904.png

成功搭建之后,无从下手的情况下,也可以黑盒测试去找漏洞,无论使用扫描器做漏扫,或者手工黑盒,这些都是可以的,有了代码,审计的方式也有不少。常用的代码审计工具,例如**Seay**审计工具或者**Fortify**审计工具都可以,不过Fortify需要lincese,有没有免费的不大清楚,有兴趣的可以找找,或者其它开源的工具,不再详细赘述,,,,

有了源码比较容易查看该cms的架构。

这里我先审计的是前端,简单看了一下sql语句,参数传递使用了函数**addslashes**,这个函数会产生宽字节注入,手动验证构造payload**?r=content&cid=5%27**

微信截图_20210317124008.png

下断点调试F7,url传入的参数“ ’ ”再传入的时候直接被函数**addslashes**转义为了“ \' ”,查看html的回显

图片.png

查看其它页面(例如:download.php)查询位置的参数传递,都是函数**addslashes**处理了传入的参数,可以判定该位置存在宽字节注入,给予报错型的,宽字节注入绕过反斜杠,,,,,,sqlmap验证一下,另外结合一下sqli的less2理解一下原理

微信截图_20210317125044.png

这里主要审计后台登录框位置的代码,直接查看admin目录下的** login.php**代码,下断点进行传参

微信截图_20210317125236.png

这里很容易理解,先校验传入的user是否正确,然后对password进行md5加密,跟数据库对应的user相对象的加密的password做验证

微信截图_20210317125314.png

sql语句查询对**$user**进行查询,**'$user'**会联想到单引号闭合,进行尝试

user: admin
password:md5(admin)=21232f297a57a5a743894a0e4a801fc3
user:test
password:md5(test)=098f6bcd4621d373cade4e832627b4f6

微信截图_20210317125353.png

构造payload:

账号:test' union select 1,2,'test','098F6BCD4621D373CADE4E832627B4F6',5,6,7,8#
密码:test
账号:admin' union select 1,2,'test','21232f297a57a5a743894a0e4a801fc3',5,6,7,8#
密码:admin

微信截图_20210317125502.png

可以看到传入的参数以及绕过登录,此位置存在万能密码登录,验证成功。当然该cms还有其它漏洞,xss、越权等,此处不再另做审计。

本文作者:Am1azi3ng

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/155078.html


文章来源: https://www.secpulse.com/archives/155078.html
如有侵权请联系:admin#unsafe.sh