DVWA_XSS
前言
XSS,全称
Cross Site Scripting
,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS
不仅仅限于JavaScript
,还包括flash
等其它脚本语言。根据恶意代码是否存储在服务器中,XSS
可以分为存储型的XSS
与反射型的XSS
。
摘自https://www.incapsula.com/web-application-security/reflected-xss-attacks.html
反射型XSS
- 当恶意脚本从Web应用程序反射到受害者的浏览器时,就会发生反射的XSS攻击,也称为非持久性攻击
- 该脚本通过链接激活,该链接向具有漏洞的网站发送请求,该漏洞允许执行恶意脚本。该漏洞通常是传入请求未被充分清理的结果,这允许操纵Web应用程序的功能和激活恶意脚本。
- 为了分发恶意链接,犯罪者通常将其嵌入到电子邮件或第三方网站中(例如,在评论部分或社交媒体中)。该链接嵌入在锚文本中,该文本激发用户点击它,从而向被利用的网站发起
XSS
请求,将攻击反映给用户
存储型XSS
- 为了成功执行存储的
XSS
攻击,犯罪者必须在Web
应用程序中找到漏洞,然后将恶意脚本注入其服务器(例如,通过注释字段)。 - 最常见的目标之一是允许用户共享内容的网站,包括博客,社交网络,视频共享平台和留言板。每次查看受感染的页面时,恶意脚本都会传输到受害者的浏览器。
XSS (Reflected)
Low
在输入框写入<script>alert</script>
有弹窗,表名有XSS注入
代码未对name进行过滤,且name插入html标签中,可以植入js恶意代码。
Medium
源码对<script>
标签过滤,采用双写绕过
1)双写绕过<sc<script>ript>alert(/xss/)</script>
2)大小写混写绕过
High
对script
标签正则过滤。双写,大小写混写绕过行不通。
通过img
、body
等标签的事件或者iframe等标签的src注入恶意的js代码
<img src=1 onerror=alert(/xss/)>
Impossible
htmlspecialchars函数把预定义的字符&、”、 ’、<、>
转换为HTML实体,防止浏览器将其作为HTML元素。且启用anti-CSRF
。
XSS (Stored)
Low
对源码分析,PHP脚本只对sql
注入做了一定的防御。但是确存在stored xss
在message
构建 payload
<script>alert(/name/)</script>
2)前端对name
长度做了限制,使用F1
2 修改MAXlangth
Medium
源代码对message
做了xss
防御,但却name
却没有做任何防护,可以抓包对name
进行js
恶意代码插入(双写绕过,大小写混写)。
High
massage无法构造恶意payload
name对<script>
标签正则过滤,我们可以采用其他标签的事件来构造恶意payload
img
、iframe
等其它危险的标签,并抓包改写。
htmlspecialchars如果没有使用正确,可以通过编码的方式绕过
手工检测XSS
最重要是考虑哪里有输入,输入的数据在什么地方输出
- 可得知输出位置
输入一些敏感字符,如"<、>"、'、()"
,提交后查看HTML源代码,观察输入的字符是否被转义
如果做了过滤,添上字符传AAAA 查询字符比较方便
- 无法得知输出位置
采用输入""/>XSS Test"
测试
修复XSS跨站漏洞
对输入与输出严格过滤
- 转义html特殊字符
<、>、“、‘、&
htmlspecialchars(),htmlentities()函数把预定义字符转换为HTML实体
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!