SQL注入
- 常见注入类型
- 联合查询注入:有回显场景下使用,通过UNION SELECT拼接查询语句,直接获取数据库信息。
- 报错注入:无回显但有报错信息时使用,利用floor()等函数制造主键冲突或格式错误,让数据库报错并带出数据。
- 布尔盲注:无回显、无报错但页面会根据 SQL 执行结果返回不同状态时使用,通过构建ture/false逻辑的语句,逐位猜解数据。
- 时间盲注:页面无任何状态变化时使用,通过sleep()等函数让执行时间产生差异,以此判断逻辑是否正确。
- HTTP 头注入:注入点存在于 HTTP 请求头中,需修改请求头构造恶意语句。
- 二次注入:恶意数据先被存入数据库,后续被程序读取并执行时触发注入,常见于注册、修改密码等流程。
- 预编译绕过注入:预编译虽能防御大部分注入,但在order by、group by等关键字位置,参数会被解析为列名而非数据值,可通过布尔盲注等方式注入。
- PGSQL 协议注入:利用 PGSQL 的协议特性,构造二进制数据流,通过 SQL 语句的歧义性实现注入。
- 绕过过滤技巧
- 空格绕过:用%0a、%09等特殊编码,或/**/、()、+等符号替代空格。
- 关键字绕过:使用双写(UNIunionON)、大小写混合(UnIoN)、编码(如 URL 编码、十六进制编码)绕过关键字检测。
- 注释符绕过:用
--、#、/*...*/关闭原有 SQL 语句的部分逻辑,注入新的恶意代码。 - PHP正则回溯绕过:构造超长字符串(如 100 万个
a)触发正则引擎回溯次数超限(PHP 默认 100 万次),使正则匹配失效从而绕过。
- 防御方案
- 使用预编译与参数化查询:将 SQL 语句模板与参数分离,让数据库将参数视为纯数据。
- 严格的输入验证:对用户输入进行类型、长度、格式校验,仅允许合法字符。
- 使用安全的ORM框架:如 MyBatis、Hibernate,避免直接拼接 SQL。
- 开启WAF防护:部署 Web 应用防火墙,拦截恶意 SQL 注入流量。
- 最小权限原则:数据库操作账号仅分配必要的最小权限,避免注入后造成大范围破坏。
ThinkPHP框架漏洞分析
- ThinkPHP5
- 核心漏洞类型
- SQL注入漏洞
- order by注入:order()方法未对参数进行严格过滤,可直接注入恶意 SQL 语句。
where注入:当使用数组传参且未开启强制参数绑定,或使用字符串拼接时,可能导致注入。
table注入:table()方法对表名参数过滤不严格,可注入恶意表名或语句。
- order by注入:order()方法未对参数进行严格过滤,可直接注入恶意 SQL 语句。
- 远程代码执行(RCE)漏洞
- Request类变量覆盖漏洞:通过_method参数配合__construct方法,可覆盖类变量,触发代码执行。
- think\Process命令执行:漏洞利用框架的代码执行函数,构造恶意参数执行系统命令。
- PHP代码注入:在调试模式下,错误信息页面可能泄露敏感信息,或通过特定参数注入 PHP 代码。
- 任意文件操作漏洞
- 任意文件读取:通过view方法或template参数,构造路径读取服务器任意文件。
- 任意文件写入:利用缓存机制或日志写入功能,写入恶意代码到服务器文件中。
- SQL注入漏洞
- 核心漏洞类型
- ThinkPHP6
- 核心漏洞类型
- SQL注入漏洞
- query方法注入:当使用字符串拼接方式调用query()时,若参数未过滤,可能导致注入。
- raw表达式注入:使用raw()方法时,若直接传入用户可控参数,会被当作原生 SQL 执行。
- order by注入:与 TP5 类似,order()方法对复杂参数处理不当,存在注入风险。
- 远程代码执行(RCE)漏洞
- 模板引擎漏洞:若模板路径可控,可构造恶意模板文件,触发代码执行。
依赖注入漏洞:框架的依赖注入机制在特定场景下,可被利用构造恶意对象执行代码。
- 模板引擎漏洞:若模板路径可控,可构造恶意模板文件,触发代码执行。
- 逻辑漏洞
- 未授权访问:部分路由配置不当,导致敏感接口无需验证即可访问。
- CSRF 防护缺失:部分功能未开启 CSRF 验证,可被跨站请求伪造攻击。
- SQL注入漏洞
- 核心漏洞类型
- 关键差异
- ThinkPHP6 在底层架构上进行了重构,默认开启参数绑定,大幅降低了传统 SQL 注入风险。
- 对输入输出的过滤更严格,新增了validate验证机制,减少了恶意输入的利用面。
- 模板引擎默认开启strict_mode,避免了模板注入的风险,但配置不当仍可能存在问题。
JWT
-
核心原理
- JWT 是一种用于身份验证的令牌,由Header(头部)、Payload(载荷)、Signature(签名)三部分组成,通过签名验证令牌的完整性与真实性
-
漏洞利用流程
-
密钥获取:攻击者通过代码审计、漏洞扫描或信息泄露等方式,获取服务端硬编码的 secret key。
-
令牌构造:按照 JWT 的Header-Payload-Signature结构,构造包含高权限身份信息的 Payload(如管理员账号、权限标识),并使用获取的 secret key 对令牌进行签名。
-
身份绕过:将伪造的 JWT 令牌传入目标接口的请求头或参数中,服务端验证签名时会判定令牌合法,从而使攻击者绕过身份验证,获得未授权访问权限。
-
-
攻击影响
- 攻击者可通过伪造令牌,直接获取系统的高权限操作能力,包括访问敏感数据、执行核心业务功能等,严重威胁系统的身份认证安全。
RCE
- 核心原理
- RCE 是指攻击者通过漏洞在目标服务器上执行任意代码或系统命令,完全控制服务器
- PHP 命令执行核心函数与类型区分
-
包含system()、exec()、proc_open()等,这类函数可直接调用系统终端执行命令,输入的参数会被解析为系统指令。
-
命令执行与代码执行的区别
-
命令执行:调用操作系统的命令行工具执行指令,输出结果与系统环境强相关
-
代码执行:执行的是编程语言层面的代码
-
-