XSS Reflected 漏洞分析与测试


前言

由于最近在做XSS方面的测试,于是找到了DVWA平台进行实验测试,通过这三篇文章让大家了解XSS方面的大概内容,这三篇文章只是把你领进XSS的大门,要想真正深入的学习XSS,你还需要去学习很多东西来提升自己。
网站测试分为黑盒测试和白盒测试,在这里采用白盒测试来对网站进行XSS漏洞测试,XSS漏洞分为三种:反射型XSS、存储型XSS、DOM型XSS,分别用三篇文章来进行阐述。

XSS攻击形成原理

XSS中文名是“跨站脚本攻击”,英文全称是“Cross Site Scripting”。

XSS也是一种注入攻击,长期以来被列为客户端web安全中的头号大敌,当web应用对用户输入过滤不严格,攻击者写入恶意的脚本代码(HTML、JavaScript)到网页中时,如果用户访问了含有恶意代码的页面,恶意脚本就会被浏览器解析执行导致用户被攻击。

OWASP TOP 10 威胁多次把XSS列在榜首,常见的危害有:cookie窃取、session劫持、钓鱼攻击、蠕虫、ddos、获取用户真实IP、识别用户浏览器 ··········

dvwa反射型xss

反射型XSS:只是简单地把用户输入的数据反射给浏览器,一般出现在URL参数中及网站搜索栏中,只有用户点击恶意链接触发恶意代码的URL,才能受到攻击,只能触发一次,也被称为“非持久型XSS(Non-persistent XSS)”。

漏洞测试

low级别

img

在输入框里面随便输入一个String(admin),发现显示:Hello admin这句话,同时可以知道数据提交是以GET请求的方式

查看源码:并没有什么Protect,这是最危险的

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?> 

构造payload,执行最简单的XSS攻击

http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%22_XSS_%22%29%3C/script%3E

当用户触发该URL时就会受到XSS攻击,有弹框出现

img

后续测试,利用此漏洞,你也可以尝试去获得用户登陆的Cookie,在这里就不多说了,很容易实现的

medium 级别

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = str_replace( '<script>', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?> 

经过代码审计,可以发现medium级别进行了Protect,对GET请求到的的内容进行''字符串匹配,将内容里出现的该字

符串替换成空,避免<script>标签造成的XSS攻击,但是<script>标签真的就不能使用了吗,答案是可以使用的,回过头来继续分析此str_replace()函数

str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。

在这里可以利用str_replace()函数区分大小写的缺点来进行XSS攻击

构造payload,继续使用<script>标签进行XSS攻击

http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3CsCript%3Ealert%28%271111%27%29%3C%2Fscript%3E#

成功绕过<script>标签的匹配

img

另一种绕过方法不使用<script>标签进行XSS攻击,既然str_repalce()函数匹配的是<script>标签,而不匹配其它标签,所以在这里也可以利用<img>标签进行XSS攻击

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cimg+src%3D%23+onerror%3Dalert%28%22_XSS_%22%29%3E#

<img>标签绕过str_replace()

img

high 级别

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?> 

代码审计之后,发现high级别存在另外一种的Protect,利用preg_replace()函数进行匹配“< s r i p t”等字符,将其置为空,此时<script>标签是不能使用的,不管是大小进行区分写都不可以

小写<script>标签被过滤

http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%22_XSS_%22%29%3C%2Fscript%3E#

img

大小写混合<script>标签被过滤

http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3CScripT%3Ealert%28%22_XSS_%22%29%3C%2FscriPt%3E#

img

上面的既然都不行,就需要利用其它标签进行XSS攻击,此处可以利用 medium 级别 中提到的<img>标签进行绕过preg_replace()函数的Protect

构造payload

http://192.168.43.146/dvwa/vulnerabilities/xss_r/?name=%3Cimg+src%3D%23+onerror%3Dalert%28%22_XSS_%22%29%3E#

<img>标签成功绕过preg_replace()

img

impossible 级别

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $name = htmlspecialchars( $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

impossible 级别的Protect不能被绕过,由于htmlspecialchars()函数的保护作用

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >

它的语法如下:
htmlspecialchars(string,flags,character-set,double_encode)
    其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:

可用的引号类型:

ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号的

因为输入的所有标签都被转义,所以此处不存在XSS攻击,但是要注意flags属性,使用不当过滤XSS时就会被绕过。


Author: Qftm
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Qftm !
 Previous
XSS Stored 漏洞分析与测试 XSS Stored 漏洞分析与测试
dvwa存储型XSS存储型XSS:会把用户输入的数据“存储”在服务器端,一般出现在需要用户可以输入数据的地方,比如网站的留言板、评论等地方,当网站这些地方过滤不严格的时候,就会被黑客注入恶意攻击代码,存储在服务器端,每当用户加载该页面时,都
2018-11-04
Next 
ARP Protocol Spoofing Attack ARP Protocol Spoofing Attack
ARP攻击概述ARP攻击主要是存在于局域网中,通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或
2018-10-13
  TOC