网络与信息安全Web安全

XSS攻击实验

2018-03-12  本文已影响52人  Spring_Bear

最近看了关于xss攻击的相关知识点,想找个小站试一下结果没成功,自己搭了bwapp的环境,做了一个关于XSS - Reflected (POST)这一项的实验。

过程

看题目应该是一个Post提交的反射型xss漏洞。看到页面有文本框,直接注入

<script>alert("hi")</script>

就可以得到:


image.png

然后我把难度改成了medium,发现这样行不通,尝试输入',发现输出\',说明输出对单引号进行了转义。
看了下源码,找到xss_post.php核心php代码,找到输出的位置如下:


image.png

寻找xss函数:


image.png

再找xss_check_4()函数,在functions_external.php中找到:


image.png

这里用了addslashes函数对输出进行了转义,看了下函数的作用,是对 ',",\ 和 NULL进行了转义,所以实际上,<script></script>还是执行了,只不过对双引号进行了转义,只是简单的<script>alert(1)</script>就可以得到:


image.png

然后我把难度调到了high,发现怎么都会原样输出,并不会执行脚本。看了下源码,发现对输出进行了转义,利用的是htmlspecialchars函数,可以看到:


image.png

htmlspecialchars函数看了它的介绍,它的作用是:

简单的说就是,&通过编码变成了html实体&; " 通过编码变成了html实体的 " 等等。

那么这里就不知道该怎么绕过了,因为它把特殊字符转化为了实体,<script>alert(1)</script>变成了内容而不是脚本的含义了。

xss编码剖析这篇文章讲到了htmlspecialchars函数的绕过问题,它说明了如果这个函数先在script环境内的话,再在html环境内,像这样:

浏览器在接收html文件的时候就会先进行js解码,再进行HTML解码,那么我们先对输入进行js编码的话,就可以绕过htmlspecialchars函数,然后通过js解码成为html的内部代码执行。

关于浏览器的编码解码问题,可以参考这篇文章HTTP协议及浏览器编码行为

总结

这个high难度的xss该怎么注入没什么头绪,浏览器编码解码的问题还有点迷糊。

上一篇下一篇

猜你喜欢

热点阅读