为何要拿CSRF来当“攻击手法系列”的开头篇呢?由于CSRF/XSRF我我的喜好他的程度已经超过XSS了。若是说XSS是一个老虎,那么CSRF就是隐藏在暗处的蛇。php
相信如今不少人不明白CSRF是怎么运做,他和XSS的不一样是在哪里。我这里就逐步为你们解释,并从浅入深的介绍CSRF。html
入门java
咱们先来看看CSRF和XSS的工做原理,先让你们把这两个分开来。web
XSS:ajax
攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击
CSRF:json
攻击者发现CSRF漏洞——构造代码——发送给受害人——受害人打开——受害人执行代码——完成攻击
并且XSS容易发现,由于攻击者须要登陆后台完成攻击。管理员能够看日志发现攻击者。跨域
而CSRF则不一样,他的攻击一直是管理员本身实现的,攻击者只负责了构造代码。浏览器
我这只是简单的说明下流程。大伙应该发现CSRF少了一个 获取受害人的cookie的步骤。为何会少了呢。由于受害人在执行代码的时候就已经完成的攻击,而攻击者并无参与进来。安全
举个例子来讲吧(受害者的网址是a.cn,攻击者的网址是b.cn)攻击者想要在某个网站(网站是某个开源CMS)添加上另外一个管理员,可是这个网站并无XSS漏洞。怎么办呢?这时攻击者发现了这个开源CMS后台添加管理员时并无加入验证码或则token,只须要输入要添加的管理员帐号和密码点击肯定就能够添加管理员帐户了。这时和我同样聪明的攻击者在本身的服务器上创建了一个html文件(假设地址是b.cn/index.html)。而后就给网站管理员发邮件等等,诱使管理员打开b.cn/index.html。当管理员打开后(这时管理员正在网站后台,或则管理员的session并无失效的话),就能够神不知鬼不觉的在网站后台添加了一个管理员帐户。服务器
相信这时大伙已经明白CSRF和XSS的区别了,不是太明白也没事,下面还有。
接下来我先给你们介绍一个软件,在运用实例来详细的说明CSRF。
OWASP CSRFTester:
这是OWASP推出的CSRF半自动化软件,他省去了CSRF最繁琐的过程,代码构造。下面是软件的截图
这款软件是由java编写的,因此在运行软件以前须要事先安装java环境,cmd窗口是告诉咱们此时软件正在监听8008端口。软件的大体介绍就到这,后文我将进一步的说明。
这里我选择了“XYCMS中心小学建站系统”
OK,咱们进入后台a.cn:88/admin,帐号密码默认都是admin。进入后台,咱们选择“管理员管理”
我想细心的人已经发现了。他只要求你输入帐号 密码 确认密码。没有发现验证码验证。咱们在浏览器里代理下8008端口(虽然网站是88端口,可是仍是能够监听到数据,因此没必要在乎网站是88,软件监听的是8008的问题。由于在浏览器里任何数据都必需要通过8008,网站虽然说是88端口,可是数据还要转到8008端口)。而后用软件看下有没有token的存在(你也能够用burp、fiddler等等)。
点击开始
咱们在网站里输入帐号和密码。
点击提交数据后,软件就会抓到数据包了。
下面4个是傲游浏览器发送的,把他们删除。第二个是跳转,咱们也把他删除。
咱们发现并无找到token的值,那么咱们就能够来实现CSRF攻击了。
看到下面的Report Type了么。这些是让你选择用什么方法来进行攻击。
Forms:建立一个form表单。内容为hidden(隐藏),用户不可见(可POST、GET)
iFrame:建立一个iframe框架,高宽为0,用户不可见。(可POST、GET)
IMG:建立一个IMG标签(只能GET)。
XHR:建立一个AJAX请求(可POST、GET)
Link:建立一个a标签的超连接(只能GET)
OK,介绍完了。可是呢,这五个里,我只推荐第一个。缘由有下:
第二个容易找不到对象(若是你是新手,对JavaScript不熟的话,不建议选择这个)
第三个只能发送GET请求,有限制。
第四个有跨域限制,有的浏览器不容许发送跨域请求,除非网站有设置。
第五个须要点击才能触发(固然能够修改成自动触发),还有一个是他也只能发送GET请求。
Ok,我这时选择forms选项,他会生成一个HTML文件,并且会自动打开,若是不成功不要灰心,这个软件不是特别的完整,有些地方须要改进。不成功的话就打开HTML改下源码,参照浏览器的审查元素就行。
点击Generate HTML来生成,生成好后,把生成的index.html放到b.cn下。诱使管理员打开,管理员打开后,将会是这样:
成功了,咱们在后台看下。
能够看到成功添加了。
咱们能够把这个index.html放到本身服务器上,又是管理员打开,而后了管理员当时正在后台,或则管理员的session没有过时,你能够在网站留言板里吧网址写上去。就能够完成CSRF攻击了。
这里我不用上面这个软件,再完成一次攻击
我想入侵一个网站,得知这个网站使用的是XYCMS,因而我在网上把XYCMS源码下载下来,分析下。我发如今后台添加管理员的地方没有token验证,因而我就走上了构造带代码一路。
F12看下添加管理员的连接是什么
打开此连接就是添加管理员的地方。
Ctrl+U 看下源代码,把form标签里的内容所有复制下来,放到本地的html文件里。去掉没用的代码。就像下面这样:
OK,如今咱们来改下,把action改为目标网站(a.cn),而后在input类型为text的地方,加上Value的值,这个值就是你要添加的管理员帐号和密码,改后为:
咱们打开测试下,看能不能添加管理员
点击“提交数据”
添加成功了,剩下的就是自动提交了,这里就要用到JavaScript了。
打开后,自动添加了。接下来就是让表单隐藏,咱们加个style让form为隐藏就好了。像下面这样:
一个csrf网页就完成了,上传到b.cn,诱使管理员打开就好了。
进阶
相信细心的人已经发现上面是一个1.html文件,须要诱使管理员打开,并且他还有弹窗。太被动了,想用ajax来发送吧,又须要跨域。怎么办呢?这里咱们能够结合XSS来完成攻击。
在以前XSS系列我说过一句话“XSS就是让对方执行你的JS代码”,聪明的人已经想到了,那就是把CSRF的AJAX请求放到XSS里,以达到攻击的效果,具体怎么作到呢,看完这一节,你就会了。
首先你要挖到一个XSS漏洞(反射、储蓄都行,固然储蓄更好。由于这个CMS特别小众,几乎没人用,因此在前年挖到这个漏洞时,就一直放那没动过)。找到一个储蓄型XSS,在根目录的add_book.asp文件里。
rs("title")=trim(request.form("title")) rs("sh")=request.form("sh") rs("ly_name")=trim(request.form("ly_name")) rs("tel")=trim(request.form("tel")) rs("email")=trim(request.form("email")) rs("body")=trim(request.form("body"))
title留言标题 ly_name姓名 tel联系电话 email联系邮箱 body留言内容存在XSS(不想吐槽了)
OK,由于上一节已经说了添加管理员无认证的漏洞了,我也就很少说了。
提交的时候抓包下,而后根据数据包来写ajax代码(之因此没用那个软件来生成,是让你们更加深入,同时也不要太依赖软件)
下面就是我本身写的一个ajax:
var xmlhttp; if(window.XMLHttpRequest){ xmlhttp=new XMLHttpRequest(); }else{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("POST","/admin/admin_manage.asp?act=add",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("admin=123&password=admin&password3=admin&button=提交数据");
生成好后,获得地址http://xss8.pw/0IrU5I?1420780331
OK,咱们去留言板上插吧。
之因此没用全插,是由于这样作的话,管理员一打开就会多插几个帐号。
管理员打开后的样子,这时候其实已经在后台添加了管理员。
深刻
我以前在http://www.freebuf.com/articles/web/55505.html和http://www.freebuf.com/articles/web/54686.html谈到过插件安全。这里我教你们一个猥琐的CSRF技巧。
如今的我掌握了这个CMS的CSRF漏洞,我想让全部使用这个CMS的网站所有添加管理员怎么办呢?咱们能够用插件。
首先创建一个ceshi目录,在里面创建一个def.json文件,内容以下:
而后咱们在同目录下创建一个test.js文件,在里面写入下面这些代码:
for的存在是让他只运行一次,只不过由于这个是在插件里,当你打开一次页面他就会从新加载这个js。也就是说,若是管理员一直刷新页面,那么就会出现和刷新次数同样的帐户,之因此加for是由于若是你不加,刷新一次会添加几个帐户,而不是一个。
而后用MxPacker软件打包成maxthon插件,双击安装后,就会发现已经在后台添加了帐户。
若是你帐务了几个CMS的CSRF漏洞,那么你能够结合到一个插件里,价格if判断是哪一个CMS就用哪段CSRF攻击代码。
原文连接:http://www.freebuf.com/articles/web/55965.html
------------------------------------------------------------------------------------------------------------------
这里贴出一个OWASP CSRFTester的下载地址
https://www.owasp.org/index.php/File:CSRFTester-1.0.zip