代码审计学习-8(SSRF与CSRF个人学习心得)
2024-6-16 17:24:4 Author: www.freebuf.com(查看原文) 阅读量:3 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

1.什么是抽象类

先说下什么是抽象类吧。

抽象类(Abstract Class)是一种在面向对象编程中常用的概念,主要用于定义一些抽象的方法或属性,这些方法或属性在抽象类中不具体实现,而是由继承该抽象类的子类来实现。

抽象类的主要特点有:

  • 抽象方法:抽象类中可以包含抽象方法,这些方法是只有方法签名而没有具体实现的。子类必须实现这些抽象方法,除非子类也是抽象类。
  • 不能被实例化:由于抽象类可能包含没有实现的抽象方法,因此它不能被实例化。也就是说,你不能直接创建一个抽象类的对象。
  • 继承:抽象类可以被其他类继承,子类可以选择实现抽象类中的抽象方法,也可以选择再次声明为抽象类。

抽象类在编程中有很多用途,例如:

  • 定义接口:抽象类可以定义一组操作的规范,而不需要提供具体的实现。这样,不同的子类可以根据需要来实现这些操作。
  • 代码复用:抽象类可以包含一些已经实现的非抽象方法,这些方法可以被所有的子类共享,从而实现了代码的复用。
  • 系统扩展:通过使用抽象类,我们可以更容易地扩展系统的功能。当需要添加新的功能时,只需要创建一个新的子类,实现必要的抽象方法即可。

下面是一个简单的抽象类的例子(以Java为例):


public abstract class Animal {
// 抽象方法
public abstract void makeSound();

// 非抽象方法
public void eat() {
System.out.println("The animal is eating.");
}
}

// 继承Animal的子类
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("The dog barks.");
}
}

在这个例子中,Animal 是一个抽象类,它定义了一个抽象方法 makeSound 和一个非抽象方法 eat。Dog 是 Animal 的一个子类,它实现了 makeSound 方法。

2.SSRF(URLConnection抽象类)-审计思路&修复方案

URLConnection 是一个抽象类,表示指向 URL 指定的资源链接,其本身依赖于 Socket 类实现网络连接。 支持的协议有:file ftp mailto http https jar netdoc gopher

URLStreamHandler 是一个抽象类,每个协议都有继承它的子类 —— Handler。 Handler 定义了该如何去打开一个连接,即 openConnection() 。 如果直接传入一个 URL 字符串,会在构造对象时,根据 protocol 自动创建对应 的 Handler 对象

为什么先说抽象类就是为了说这个,你需要去看下具体的实现方法,然后去找到这个支持的协议。利用这个来进行SSRF。一般来说,他主要的审计思路就是去看下面这些标识,

基本上都是发起url请求的地方:

  • 1. 分享:通过URL地址分享网页内容
  • 2. 转码服务
  • 3. 在线翻译
  • 4. 图片加载与下载:通过URL地址加载或下载图片
  • 5. 图片、文章收藏功能
  • 6. 未公开的API实现以及其他调用URL的功能
  • 7. 从URL关键字中寻找:share、wap、url、link、src、source、target、u、3g、 display、sourceURI、imageURL、domain
  • 8. 云服务器商。(各种网站数据库操作)

常用函数 url关键词:share、wap、url、link、src、source、target、u、display、sourceURI、 imageURL、domain…

话说回来,还是具体情况具体考虑,他真叫A和a你也没辙,不过一般不会这么干,不符合开发规范,可以忽略不记。

修复方案老生常谈属实不适合单开一章,放在这吧,

  • 白名单校验url及IP
  • 限制协议和端口

3.CSRF审计思路&修复方案

CSRF和SSRF不能说一点关系没有,只能说反正毫不相干,除了名字,相似的地方几乎没有。

跨站请求伪造(Cross-site request forgery)CSRF,是一种使已登录用户在不知情的情况下执行某种动作的攻击。因为攻击者看不到伪造请求的响应结果,所以CSRF攻击主要用来执行动作,而非窃取用户数据。 当受害者是一个普通用户时,CSRF可以实现在其不知情的情况下转移用户资金、发送邮件等操作;但是如果受害者是一个具有管理员权限的用户时CSRF则可能威胁到整个Web系统的安全。

说是这么说,有些src平台根本不收这玩意。。。。。。you look look it 这是啥事。一般不单独使用,都是打组合拳用的。

代码审计中的思路:

  • 检查是否校验Referer、
  • 是否给cookie设置SameSite属性、
  • 敏感操作是否会生成CSRF token
  • 查看请求参数中是否存在不可被攻击者猜测的字段,比如验证码等参数。

修复方案:

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

其实还是说到底,最先做的永远是去找过滤器,先看看这个过滤器有没有相应的操作,有的话基本没啥问题,尤其挂着CSRF—TOKEN这些字段的,基本都是做了防护的。

再会!

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022


文章来源: https://www.freebuf.com/articles/others-articles/403680.html
如有侵权请联系:admin#unsafe.sh