闲来无事,想想搞点啥,这两天天天渗透app和小程序,搞得头都是大的,刚好前两天朋友给了个熊海cms,顺便审计一下
下载熊海cms源码,源码之家等都有,小心软件捆绑!!!
下载地址:
https://www.mycodes.net/43/7855.html
php代码审计需要准备的工具
- phpstudy - phpstrom
用途就不多说了,phpstrom比较好用,方便代码审计下断点以及跟进函数,phpstudy集成web服务以及mysql数据库也比较方便。
安装成功提示如下
配置php环境位置
>File->Settings-> Languages&Frameworks->PHP
接下来安装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文件夹下
接着修改**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
phpstudy启用cmd命令行运行命令
php -m
查看xdebug已经安装完毕
phpstrom配置debug环境
配置server
运行时选择配置的servers
浏览器安装插件方便使用进行debug测试
验证phpstrom能否下断点进行debug测试
熊海cms已经能够正常访问了,自己手动测试一下,数据交互也都没有问题
成功搭建之后,无从下手的情况下,也可以黑盒测试去找漏洞,无论使用扫描器做漏扫,或者手工黑盒,这些都是可以的,有了代码,审计的方式也有不少。常用的代码审计工具,例如**Seay**审计工具或者**Fortify**审计工具都可以,不过Fortify需要lincese,有没有免费的不大清楚,有兴趣的可以找找,或者其它开源的工具,不再详细赘述,,,,
有了源码比较容易查看该cms的架构。
这里我先审计的是前端,简单看了一下sql语句,参数传递使用了函数**addslashes**,这个函数会产生宽字节注入,手动验证构造payload**?r=content&cid=5%27**
下断点调试F7,url传入的参数“ ’ ”再传入的时候直接被函数**addslashes**转义为了“ \' ”,查看html的回显
查看其它页面(例如:download.php)查询位置的参数传递,都是函数**addslashes**处理了传入的参数,可以判定该位置存在宽字节注入,给予报错型的,宽字节注入绕过反斜杠,,,,,,sqlmap验证一下,另外结合一下sqli的less2理解一下原理
这里主要审计后台登录框位置的代码,直接查看admin目录下的** login.php**代码,下断点进行传参
这里很容易理解,先校验传入的user是否正确,然后对password进行md5加密,跟数据库对应的user相对象的加密的password做验证
sql语句查询对**$user**进行查询,**'$user'**会联想到单引号闭合,进行尝试
user: admin password:md5(admin)=21232f297a57a5a743894a0e4a801fc3 user:test password:md5(test)=098f6bcd4621d373cade4e832627b4f6
构造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
可以看到传入的参数以及绕过登录,此位置存在万能密码登录,验证成功。当然该cms还有其它漏洞,xss、越权等,此处不再另做审计。
本文作者:Am1azi3ng
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/155078.html