代码审计之xhcms

2021-03-18 9,032

序言

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


0x01 xhcmsv1.0源码

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

下载地址:

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

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

- phpstudy
- phpstrom

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


0x02 安装cms

安装成功提示如下


微信截图_20210317105518.png


0x03 phpstrom配置php环境

配置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


0x04 Go

熊海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

Tags:
评论  (1)
快来写下你的想法吧!

Am1azi3ng

文章数:10 积分: 190

没有说明吖

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号