认识CSRF漏洞

CSRF(Cross-site request forgery)跨站请求伪造。
攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件,发私信,添加管理用户,甚至于交易转账等。
攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用程序发送一个改变用户信息的请求。由于发生CSRF攻击后,攻击者是强迫用户向服务器发送请求,所以会造成用户信息被迫修改,更严重者引发蠕虫攻击。
从站内发起
需要利用网站本身的业务,比如“自定义头像”功能,恶意用户指定自己的头像URL是一个修改用户信息的链接,当其他已登录用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。
从站外发起
则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的htm页面,并把页面地址发给受害者用户,受害者用户打开时,会发起一个请求。
image.png

CSRF的绕过与利用

绕过Referer防护

Referer防护:检查了保留变量HTTP_REFERER(http数据包Header的Referer参数的值,表示来源地址)
中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名等)
绕过:根据防护规则选择合适的方式,比如这里是判断主机地址是否存在于Referer,所以我们添加127.0.0.1为页面的名称来绕过规则
image.png

绕过Token防护

Token:服务端生成随机token,并保存在本次会话cookie中,用户发起请求时附带token参数,服务端对该随机数进行校验。如果不正确则认为该请求为伪造请求拒绝该请求。
绕过方式:配合xss漏洞进行CSRFDVWA High Payload:

  1. <iframe src="../csrf"onload=alertframes[O].document.getElementsByName'user_token')[O].value>

image.png

CSRF漏洞的利用

常用步骤:

  1. 如果只是一个URL=>直接发送URL或者转换为短链接之后再发送给受害者
  2. 如果是一个表单 =>使用Brupsuite抓包=>构造一个表单=>构造页面发送给受害者

image.png

CSRF审计实战

yzmCMS

打开管理员管理
image.png
使用burp suite进行伪造
image.png
源码分析:
image.png
查看dosubmit的数据是否为真,is_username检查用户名是否符合规定,判断email是否正确,但是没有判断数据的来源是否为管理员操作的

CSRF修复建议

image.png

CSRF攻击是攻击者利用用户的身份操作用户帐户的一种攻击方式,通常可以采用如下措施来进行防御:

  1. Referer校验,对HTTP请求的Referer校验,如果请求Referer的地址不在允许的列表中,则拦截请求。
  2. Token校验,服务端生成随机token,并保存在本次会话cookie中,用户发起请求时附带token参数,服务端对该随机数进行校验。如果不正确则认为该请求为伪造请求拒绝该请求。
  3. Formtoken校验,Formtoken校验本身也是Token校验,只是在本次表单请求有效。
  4. 对于高安全性操作则可使用验证码、短信、密码等二次校验措施
  5. 增删改请求使用POST请求