文章目录

  • 0x01 基础知识:
    • 1、CSRF漏洞简介:
    • 2、与XSS的区别:
    • 3、攻击的细节:
    • 4、常见的攻击类型:
      • 4.1、GET类型的CSRF:
      • 4.2、POST类型的CSRF:
  • 0x02 CSRF漏洞检测:
    • 1、手动测试:
    • 2、使用CSRF检测工具:
      • 2.1、CSRFTester:
      • 2.2、BurpSuite:
  • 0x03 CSRF漏洞利用实例:
    • 1、MetInfo CMS:
    • 2、骑士CMS:
  • 0x04 如何防御CSRF攻击:
    • 1、验证HTTP Referer字段:
    • 2、添加Token,并验证:
    • 3、关键请求添加验证码:
  • 最后:

0x01 基础知识:

1、CSRF漏洞简介:

CSRF全称:Cross-site request forgery,即,跨站请求伪造,也被称为 “One Click Attack” 或 “Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。举个生活中的例子:就是某个人点了个奇怪的链接,自己什么也没输,但自己的qq号或其他的号就被盗了。即该攻击可以在受害者不知情的情况下以受害者名义伪造请求,执行恶意操作,具有很大的危害性。

2、与XSS的区别:

CSRF听起来很像跨站脚本攻击(XSS),但它与XSS有很大区别,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。两者的攻击流程如下图:

3、攻击的细节:

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个用户曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了Web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

CSRF攻击流程如下:

举个例子

场景需求:坏人小黑想要修改小明在购物网站www.xx.com上填写的会员地址。

小黑想要修改小明的信息,他需要拥有:1、登录权限 2、修改个人信息的请求。

但是小明又不会把自己的账号密码告诉小黑,那小黑怎么办?于是小黑自己跑到www.xx.com上注册了一个账号,然后修改了一下自己的个人信息(比如email地址),他发现修改的请求是:http://www.xxx.com/edit.php?email=xiaohei@qq.com&Change=Change

然后,他进行了这样一个操作:把这个链接伪装一下,在小明登录xxx网站后,欺骗他进行点击,小明点击这个链接后,个人信息就被修改了,小黑就完成了攻击目的。

这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。

通过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户的浏览器,让其以用户的名义运行操作。

CSRF的攻击过程需要满足以下两个条件:

  1. 目标用户已经登录了网站,能够执行网站的功能。

  2. 目标用户访问了攻击者构造的URL。

4、常见的攻击类型:

CSRF原理很简单,一般来说,常见的攻击类型有以下2 种:

  • GET型

  • POST型

下面就以pikachu靶场为例,演示下这几种类型的攻击流程。靶场下载

4.1、GET类型的CSRF:

GET类型的CSRF利用很简单,只需要构造一个HTTP请求就可以完成。

示例

某网站的个人信息页面如下:

修改个人信息并抓包:

从提交的请求可以看到,系统并没有对用户设置 Token,而且是通过GET请求来提交修改信息。那么我们拿到这个URL之后,就可以改成自己想要修改的数据,如把受害者的邮箱修改为自己的邮箱:

www.xx.com/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=13676767767&add=nba+76&email=hacker%40pikachu.com&submit=submit

然后通过各种手段让已经登录的用户访问这个链接,攻击就完成了。

当受害者点击链接后,可以看到受害者的邮箱地址已经变成我们自己设置的了,如图:

当然,直接访问上面这个链接太可疑了,因此可以利用短链接生成器进行伪装,例:

访问生成的短链接同样执行成功。

常用短链接网站:

http://tool.chinaz.com/tools/dwz.aspx
https://www.985.so/

4.2、POST类型的CSRF:


还是和上面一样,修改个人信息,抓包:

可以看到是POST类型,参数是在请求体中提交的,我们就不能通过伪造URL的方式进行攻击了。

这种类型的 CSRF 利用起来通常使用的是一个自动提交的表单;攻击者可以在自己的公网服务器上搭建一个站点,在站点上做一个表单,诱导受害者点击这个链接,当用户点击时,就会自动向存在CSRF的服务器提交POST请求修改个人信息。

编写一个html 页面,代码如下,然后把此页面放到攻击者自己的Web服务器上(这里为了演示方便,放在虚拟机上了)

post.html:

<html>
<head>
<script>
window.onload = function() {document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php"><input id="sex" type="text" name="sex" value="boy" /><input id="phonenum" type="text" name="phonenum" value="1367676776" /><input id="add" type="text" name="add" value="nab 76" /><input id="email" type="text" name="email" value="hacker@pikachu.com" /><input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

目标服务器:127.0.0.1

攻击者服务器:192.168.50.130

把上面的构建好的页面放在kali上的var/www/html目录下(别忘开启apache服务),访问链接为:

http://192.168.50.130/post.html

然后把该URL发送给受害者,只要受害者一点击这个链接,就会自动发送POST请求,修改其邮箱地址。

点击链接是这个页面,然后会自动提交数据。


修改成功。( ̄︶ ̄)↗

0x02 CSRF漏洞检测:

1、手动测试:

常用的办法是:寻找站内增删改的地方,抓取一个正常请求的数据包,修改链接或表单的参数,再用验证过的浏览器打开链接或提交表单,如果操作可以成功执行就代表存在CSRF漏洞。

手动测试CSRF漏洞比较麻烦,因此可以选择使用工具来进行高效的检测。下面简单介绍下几个常用的CSRF检测工具。

2、使用CSRF检测工具:

常用的CSRF检测工具有CSRFTester、Burpsuite、CSRF Request Builder等,这里介绍下前两个工具的使用方法。

2.1、CSRFTester:

CSRFTester测试流程:使用代理抓取我们在浏览器中访问过的所有的连接以及表单等信息,然后在CSRFTester中修改相应的表单参数等信息,重新提交,相当于一次伪造客户端请求,如果修改后的测试请求成功被目标服务器接受,则说明存在CSRF漏洞。同理 CSRFTester也可作为攻击工具。最新下载链接

使用注意事项:

  • 需要java环境,并更改 run.bat中的 jre路径为你自己的:

  • 设置HTTP代理,端口为8008。

双击 run.bat文件启动,页面如下:

像这样就是正常启动了。

点击Start Recording,开启CSRFTester检测工作,执行添加管理员操作,抓取到数据包:

修改管理员用户名(也可以在下面生成的表单中修改),点击 Generate HTML 会生成一个 HTML 测试脚本:

使用同一浏览器打开此文件

可以看到,成功添加了账号,说明网站存在CSRF漏洞。

2.2、BurpSuite:

Burpsuite中 Engagement tools 的 Generate CSRF PoC 模块也可以作为CSRF的测试工具。

还是同样执行添加管理员操作,抓包,然后右键选择 Engagement tools 找到Generate CSRF PoC。

修改参数,生成测试表单

右下角的 Test in browser 是在本地测试用的(Copy HTML 可以复制下来HTML,保存到攻击者服务器,用来攻击),点击会生成一个测试链接,内容就是生成的测试页面,打开链接(这里浏览器必须开着bp的代理):

点击提交按钮并在bp中放包。

可以看到成功执行了测试,证明存在着CSRF漏洞。

0x03 CSRF漏洞利用实例:

说了这么多,不实际操作下还是纸上谈兵;下面就以这两个本地CMS为例,复现一下CSRF漏洞的实际利用过程。

1、MetInfo CMS:

cms版本:MetInfo5.3.1
环境:phpStudy集成环境
cms下载:https://pan.baidu.com/s/1ZgKx3BE3hmJkflJxundYSA 提取码:pek6

解压到www目录下,访问目录开始安装

按照提示一步一步完成配置,进入网站


访问 /网站首页/admin 进入后台管理页面,并登录,找到添加管理员模块,添加一个管理员。

浏览器开启代理后,使用我们的 CSRFTester工具抓取数据包

找到对应的请求,修改参数。这里用户名改为hacker,然后点击Generate HTML 保存表单。

删除多余的请求表单后,放到攻击者的服务器上,访问链接为(这里放本地了):http://127.0.0.1/Me/index.html

然后诱导网站管理员访问链接

成功添加。

使用添加的用户登录,账号:hacker 密码:admin

登陆成功,攻击完成

2、骑士CMS:

cms版本:74cms_v4.1.24
环境:phpStudy集成环境
cms下载:https://pan.baidu.com/s/1U-I28J2DDTZkY1esQr9H4A 提取码:75sx

解压后访问 upload目录开始安装:

按照提示一步一步完成配置,进入网站

进入后台管理页面,找到添加管理员页面


使用bp抓包,使用 Generate CSRF PoC 构造攻击页面


点击 Copy HTML 保存到本地,为诱惑管理员点击,可以添加一些具有诱惑性的东西,举个例子:(忽略这个很丑的页面→_→)


然后放到攻击者的服务器上(这里就放到本地了),访问链接为:http://127.0.0.1/74/lol.html

然后诱导管理员点开链接并提交,成功执行。

使用刚才创建的账号密码进行登录测试,账号 hacker 密码 admin

登录成功,攻击完成。

0x04 如何防御CSRF攻击:

CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强网站对CSRF的防护能力来提升安全性。

在服务器端防御CSRF攻击主要有三种策略:

1、验证HTTP Referer字段:

Referer字段存在于 HTTP请求头中,它记录了该 HTTP请求的来源地址。正常情况下请求的 Referer 值是 请求发出所在页面的URL,当检测到 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

例如黑客要对银行网站实施 CSRF 攻击,他只能在他自己的服务器构造请求,当用户点击黑客的链接发送请求到银行时,该请求的 Referer 是指向黑客自己的网站,就会拒绝该请求。

2、添加Token,并验证:

Token介绍:

  • token是服务端生成的一串随机数,作为客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token并返回给客户端。

Token验证:

  • 在 HTTP请求中以參数的形式添加一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,假设请求中没有token 或者 token 内容不对,则可能是 CSRF 攻击而拒绝该请求。
3、关键请求添加验证码:

当进行一些敏感操作时,如修改密码、添加管理员等操作,可以通过增加网站的验证手段,例如增加图形验证码或短信验证码等,只有通过验证的请求才算合法。

最后:

从CSRF原理到CMS漏洞利用相关推荐

  1. 蓝牙App系列漏洞原理分析与漏洞利用

    蓝牙App系列漏洞原理分析与漏洞利用 作者: heeeeen 本文系转载,目的是学习,如有侵权,请联系删除 转载出处:http://www.ms509.com/ 蓝牙App漏洞系列分析之一CVE-20 ...

  2. (23)【漏洞利用】【原理、利用过程】中间件解析漏洞、CMS漏洞、编辑器漏洞、CVE漏洞

    目录 解析漏洞: 原理: 变化因素: 熟知的中间件(解析漏洞) 0x01    IIS5.x-6.x解析漏洞: (1)目录解析漏洞(IIS6.0) 原理: 利用过程: (2)文件解析漏洞 原理: 利用 ...

  3. (32)【文件下载漏洞专题】Filedownload原理、漏洞出现、危害、漏洞利用……

    目录 一.前言: 二.简介: 三.原理: 四.产生的原因: 五.漏洞出现地方: 5.1.功能上出现: 5.2.链接上出现: 5.3.参数上出现爱: 六.危害: 七.相关漏洞: 八.系统文件路径 8.1 ...

  4. 利用CMS漏洞渗透并获取某服务器权限

    利用CMS漏洞渗透并获取某服务器权限 在phpmyadmin漏洞与利用专题中,我们从多个角度介绍了如何获取webshell并获取服务器权限的案例和情形,但在实际渗透过程中还有一种情况,即服务器上存在p ...

  5. Struts2漏洞利用原理

    概述: Struts2是apache项目下的一个web 框架,目前web框架中非常流行的都是mvc设计模式.经典例子例如:python的Django.Flask:java的ssm等.因为使用MVC设计 ...

  6. 0day工具集(资源)介绍-0day漏洞利用原理(2)

    往期文章: 漏洞概述-0day漏洞利用原理(0)_luozhonghua2000的博客-CSDN博客 二进制概述-0day漏洞利用原理(1)_luozhonghua2000的博客-CSDN博客 上篇已 ...

  7. (21)【后端黑白名单绕过】【WEB 漏洞利用/原理】不懂原理都是没灵魂的方法躯壳?文件上传漏洞利用过程

    目录 后端黑名单绕过 特殊可解析后缀 原理:就是加上数字等,但是可以被当做原来的类型进行执行 利用过程: .htaccess解析 原理:上传.htaccess文件到指定的目录,重写当前目录下的解析规则 ...

  8. (34.2)【支付漏洞专题】漏洞原理、产生、环境、篡改数据过程、漏洞利用……

    目录 一.简介: 二.原理: 2.1.支付成功原理: 2.1.1.浏览器跳转: 2.1.2.服务器端异步通知: 三.漏洞产生的原因: 3.1.订单金额的验证: 3.2.不安全的传输: 3.3.验证规则 ...

  9. 二进制概述-0day漏洞利用原理(1)

    二进制利用基本原理,Lord PE的使用,凡是资源性的物质且可表达的皆可利用. 往期文章: 漏洞概述-0day漏洞利用原理(0)_luozhonghua2000的博客-CSDN博客 PE 文件格式 P ...

最新文章

  1. 我敢打赌,这是98%的程序员都想挑战的算法趣题!
  2. uboot流程——uboot启动流程
  3. Windows 自动登陆的简单方法
  4. 初学者对python的认识_Python初学者列表,python,初识
  5. DEV-C上的报错 Process exited after 4.03 seconds with return value 3221225725
  6. Java8中接口的新特性
  7. Web框架——Flask系列之Flask-SQLAlchemy安装与使用 定义数据模型(八)
  8. keyshot9怎么导入材质_你知道硬质合金刀片是怎么来的吗?讲解直观!
  9. IoC容器9——基于注解的容器配置
  10. 思维导图哪款好用?怎么借助MindManager 做旅游计划
  11. 华为p50 pro 鸿蒙,华为P50Pro真豪横!鸿蒙系统+真全屏5摄,网友:太香了!
  12. 知其然知其所以然 itoa实现 整型转字符串
  13. android gsm功能,Android手机-GSM网络与WCDMA网络选择的设置
  14. lvds输入悬空_lvds接口定义
  15. 工作杂谈(十五)——谷歌学术搜索网站
  16. xutils中dbutils的使用
  17. 【C语言】'\0'、'0'、' '、“0”、0详解
  18. oracle cogs 科目,OM模块关于COGS的生成
  19. 是否需要这么一支“特别行动队”?
  20. 2023年推荐几款开源或免费的web应用防火墙

热门文章

  1. go mongodb排序查询_「赵强老师」MongoDB中的索引(下)
  2. snort create_mysql_入侵检测系统Snort+Base安装
  3. 【小白学习C++ 教程】二十、C++ 中的auto关键字
  4. Python只需要三十行代码,打造一款简单的人工语音对话
  5. 垂直领域出海,多语言预训练好使吗?
  6. 线下报名 | YOCSEF TDS:深度强化学习的理论、算法与应用
  7. Pytorch的网络结构可视化:Netron与TensorBoardX
  8. 在bcb中添加activex控件_LinkedCell 属性介绍,OLEObjects 控件
  9. python中如何求列表中的和_python实现求解列表中元素的排列和组合
  10. Eureka出现Root name ‘timestamp‘ does not match expected (‘instance‘) for type xxx的错误,如何解决?