day8-sql注入之WAF绕过

什么是WAF

WAF即Web应用防火墙(Web Application Firewall)。
一、功能方面

​防护Web应用攻击
防止SQL注入攻击,通过检测和阻止恶意构造的SQL语句进入Web应用数据库。例如,攻击者可能会试图通过在输入框中输入恶意SQL代码来获取数据库敏感信息,WAF能识别并阻止这种行为。
防范跨站脚本攻击(XSS),它会检查输入到Web页面的数据,防止恶意脚本(如JavaScript代码)被注入到网页中,从而避免攻击者在用户浏览器中执行恶意操作,像窃取用户登录凭证等。
​访问控制
基于规则对访问Web应用的用户或流量进行控制。可以设置规则允许或拒绝特定IP地址、IP段或者特定用户代理(如浏览器类型等)的访问。例如,企业可以设置只允许公司内部特定IP地址范围的员工访问内部的Web应用系统。
二、工作原理

​规则匹配
WAF使用预定义的规则集来检查HTTP/HTTPS流量。这些规则涵盖了各种已知的攻击模式和异常行为特征。例如,对于检测SQL注入攻击,规则可能包括对特定SQL关键字(如“SELECT”“INSERT”等在异常位置的检测)以及特殊字符组合(如“’ OR ‘1’='1”等常见注入尝试)的识别。
​行为分析
除了规则匹配,一些先进的WAF还会进行行为分析。它会学习Web应用的正常访问模式,包括用户的访问频率、请求的类型和顺序等。当出现与正常模式明显不同的行为时,如某个IP地址在短时间内对某个页面发起大量的异常请求,WAF可能会将其判定为潜在的攻击行为并进行拦截。
WAF拦截原理:WAF从规则库中匹配敏感字符进行拦截

常见的WAF工具

网站安全狗,宝塔,阿里云云盾

WAF绕过

我的电脑里面没有安装安全狗,我就简单梳理一下,毕竟现在各种的方式基本有已经修复了
请添加图片描述

关键词大小写绕过

    有的WAF因为规则设计的问题,只匹配纯大写或纯小写的字符,对字符大小写混写直接无视,这时,我们可以利用这一点来进行绕过

    举例: union select ---> unIOn SeLEcT

编码绕过

    针对WAF过滤的字符编码,如使用URL编码,Unicode编码,十六进制编码,Hex编码等.

    举例:union select 1,2,3# =union%0aselect 1\u002c2,3%23

双写绕过

    部分WAF只对字符串识别一次,删除敏感字段并拼接剩余语句,这时,我们可以通过双写来进行绕过。

    举例:UNIunionON ,SELselectECT anandd

换行(\N)绕过

    举例:select * from admin where username = \N union select 1,user() from admin

注释符内联注释绕过:



    union selecte =/*!union*/ select

    注释符里感叹号后面的内容会被mysql执行。

同义词替换

    and=&&

    or=||

    =(等于号)=<、>

    空格不能使用=%09,%0a,%0b,%0c,%0d,%20,%a0等

    注:%0a是换行也可以替代空格

HTTP参污染

    对目标发送多个参数,如果目标没有多参数进行多次过滤,那么WAF对多个参数只会识别其中的一个。

    举例:?id=1&id=2&id=3
    ?id=1/**&id=-1%20union%20select%201,2,3%23*/

总结

WAF绕过的思路就是让WAF的检测规则,识别不到你所输入的敏感字符,利用上述所介绍的知识点,灵活结合各种方法,从而可以增加绕过WAF的可能性,这里指示简单介绍,具体还请大家观看其他大神的文章。

<think> 首先,用户的问题是关于“纯数字命令执行绕过Web应用防火墙(WAF)的方法”。我需要基于站内引用来回答这个问题,但引用的内容似乎并不直接相关。让我回顾一下引用: - 引用[1]:介绍WAF的基本概念和主要功能。 - 引用[2]:定义WAF,说明它如何保护Web应用,包括检测规则、防御攻击如SQL注入、XSS等。 - 引用[3]:提到WAF如何处理0day漏洞,通过虚拟补丁。 - 引用[4]:讨论WAF绕过方法,具体提到HPP(HTTP Parameter Pollution)方式,例如在参数中使用白名单目录和恶意payload。 用户的问题焦点是“纯数字命令执行绕过WAF”。纯数字命令执行可能指的是攻击者试图执行命令注入攻击,但使用纯数字输入来绕过WAF的检测规则。WAF通常检测常见的恶意字符串,比如字母命令(如/bin/sh),所以使用数字可能规避检测。 从引用[4]中,有一个示例:index.php?wl=[whitelist]&a=select 1 union select 2。这表明通过参数污染或特定构造来绕过WAF的过滤机制。引用[4]提到“利用HPP的方式绕过WAF”,HPP是HTTP Parameter Pollution,意思是使用多个参数或重复参数来混淆WAF。 用户指定了“纯数字命令执行”,所以我需要思考如何用纯数字来实现命令注入绕过。命令注入通常涉及执行系统命令,如通过Web输入执行shell命令。纯数字命令可能意味着注入点是数字型的,或者攻击者使用数字编码来隐藏命令。 可能的绕过方法: 1. **编码和混淆**:将恶意命令编码为纯数字形式,比如使用base64编码或其他数字表示。例如,命令"ls"可以表示为"108 115"在ASCII中。 2. **参数污染**:如引用[4]所示,使用多个参数或特定顺序的参数来绕过WAF规则。例如,在一个参数中放置无害数字,在另一个中放置恶意内容。 3. **利用WAF的规则缺陷**:WAF可能有白名单机制。如果某些数字输入被视为安全,攻击者可以结合数字输入来构建命令。 4. **其他技术**:如使用数学表达式、时间延迟攻击(如sleep命令),涉及数字。 现在,构建回答结构: - **引言**:简要重述用户问题,确认WAF的作用和绕过需求。 - **核心方法**:基于引用和一般知识,解释纯数字命令执行绕过的具体方法。 - 引用[4]直接相关:它提到了HPP绕过,所以我应该引用它。 - 用户可能期望实际例子。 - **注意事项**:提醒用户此类方法用于安全测试,不要用于恶意目的。 - **相关问题**:添加相关问题。 回答使用中文,格式清晰。 关键点: - 纯数字命令执行:可能指命令注入中payload是数字形式的。 - 绕过方法:使用编码(如ASCII码)、HPP、白名单滥用。 例如: - ASCII编码:将命令转换为数字序列。如"id"的ASCII是105和100,可能在注入点输入`$(printf "\105\100")` 如果系统支持。 - 在参数中:如URL参数?cmd=123456,其中123456是编码的命令。 从引用[4]:index.php?wl=[whitelist]&a=select 1 union select 2 – 这里"select 1 union select 2"是SQL注入,但用户问命令执行。命令执行可能类似。 调整:对于命令执行,一个例子可能是?cmd=123%20%26%26%20ls,但123是数字。 更纯数字:如果WAF允许数字输入,攻击者可能输入数字序列,系统解析为命令。 实际方法: 1. **使用数字表示命令**:例如,在Linux中,`$(echo -e "\x6c\x73")` 执行"ls",因为\x6c是'l', \x73是's'。但这不是纯数字输入;输入是字符串。 用户说“纯数字命令执行”,可能意味着输入字段只接受数字,比如一个数字ID字段,攻击者注入命令通过数字值。 所以在输入点,如果只允许数字,攻击者可能输入数字序列,后端代码错误地执行它。 绕过WAFWAF检测字符串命令,所以使用纯数字payload可能不被标记。 例如: - 输入:123; sleep 5 – 但"sleep"不是纯数字。 纯数字:使用数字命令如`$(echo 123)`,但输入点需要是数字。 可能场景:攻击者输入一个数字,后端代码执行`system("command " + input)`,其中input是数字字符串。 为了绕过WAF,输入纯数字payload,如`123 && ls`,但"ls"是字母。 所以,需要将命令编码为数字。 例如: - 使用ASCII码:输入`108 115`,如果后端执行`echo 108 115 | xargs` 或类似,但那是复杂的。 更直接:输入`$(printf "\150\151")` 执行"hi",但printf不是纯数字。 或许在Web应用中,攻击者提交参数如?num=123456,其中123456是编码的命令值。 但后端必须错误处理它。 对于绕过WAF,关键是payload不触发WAF规则。 方法: - **混淆技术**:使用纯数字混淆,如多个参数:?p1=123&p2=456,WAF检查单个参数,但组合后形成命令。 引用[4]提到HPP:HTTP Parameter Pollution,例如?cmd=123&cmd=ls,如果后端取最后一个参数,WAF可能只检查第一个。 - **编码**:Base64编码命令为数字字母混合,但用户指定纯数字,所以可能使用十进制ASCII或类似。 例如,命令"id"可以输入为`105 100`,并在注入点使用`eval`或类似。 但在实际中,命令执行常通过OS命令注入。 一个纯数字绕过例子: 假设一个应用有数字输入字段,后端代码是`os.system("ping -c 1 " + user_input)`。 正常输入IP如"8.8.8.8"。 攻击者输入"8.8.8.8 && ls",但"ls"被WAF检测。 纯数字版本:输入"8.8.8.8 && $(echo 108 115 | awk '{printf \"%c%c\", $1, $2}')",但这不是纯数字输入;输入是字符串。 用户可能意指payload本身是纯数字序列,不包含字母。 例如,输入一个数字,当解释时执行命令。 如输入"123456",其中123456是恶意数字,但数字本身不执行命令;需要上下文。 或许在SQL注入或命令注入中,使用数字作为部分payload。 从安全角度,常见绕过- 使用数字代替字母:如用"1"代替"l"或"i",但命令执行中,命令名通常是字母。 例如,"cat /etc/passwd" – 纯数字可能不直接。 另一个想法:时间延迟攻击,如`sleep 5`,输入"5",如果后端执行`sleep input`。 但WAF可能检测"sleep"字符串。 如果输入是纯数字,WAF可能允许。 但用户问"命令执行",所以或许输入数字作为命令参数。 核心绕过方法基于引用[4]:HPP和规则滥用。 为回答: 1. 解释纯数字命令执行绕过的一般概念。 2. 提供一个具体方法,基于引用[4],调整到命令执行。 例如:使用HPP,在第一个参数放白名单数字,第二个放恶意数字payload。 如?param1=123&param2=456,其中param2被后端用于命令执行。 WAF可能只检查param1。 3. 其他方法:编码。 回答结构: - 介绍WAF绕过需求。 - 描述纯数字命令执行绕过的常见方法。 - 引用相关引用。 - 添加相关问题。 最后,生成相关问题。 </think>基于您的查询,我将详细介绍“纯数字命令执行绕过Web应用防火墙(WAF)的方法”。WAF(Web应用防火墙)主要用于防御Web应用层攻击,如SQL注入、跨站脚本(XSS)和命令注入等。它会监控和过滤HTTP/HTTPS流量,基于规则检测恶意输入(如字符串命令)。然而,WAF的规则可能存在缺陷,攻击者可以利用纯数字输入(例如,所有字符均为数字0-9的序列)来绕过检测,因为WAF可能未充分覆盖数字形式的混淆payload。这种方法常用于命令注入攻击中,其中输入字段(如URL参数或表单)被限制为数字类型,但后端代码未正确验证和处理输入,导致恶意命令执行。 以下内容基于站内引用(特别是引用[4],它讨论了WAF绕过技术,包括HTTP参数污染(HPP)和规则滥用)和一般安全知识。我将一步步解释核心方法、实际示例和注意事项。注意:这些方法仅用于安全研究和防护测试,严禁用于非法活动。 ### 核心绕过方法 纯数字命令执行绕过的核心思路是:**利用WAF规则对数字输入的宽松处理,通过编码、参数污染或上下文混淆,将恶意命令转换为纯数字形式,避免触发WAF的字符串检测规则**。以下是主要方法,每种方法都附有说明和示例。 1. **HTTP参数污染(HPP)绕过** WAF通常检查单个参数,但忽略参数间的组合效果。攻击者使用多个参数,其中一个放置无害数字(如白名单值),另一个放置纯数字恶意payload。后端代码可能只处理特定参数或拼接输入,导致命令执行。 - **原理**:引用[4]提到,WAF可能基于白名单机制过滤参数。例如,在URL中使用`wl=[whitelist]`作为第一个参数(白名单数字),WAF会允许它通过;然后在第二个参数添加纯数字payload,WAF不检测组合效果。 - **示例场景**:假设一个Web应用有数字输入端点`/execute?num=123`,后端执行`system("echo " + num)`。正常输入`123`输出数字。攻击者构造: ``` /execute?wl=100&num=108%20115%20%26%26%20id ``` 解释: - `wl=100`:白名单数字,WAF可能忽略检查。 - `num=108%20115%20%26%26%20id`:纯数字payload(URL编码后),其中`108 115`是ASCII码序列(对应"ls"),`%26%26`是"&&"的编码,`id`是命令(但这里`id`不是纯数字,需调整;纯数字版本见下)。 - 后端可能拼接为`echo 108 115 && id`,执行"ls"和"id"命令。WAF只检查`num`参数,如果规则未覆盖数字序列,则绕过- **纯数字改进**:使用全数字payload,如`num=108115`(表示ASCII序列),后端代码需错误解析它(如通过`printf`转换)。例如: ```bash # 后端示例代码(漏洞) user_input = request.GET.get('num') # 获取数字输入 os.system(f"printf '\{user_input}' | xargs -I{} sh -c '{}'") # 错误执行 ``` 攻击输入:`/execute?num=105100`(ASCII码105='i', 100='d',对应"id"命令),WAF可能不检测纯数字序列。 2. **数字编码混淆** 将命令转换为纯数字格式(如十进制ASCII码),利用后端函数(如`printf`或`eval`)动态还原并执行。WAF规则常忽略数字输入,因为它被视为“安全”。 - **原理**:引用[3]指出,WAF通过虚拟补丁更新规则,但对新编码方式反应滞后。纯数字ASCII序列(如`108 115`)不被视为威胁。 - **示例场景**:一个API端点接受数字ID:`/run?code=123`,后端执行`os.system("command " + code)`。 - 正常输入:`code=123` - 攻击输入:`code=105$100`(在shell中,`$`用于变量,但需适配;纯数字可用空格或特殊分隔符)。 改进纯数字:输入`code=105100`,并利用后端漏洞: ```python # 后端漏洞代码 import os code = request.GET.get('code') # 错误处理:将数字拆分为ASCII序列 decoded = ''.join(chr(int(code[i:i+3])) for i in range(0, len(code), 3)) # 假设每3位一个ASCII os.system(decoded) # 执行解码后的命令 ``` 攻击者输入`code=105100`,解码为"id",执行命令。WAF未检测纯数字负载。 3. **规则滥用和白名单结合** 利用WAF的白名单机制(如允许特定数字模式),将恶意payload嵌入“安全”数字中。引用[4]强调,WAF可能对某些目录或参数放宽检查。 - **原理**:如果WAF配置为允许数字输入(如ID字段),攻击者使用数学表达式或拼接技术注入命令。 - **示例场景**:一个计算器应用:`/calc?expr=2+2`,后端用`eval(expr)`执行。 - 正常输入:`expr=123` - 攻击输入:`expr=__import__('os').system('id')`,但这不是数字。纯数字版本: 输入`expr=123;__import__('os').system('id')`,但WAF可能检测分号。 **纯数字绕过**:使用数字环境变量或特殊语法(仅限支持的系统): ```bash expr=$((0))$(printf "\151\144") # 但包含字母;纯数字需依赖后端。 ``` 如果后端允许,输入`expr=123` 并在payload中嵌入:`/calc?wl=100&expr=108+115`(如果后端错误执行`os.system(expr)`)。WAF可能忽略加法操作。 ### 防御建议和注意事项 - **WAF的局限性**:引用[1]和[2]指出,WAF专注于常见攻击模式,但纯数字混淆可规避规则[^1][^2]。引用[3]强调,WAF需及时更新虚拟补丁[^3]。 - **最佳实践**: - 输入验证:后端应严格验证输入类型(如仅允许整数范围),避免直接拼接命令。 - 输出编码:对用户输入进行编码(如HTML实体或URL编码)。 - WAF配置:启用更严格的规则,监控数字序列异常(如长数字串或特殊字符)。 - 安全测试:使用工具(如Burp Suite)测试数字注入点。 - **道德提醒**:这些方法仅供安全研究。未经授权的攻击是非法的。 ### 相关问题 如果您对WAF绕过或相关主题有进一步兴趣,以下是相关问题: 1. WAF如何检测和防御数字混淆攻击? 2. 在命令注入中,除了纯数字,还有哪些常见绕过技术(如Unicode编码)? 3. 如何配置WAF规则以防止HTTP参数污染(HPP)绕过? [^1]: WAF的主要功能包括监控和过滤恶意流量,但规则可能无法覆盖所有数字混淆技术。 [^2]: WAF专注于Web应用层保护,但纯数字payload可规避基于字符串的检测规则。 [^3]: WAF通过虚拟补丁应对新漏洞,但对数字编码攻击的反应可能滞后。 [^4]: HPP绕过可利用参数组合执行恶意数字payload。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值