白盒测试常见疑问

  • 基本web漏洞都有所了解,但实际漏洞挖掘过程中,为什么挖不倒漏洞

上述问题非常常见,例如:我们在挖掘漏洞时,看到很多地方都做了漏洞防护和预处理,但是并不意味着所有的漏洞防护和预处理都是有效的,要多尝试,

  • 代码量增加后,如何快速地找到漏洞

急于求成就暴力搜索, 深度挖掘就全局审计,安稳点就半审半搜

  • 如何挖掘对安全有一定防御的代码中的漏洞
  • 目标使用了现在php框架,很难找到常见漏洞,怎么突破

这种现代框架,只要你是按照产品手册写,很难写出漏洞,那么怎么突破

你所需要的两个知识

  • 白盒基本方法
  • 白盒测试技巧

现代web开发框架下的php漏洞

现代web开发框架

  • Laravel
  • symfony
  • slimphp
  • Yii2

特点

  • 所需PHP版本较高,\0截断等老漏洞绝迹
  • 提供功能强大的orm
  • 提供自动处理输出的模板引擎
  • 开发者可以通过composer找到任何需要的功能类,避免因为自己造轮子产生的漏洞

现代web开发框架安全思想

secure by default原则

文档中,会详细叙述可能出现的安全问题

那么,如何挖掘

  • 挖掘思路:
  • 寻找框架本身的安全漏洞
  • 寻找不规范的开发方式
  • 寻找错位的配置
  • 异常的利用
  • 第三方服务的利用
  • sql_autoload的利用

寻找框架本身的漏洞

案例:slim3框架架构上存在XXE漏洞

https://blog.csdn.net/qq_48985780/article/details/121283157风味1

特点:

restful+前后端分离式架构慢慢流行

json/xml成为主力传输格式

架构默认支持多种格式解析方法,由请求包中的content-Type决定

常见的漏洞为:任意文件读取/ssrf/拒绝服务

寻找不规范的开发方式

案例:edusoho的sql漏洞

https://bugs.leavesongs.com/php/edusoho%E4%B8%80%E5%A4%84sql%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%EF%BC%88demo%E7%AB%99%E6%BC%94%E7%A4%BA%EF%BC%89/

特点:

  • 基于symfony+doctrine
  • doctrine orm默认使用参数化查询杜绝sql注入漏洞
  • sql语句多参数情况下,开发者不知道如何使用参数化查询
  • 开发者没看开发手册

一般来说sql语句多参数情况下,进行拼接容易存在sql注入

异常的利用

案例:eduso任意用户密码泄露(无敌了,这b框架写的什么玩意)

https://blog.csdn.net/2301_80115097/article/details/134549332

特点:

现代php框架多使用“异常处理”的方式处理错误

debug模式下会详细的列出异常数据

异常信息一般指:所在函数,异常堆栈,当前所有变量

思路:在用户信息页制造一个异常,即可获得用户这个变量所有信息(例如,登陆点只能处理字符串,但是我提交了一个数组,那么就会报错)

寻找构造异常的方法 传入数组导致字符串处理时出现异常

第三方服务的应用

案例:Discuz!x有条件远程命令执行

https://cloud.tencent.com/developer/article/1511932

特点:

现代web应用会配置许多第三方服务:如7redis(这个最常见)/mencached/mongodb

SSRF请求可操作redis

修改redis内任意信息

控制preg_replace参数

/e代码执行

sql_autoload利用

案例:phpwind GET型CSRF任意代码执行

特点:

php自动类加载机制(sql_autoload)

windows目录分隔符与php命名空间分隔与PHP命名空间分隔符相同

跨目录包含PHP类文件

成功构造反序列化利用链

压缩炸弹的利用

何为压缩炸弹

  • web应用执行了解压缩操作
  • 黑客利用压缩包的一些特性,构造畸形压缩包
  • 解压时将造成漏洞

那些压缩炸弹惯用的方式

  • 绕过文件检查失败后删除操作
  • 阻止压缩时的文件检查
  • 绕过压缩时的文件检查
  • 链接文件的利用

绕过文件检查失败后的文件删除操作/绕过文件检查失败后删除操作

例子:FINECMS前台任意文件上传系列漏洞

https://www.cnblogs.com/ichunqiu/p/7453208.html

还有phpcms头像上传漏洞,漏洞基本上类似

原理:

用户选泽头像后,前端将处理成多种大小并打包上传

后端接收压缩包并解压

在当前目录递归删除非法文件

解压失败后,程序抛出错误并停止运行,导致webshell保留

绕过压缩时的文件检查

是的,还是FINECMS

https://www.cnblogs.com/ichunqiu/p/7453208.html

还有一个据抽象的漏洞,当压缩包的文件名内是“../../../filename.php”可解压到上级目录

链接文件的利用

新浪SAE沙盒读取任意文件(目前找不到资源)

原理:

  • 解压时未判断文件类型
  • 软连接文件可保留至压缩包中
  • 访问该软连接
  • 服务器中间件字典读取软连接指向的文件
  • 任意文件读取

什么是软连接

举个例子

ln -s /etc/passwd test1创造了一个软连接,这个时候cat test1就会打开/etc/passwd目录

那么同理,我们把压缩包内包含这种软连接文件,就能达到任意文件读取的目的(压缩包自带解压软连接的机制)

白盒测试中的条件竞争漏洞

条件竞争漏洞

  • 并发状态
  • 进程与线程

条件竞争漏洞挖掘方向

  • 上传后删除的利用
  • 忘记上锁的数据库
  • 鸡肋文件包含的妙用

上传后删除的利用

FINECMS

https://www.cnblogs.com/ichunqiu/p/7453208.html

就不多说了

忘记上锁的数据库

举个例子,假设有个漏洞点的逻辑为

1.查询用户余额

2.查询购买商品的价格

3.判断:用户余额 >商品价格,true,购买后跳转到4

4.用户余额=用户余额-价格

但是,这个框架它忽略了一个问题,在3处时,有一段时间内他的数值是不变的,那么如果在这段时间跑多线程,就可以达到成功购买多个商品

鸡肋文件包含的利用

案例:链家旗下某自如站的文件包含

漏洞:

本地文件包含

无法利用?

利用

寻找临时文件泄露点 >phpinfo()

线程1 :上传文件并通过phpinfo获取临时文件名

线程2 :包含该文件 ,生成webshell