XSS概念
指前端代码不严谨,导致解析时出现漏洞,致使攻击者可以往Web页面里插入恶意html代码,当用户浏览该页时,嵌入其中Web里面的html代码会被执行,达到恶意的目的。攻击者利用WEB漏洞让服务器响应包携带恶意js代码导致管理员/用户访问时触发
XSS类型
- 反射型:把用户输入的数据反射给浏览器,欺骗用户自己去点击链接才能触发XSS代码,一般出现在搜索页面,提交按钮等。
- 存储型:一般会出现在网站的留言、评论、博客日志等交互处。恶意脚本被储存在客户端或者服务器的数据库中,当其他用户浏览该网页的时候,站点即从数据库中读取恶意用户存入的非法数据。
- DOM型:特殊的反射型。客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据本地执行。利用非法输入来闭合对应的html标签,例:<a href='$var'></a>将$var的内容变为 ’ οnclick=’alert(/xss/) //。
XSS绕过方法及思路
- 修改前端代码:如闭合标签属性<input value=“”> xss-ctf.xiejiahe.com/level1?name=可以通过拼接“>来闭合input标签在后面加上<script>标签构造事件。
- 大小写:SCRIPT>aLeRT(1111)</sCRIpt>
- 拼接(遇到删除标签情况):<scri<script>pt>alert(111)</scri</script>pt>
- 注释:<scri<!--1-->pt>alert()</sc <!--1--> ript>
- 双写:oonnclick=alert()
- 实体字符:hackbar中的实体字符转换器把字符串实体化(当传递的代码被当成字符串时)
- 单词拼接:单词过滤可以尝试用+进行过滤比如on过滤变成o_n,可以尝试"o"+"n"
- <a>标签内URL超链接:<a href=javascript:alert()> 1 </a>
- IMG标签:<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>
- ERROR事件:<IMG SRC=/ onerror=”alert(String.fromCharCode(88,83,83))”></img>
- Body标签:<BODY ONLOAD=alert('XSS')>
- 抓包重放。
- 编码绕过(下面)
思路:防御规则是死的。XSS绕过根据实际情况,灵活使用各种方法变形绕过才是王道。
编码绕过
Javascript可以使用多种编码方式,如16进制、Unicode、HTML等进行编码。以下属性亲测支持编码:
href=
action=
name=
background=
src=
data=
防御
对字符实体进行转义、使用HTTP Only来禁止JavaScript读取 Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。
HttpOnly:
如果为Cookie中用于用户认证的关键值设置httponly属性,浏览器将会禁止js通 过同源策略访问cookie中设有httponly属性的信息,因此以劫持用户认证cookie为目 的XSS攻击将会失败。
对输入和URL参数进行过滤:
白名单和黑名单
对输出进行编码:
htmlspecialchars()函数把预定义的字符转换为HTML实体。
< 转成 <
> 转成 >
& 转成 &
" 转成 "
' 转成 '
javascript事件:
除了上面的那些转义之外,还要附加上下面的转义:
\ 转成 \\
/ 转成 \/
; 转成 ;(全角;)
绕过方式参考地址:
https://www.fujieace.com/penetration-test/xss-100.html
构造语句: