最近在拜读《web前端黑客技术揭秘》,不是想学下三滥的手段,只是为了防止自己被骗。。。
由于采用了同源策略,所以想要实现跨站攻击,还是有一定限制的,但网络协议的自由也还是留下了很多漏洞。
XSS跨站脚本攻击和CSRF跨站请求伪造攻击是刚开始接触的攻击手段。
XSS:跨站,顾名思义,需要不同域的网站,例如正规网址是www.foo.com,而我们的恶意网站为www.evil.com
如何能够获取到正规网址的cookie,从而为所欲为呢?这里就需要跨站获取信息。
一般XSS分为三种:
(1)反射型XSS
这是暂时的,利用get 或者post参数实现,如果服务器端对我们的参数有回显功能,那么这就可以实现了
例如服务端对我们的请求会调用eval(arg)
那么我们只需要在http://www.foo.com?alert('I can do anything') 连接后加上我们要执行的js脚本,然后把该连接发给用户点击,就会执行后面的js脚本了。
(2)存储型
例如利用网站留言或者博客等功能,由于他们会持久存储,所以我们只要嵌入些恶意的代码,所有查看该留言或者博客的人都会被攻击了,庆幸的是现在知名的网站都不会让你那么容易做到代码嵌入,尤其脚本,几乎不可能,我也是小白,具体方法布吉岛了。
(3)DOM
就是通过修改DOM节点,例如<img src="http://www.evil.com" /> 利用图像可以加在第三方资源。。。
另一种攻击就是跨站请求伪造
一般网址对html标签发出的跨站请求不会被同源策略所限制,应为我们经常借此加载第三方资源,例如img, script, css样式 和框架内容等。
这也给我们留下了一些后门。。
下面我简单举个例子。。。。很不道德的就拿博客举例子了。没有恶意,只是为了说明CSRF跨站请求伪造
(1)Get请求伪造
博客删除一般是采用get请求,后面加上文章id号,所以如果我们能构造一个连接带有删除的请求和id,同时用户已经在浏览器上登陆了博客,那么会利用自带cookie来实现跨站请求的伪装。
例如我有一篇草稿博客,它的删除请求是:http://write.blog.host.net/postlist/0/all/draft?t=del&id=11111111
Id指的就是文章id,只用用户去点击该连接那么。。。。。文章就被删除了,这里我们成功伪造了请求,删除别人的博客,不过很不道德。。
(2)Post请求伪造
一般文章的提交采用的是Post请求,所以我们可以帮别人写文章了
我们经常看到自己的一些社交上莫名被发广告状态,也许就可以通过这个实现了。。。。
首先得分析实际的post请求信息
很简单,直接利用浏览器自带的开发者调试功能F12(chrome下)
点击network,清空当前内容,然后我们正常的提交一份博客,这时候会捕捉下所有请求信息,注意下post请求,一般就是我们要利用的请求。
如下图,我们看到post请求地址已经Post需要的信息,好啦,接下来就是利用这个来模拟post
var f = document.createElement("form"); link = "图中用黄色荧光笔画出的地址,直接右键copy ,因为还有前面头信息没显示完全" // 这里定义一个函数,向form添加数据 // 就是右边Form Data的键值对了 function addData(fm, key, value){ var e = document.createElement("input"); fm.appendChild(e); e.type = "text"; e.name = key; e.value = value; } if (f) { body = document.body; document.body.appendChild(f); f.method = "post"; addData(f, "titl", "test4"); addData(f, "typ", "1"); addData(f, "cont", "nihao"); addData(f, "desc", ""); addData(f, "tags", ""); addData(f, "flnm", ""); addData(f, "chnl", "0"); addData(f, "comm", "2"); addData(f, "level", "0"); addData(f, "tag2", "") addData(f, "artid", "0") addData(f, "checkcode", "undefined") addData(f, "userinfo1", "121") addData(f, "stat", "draft") f.action=link; f.submit(); };
最后补上一句,如何让别人去点击我们的连接呢?
加载第三方资源是个让人又爱又恨的家伙
我们的网页嵌入<img src="我们的伪造请求"> 这就伪装的让人发现不了了