`
m635674608
  • 浏览: 5061191 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

从零开始学CSRF

 
阅读更多

入门

我们先来看看CSRF和XSS的工作原理,先让大家把这两个分开来。

XSS:

 

攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击

CSRF:

 

攻击者发现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攻击代码。

注意

攻击者事先要知道对方使用的是哪个CMS。像那些自己写的,网上没有的程序。几乎不可能用CSRF来完成攻击。

XYCMS下载地址:http://pan.baidu.com/s/1qWJRZGS

CSRFTester下载地址:http://pan.baidu.com/s/1qWE2tIW

index.html源码下载:http://pan.baidu.com/s/1sjJkcrj

Index.js下载:http://pan.baidu.com/s/1jG3PoGm

遨游插件结合CSRF(包括了MxPacker):http://pan.baidu.com/s/1ntJso0T

 

http://www.freebuf.com/articles/web/55965.html

分享到:
评论

相关推荐

    从零开始学php-随书光盘源代码部分

    《从零开始学PHP》是一本面向初学者的PHP编程教程,旨在帮助读者从基础知识开始,逐步掌握PHP语言的核心概念和实用技能。随书附带的光盘源代码部分是学习过程中不可或缺的辅助资料,提供了丰富的实例和练习,以便...

    从零开始学java web

    本教程“从零开始学Java Web”旨在帮助初学者系统地掌握这一领域的基础知识,从第一章到第十七章,内容全面且详细。下面我们将逐一探讨这些章节可能涵盖的关键知识点。 第一章:Java Web入门 这一章通常会介绍Java ...

    从零开始学PHP.pdf 高清扫描版

    但是,考虑到这是一个关于“从零开始学PHP”的文件,可以假定这是一个初学者的指南或教程,并据此推测在文件的其他部分可能包含了以下PHP基础知识点: 1. PHP基本语法:包括变量的声明和使用、数据类型、运算符、...

    CMS内容管理系统《从零开始学PHP》

    在《从零开始学PHP》这本书中,作者旨在引导初学者逐步掌握PHP编程技术,通过循序渐进的方式,从基础语法到高级特性,深入浅出地讲解PHP的核心概念和实践技巧。这包括变量、数据类型、控制结构(如条件语句和循环)...

    架构探险 从零开始写javaweb框架Pdf及书上源码

    《架构探险:从零开始写JavaWeb框架》是一本深入探讨JavaWeb开发的书籍,旨在帮助读者理解并构建自己的JavaWeb框架。这本书的PDF版本以及配套的源码提供了丰富的学习资源,让读者能够亲手实践书中的理论知识。下面将...

    架构探险,从零开始写javaweb框架-源码

    《架构探险:从零开始写JavaWeb框架——源码解析》 在IT行业中,JavaWeb框架是构建Web应用程序的关键工具,它们简化了开发过程,提高了代码的可维护性和复用性。本教程将引领你踏上一段架构探险之旅,从零开始创建...

    管理系统系列-- 从零开始搭建后台管理系统.zip

    【标题】:“管理系统系列-- 从零开始搭建后台管理系统” 这个标题揭示了我们要探讨的核心主题:如何从无到有地构建一个后台管理系统。后台管理系统是企业信息化建设中的关键部分,它负责处理数据、业务逻辑以及与...

    spring security从零学起

    本文将从零开始,逐步解析Spring Security的核心概念、配置和实际应用。 一、Spring Security简介 Spring Security是Spring生态体系中的一个核心组件,它为Java应用程序提供了灵活且可扩展的安全管理框架。Spring ...

    PHP+Ajax网站开发教程

    7. **安全性考虑**:讨论跨站请求伪造(CSRF)防护、JSONP与CORS(跨源资源共享)等问题,确保应用的安全性。 8. **实战项目**:可能包含多个实际的Web应用示例,如评论系统、动态加载内容、实时聊天室等,帮助学习...

    架构探险 从零开始写javaweb框架

    本篇文章将基于"架构探险 从零开始写javaweb框架"的主题,深入探讨Java Web开发的核心概念、关键技术和实践要点。 1. **Java Web基础**:首先,我们需要理解Java Web的基础,包括Servlet、JSP(JavaServer Pages)...

    架构探险 从零开始写javaweb框架 源码

    在本课程中,“架构探险 从零开始写javaweb框架 源码”旨在带领开发者逐步构建一个完整的Java Web框架。这个过程不仅涵盖了基础的Web开发知识,还深入到框架设计的核心理念和技术细节。我们将从以下几个方面进行探讨...

    Asp.net演示文档教程-教你学会asp编程(零基础)

    这个“Asp.net演示文档教程-教你学会asp编程(零基础)”是一个面向初学者的全面指南,旨在帮助你从零开始掌握ASP.NET编程。 教程共分为11个章节,涵盖了以下关键知识点: 1. **ASP.NET基础**:这部分将介绍ASP.NET...

    learn-smart-code:《架构探险--从零开始写java web框架》读书笔记

    《架构探险--从零开始写Java Web框架》是一本深入探讨Java Web开发的书籍,旨在帮助读者理解并构建自己的Web框架。这本书通过实践的方式引导读者探索MVC(Model-View-Controller)架构模式,深入了解Java Web开发的...

    深度整套网站学习,对于网站初学者很有帮助

    "深度整套网站学习"资源,正如其名,旨在为网站初学者提供一套全面且深入的学习教程,帮助他们从零开始掌握网站开发的核心知识。 【描述】一套深度的动态网站 值得网站初学者深入研究 这套学习资源专注于动态网站...

    rails学习教程

    本教程将带你走进Rails的世界,从零开始学习这个强大的框架。 一、Rails框架基础 Rails是David Heinemeier Hansson在2004年创建的,它引入了“Convention over Configuration”(约定优于配置)的理念,减少了...

    Struts2学习全面资料

    这个“Struts2学习全面资料”压缩包包含了从基础到高级的全方面学习资源,帮助开发者从零开始掌握Struts2。 1. **基础知识**: - **MVC模式**:理解MVC模式是学习Struts2的基础,它将业务逻辑(Model)、用户界面...

    php学习路线图

    以下是一个详细的PHP学习路线图,旨在帮助小白从零基础逐步成为PHP开发的专业人士。 一、PHP学习路线图概述 学习PHP分为几个阶段,每个阶段都包含特定的知识点和技能目标: 1. **网页入门阶段**:这个阶段主要涉及...

    HttpServer学习的最好案例的了

    这个"HttpServer学习的最好案例"很可能提供了一个完整的实现,包括代码注释和示例用法,使得初学者可以逐步跟随,从零开始构建一个简单的HttpServer,进而理解更复杂的实现。通过这样的实践,我们可以不仅学习到理论...

Global site tag (gtag.js) - Google Analytics