DVWA系列之XSS(跨站脚本攻击)——反射型XSS源码分析及漏洞利用
XSS
XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行。
XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型的XSS。
DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。
CSRF与XSS二者区别
CSRF:无法获取受害者的cookie,无法看到cookie;
只是利用受害者是被服务器信任的(靠验证cookie),而给服务器发送请求;
XSS:利用cookie只是xss的一种体现,xss还可以篡改网页、URL跳转等等;
跨站脚本,脚本可以做什么,xss就可以做什么;
单在利用cookie上来说:获取受害者的cookie,从而得到服务器的信任,进行后续攻击 。
获取手段是反射、存储、dom。
注:不同浏览器cookie不能共享
反射型XSS
目录
low级别源码分析
array_key_exists()函数:检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
注:如果指定数组的时候省略了键名,将会生成从 0 开始并且每个键值对应以 1 递增的整数键名
(详情见:https://www.w3school.com.cn/php/func_array_key_exists.asp)
该源码键名为“name”,也就是说得到的数组中必须含有“name”即可,未做任何过滤,存在XSS漏洞
漏洞利用
插入XSS语句
成功弹窗
链接为:
盗取cookie值,绕过登录
打开谷歌浏览器,输如下网址,并修改cookie值和安全级别
成功绕过登录!
medium级别源码分析
与low级别相比,增加了str_replace()函数,作用是以其他字符替换字符串中的一些字符(区分大小写)。
(详情见:https://www.w3school.com.cn/php/func_string_str_replace.asp)
这个函数基于黑名单的思想,将输入的<script>过滤掉了,但由于str_replace()函数区分大小写,可以想办法进行绕过。
漏洞利用
双写绕过:<sc<script>ript>alert(/xss/)</script>
大小写混淆绕过:<ScRipt>alert(/xss/)</script>
链接为:
high级别源码分析
与medium源码相比 ,增加了preg_replace()函数,作用是执行一个正则表达式的搜索和替换。
(详情见:https://www.runoob.com/php/php-preg_replace.html)
该源码使用了正则表达式搜索和替换,由于正则表达式不区分大小写且字母逐个进行匹配替换,所以无法再进行大小写绕过和双写绕过。在这里<script>标签无法再使用注入XSS代码,但可以使用其他标签。
漏洞利用
可以通过img、input、a、form、on等标签的事件或者iframe等标签的src注入恶意的js代码
<img src=1 οnerrοr=alert(/xss/)>
链接为:
<iframe src="http://www.baidu.com" height="250" width="300"></iframe>
impossible级别源码分析
与high级别源码相比,增加了Anti-CSRF token机制和htmlspecialchars()函数。
Anti-CSRF token机制在前面的dvwa系列已经详细解释过,这里不再赘述。
htmlspecialchars()函数:将特殊字符转换为 HTML 实体,防止浏览器将其作为HTML元素。
(详情见:https://www.w3school.com.cn/php/func_string_htmlspecialchars.asp)
<IMG src="javascript:alert('XSS')"
无法进行有效的漏洞利用