XSS攻击实验

作者: Spring_Bear | 来源:发表于2018-03-12 17:01 被阅读52次

    最近看了关于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该怎么注入没什么头绪,浏览器编码解码的问题还有点迷糊。

    相关文章

      网友评论

        本文标题:XSS攻击实验

        本文链接:https://www.haomeiwen.com/subject/fghgfftx.html