靶机系统:win7
- 系列博文
- 一、DVWA 靶机
- 二、XSS
- 1. 判断是否存在XSS漏洞
- 2. XSS攻击窃取cookie
- 2.1 cookie为什么产生?
- 2.2 cookie作用机制
- 2.3 存储型XSS攻击窃取cookie
- 2.4 中级存储型XSS攻击(防御代码)
- 3. 反射型XSS漏洞
- 3.1 反射型XSS漏洞实验
- 3.2 中级、高级反射型XSS攻击
- 3.2.1 中级反射型XSS攻击防御与绕过
- 3.2.2 高级级反射型XSS攻击防御与绕过
- 3.3 总结
- 4. 提出防御方案
系列博文
- 信安小白,说明白渗透测试及信息安全
- 信安小白,一篇博文讲明白暴力破解和SQL注入
- 信安小白,一篇博文讲明白上传漏洞——获得shop靶机的Webshell
- 信安小白,一篇博文讲明白存储型、反射型XSS漏洞
- 信安小白,一篇博文讲明白CSRF攻击和防御
旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。DVWA靶机把最常见的漏洞都包含了:SQL注入、文件上传、文件包含、命令注入、XSS、CSRF。
GitHub 下载DVWA 靶机
DVWA 安全级别:可以看到不同的等级的防御源代码—— View Source
- 低级: 毫无安全措施可言。用错误的编码让 Web应用程序的漏洞表现出来,并作为教授或者学习基本开发技术的平台。
- 中级:这个级别,开发人员会尝试保护但是失败…。对用户提出挑战,以改进他们的开发技术。
- 高级:中级难度的扩展,会混用更难攻击的代码或者替换不良代码来尝试保护。类似于CTF竞赛。
- 不可能:可以抵御所有漏洞。这是用来将有漏洞的代码和安全性代码做对比的。
安装DVWA平台后,部分账户密码设置在config.inc.php中
注意:
DVWA靶机平台可能存在bug,即:受到攻击时就跳转到impossible状态并且不能修改! 因此解决方法:用记事本 打开 DVWA-X.X/config/config.inc.php(例:DVWA-1.9/config/config.inc.php)文件,找到 #Default security level,设置 $_DVWA['default_security_level'] = "low"
代码及符号需要在英文输入法下输入
二、XSS
XSS又称CSS,Cross Site script(跨站脚本攻击),也可以叫javascript代码注入攻击,脚本需要通过网站转发给用户,让对方浏览器执行js脚本。
攻击者怎么把脚本跨站发给用户?
存储型XSS又叫持久型,像论坛这样的网站,上传帖子时,如果没有提交正常的语句,而是提交了js代码,该帖子就会上传到数据库,服务器都会将攻击者发表带有脚本的帖子存储在服务器上,含有恶意的脚本存储在服务器,每个访问该帖子的客户端就会触发执行。
存储型XSS攻击是XSS里危害最大的一种,“持久”体现在代码能够被持久化保存到服务器上。此类漏洞危害性极大,一经存储所有访问的人都会被执行脚本,可谓一人上传危害一大片。比如:将js脚本存储在一个很吸引人的帖子下,所有看到的人都愿意点击,这样的话,脚本就会被很多人访问,这个脚本可能是 弹窗 等内容。
js脚本需要浏览器来执行,服务器不执行,也就是说对浏览器有危害而不对服务器有危害,解决方案:第一种:浏览器对js脚本进行过滤进行XSS筛选;第二种:服务器对提交的内容要有筛选和限制。比如下图,上传js代码,如果有弹窗,则证明存在XSS攻击漏洞。
输入,如果脚本运行有弹窗说明存在漏洞。
如果没有弹窗,可能需要设置一下浏览器(基本上大部分浏览器都会把XSS漏洞过滤掉):
浏览器:工具 -> Internet 选项 -> 安全 -> 自定义级别 -> 将启用XSS筛选器改为禁用 -> 点击 确定 -> 重新 Reset DB(左边选项栏第二个)
上传成功后,每次上传其他的文字,都会弹窗了!!!
下次实验时,务必重新 Reset DB 重启数据库,防止影响下次实验效果!
2. XSS攻击窃取cookie 2.1 cookie为什么产生?http协议是一种无状态协议,服务器因此对于发送请求的客户端没有任何记忆。客户端就不得不重复做很多事情,比如每次网站都要问你用户名和密码。为了提高可用性和效率,cookie作为信息的携带者和记录者,充当了身份证和笔记本的作用。
2.2 cookie作用机制如果客户端同意使用cookie,客户端第一次请求服务器时,服务器会创建一个带有id的cookie发送给客户端。客户端收到后,将cookie保存在本地,由浏览器管理。 因此XSS攻击如果盗用了用户的cookie,就会冒充用户进行身份认证!
2.3 存储型XSS攻击窃取cookie前面的ip地址,是攻击者的ip地址,acceptcookie.php用来直接获得接收用户cookie的值(只能获取非Httponly 类型的cookie)
# acceptcookie.php 用于接收cookie值,保存在cookie.txt
发送js脚本用于盗取用户cookie:ip地址为攻击者的ip地址,让用户浏览器执行脚本找到攻击者的ip地址上的acceptcookie.php,并将浏览器当下cookie值发送给攻击者
在靶机文件中,存在 cookie.txt
2.4 中级存储型XSS攻击(防御代码)
$message = htmlspecialchars( $message );
Htmlspecialchars()把预定义的字符转换为 HTML 实体,即输出文本,不能让js代码执行。
什么是html实体?
在html中有些字符,像 < 这类的,对HTML来说是有特殊意义的,所以这些字符是不允许在文本中使用。要在HTML中显示<这个字符,我们就必须使用实体字符<。
$name = str_replace( '
上传脚本后:有弹窗
攻击者向靶机提交脚本,脚本反射回来可以执行,说明靶机没有对上传的内容进行过滤,存在反射型XSS漏洞。问题: 用户不会自己发送脚本,只能是攻击者发功恶意链接,攻击者点击后,跨站向目标网站发送脚本。
因此, 我们发现:上传js脚本时url是在变化的,因此可以使用恶意连接,访问恶意网站来引导用户自己上传js脚本。未上传时url:
上传后url:
url上的name=后面的应该是上传的内容,结果却是看不懂的字符串,可以猜想到网站使用了url编码。反射型xss漏洞流程:
编写钓鱼网页,实施反射型XSS漏洞攻击获取用户的cookie111代码说明: 因为我们需要把js脚本从我们恶意的网站上传到靶机上,因此会有 两个url,前面的url是 靶机的ip地址,后面的url是 恶意网站的地址(我这里使用一台计算机,因此两个地址一样)
编写恶意网站(l.php)并将其发送到WWW目录下(用DVWA靶机需要,如果是其他靶机可能不需要):
用户访问恶意网站:前提是已经登陆网站了,登陆有效
发现可以获取用户的cookie信息:
3.2 中级、高级反射型XSS攻击 3.2.1 中级反射型XSS攻击防御与绕过
防御是:
这里IP地址是谁的?
攻击者的ip地址
DVWA执行用户发出的请求, 根据请求的参数值(JS脚本),构造不同的HTML返回;
用户C收到DVWA返回的包,解析并执行JS脚本;
4. 提出防御方案
-
对输入和url参数进行过滤。
对所有用户提交内容进行可靠的输入验证(XSS特征库),包括对URL、查询关键字、HTTP头、POST数据等。不允许发现提交内容与网页要求的提交内容不符的情况,避免提交js脚本。对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容。 -
使用HttpOnly设置。
设置HttpOnly属性,让js脚本无法获取cookie信息。cookie都是通过document对象获取的,如果能让cookie在浏览器中不可见就可以防御,cookie设置HttpOnly属性,那么通过js脚本将无法读取到cookie信息。 -
对输出信息进行编码。
对所有要动态输出到页面的内容,通通进行相关的编码和转义,进行html编码,使脚本无法在浏览器中执行



