主题
1、未授权漏洞以及危害介绍
2、未授权漏洞的审计思路与方法
简介
大多数网络应用程序在用户使用功能之前,应用程序需要验证该用户是否有功能级的访问权限。如果请求未经应用程序的验证。攻击者讲通过伪造请求参数的手段,获取应用的业务响应。
危害
在未授权直接的危害是导致用户可以通过伪造请求使用本该受限的功能,访问本不该访问的数据。并且在日常利用中,其可以结合很多其他漏洞以完成更深层次的利用;
1、未授权访问+命令执行
2、未授权访问+反序列化
3、未授权访问+任意写+系统机制
4、未授权访问+SSRF+其他
未授权漏洞代码审计思路与方法
对于未授权的审计一定要,细心,细心,再细心!特别是随着目前系统的架构越来越复杂,对于权限的控制也越来越容易遗漏。
整体思路
梳理未授权之前,需要想清楚未授权的攻击链构成2个条件
1、攻击者可以访问到应用,即能够访问到对应服务的监听端口
2、攻击者伪造的请求,经过系统的层层处理成功响应,如下图示例。
明确了攻击链的构成条件整体审计流程基本就明确了,即我们需要以暴露端口为基础,层层梳理来判断请求处理的过程是否存在遗漏,具体如下;
一、端口梳理
此流程在于选择自己喜欢的工具对于服务的Ip进行端口扫描,这里使用NMAP演示
nmap -min-rate 10000 -p- ip1 ip2 > postscan.txt
参数说明:
-min-rate 10000 扫描速录,每秒发送10000个数据包
-p- 全端口扫描
ip1 ip2 待测试ip,试ip个数自增
> postscan.txt 输出重定向到文件postscan.txt ,方便后续查看
二、服务梳理
1、在对应服务上查找端口对应服务,这里使用netstat命令进行演示
netstat -lnpt
参数说明:
l 显示监控中的服务器的Socket
n 直接使用IP地址,而不通过域名服务器。
t 显示TCP传输协议的连线状况
p 显示正在使用Socket的程序识别码和程序名称
2、根据端口对应的PID,查询“运行时”信息
cd /proc/4228/ 进入PID为4228的运行时伪文件路径
ll 查看所有文件
如图基本确认文件位置
3、进入文件查看对应服务配置,定位业务服务
以nginx为例,其配置文件的分析主要关注两个维度
第一、nginx配置文件会包含引用的情况,所以需要关注include关键字防止遗漏
第二、因为nginx是以反向代理的形式代理后端服务所以,需要关注proxy_pass关注其后端服务。
命令如下;
cat nginx.conf|grep -E 'proxy_pass|include'
参数说明
cat nginx.conf 查看nginx.conf文件
| 管道符,将上一步结果交给下一个命令
grep -E 'proxy_pass|include' 以正则形式匹配含有proxy_pass或include关键字的行
第三、通过梳理配置,即可获取到对应的业务服务包,根据业务服务包获取源码,准备进行下一步分析。
三、认证梳理
因为第二部已经梳理出了我们所有对外暴露的服务,这一步主要对这些服务进行审计与测试,判断其是否存在未授权的情况,其中关注点有;
1、所以对外开发端口的服务(不局限与业务服务)均需要判断其是否存在认证,未授权情况,常见有一些服务的默认密码或者匿名登录等
2、业务服务是否每种协议类型的接口接口均进行了认证操作
如一个业务服务可能同时具有Http,WebService,WebSocket多种协议类型的接口,三种协议均需进行认证判断菜可以
3、服务引入的三方框架是否存在不需要认证即可直接访问的页面,如spring的swagger、actuator等
四、授权梳理
关注授权模块是否存在,以及授权规则的完整性有效性,场景关注点有
1、授权规则(或者授权框架)本身是否存在绕过可能,如常见的403 Bypass
2、授权规则是否有效覆盖服务的所有接口,是否会有一些接口因未被授权和认证规则包含导致可以直接访问
说明:本文主要是甲方视角的代码审计,作为常规的攻击对来讲更多的是以单个源码包或者是服务部署包为分析基础。没有端口扫描与服务梳理过程,直接对对源码或反编译后的源码进行认证与授权的分析。