vulntarget-d
vulntarget-d 靶场渗透实战记录
记一次完整的内网渗透实战演练
前言
最近在GitHub上发现了一个不错的综合靶场 vulntarget-d,据说涵盖了内网渗透的常见考点。周末花了点时间研究了一下,整个过程还挺有意思的,踩了不少坑,也学到了很多东西。这篇文章记录一下完整的渗透流程,希望对大家有所帮助。
最终成果:成功拿到flag c69afdfaaf2f7d820bb2c9ff4598d225 ✌️
环境信息
靶场是一个双层网络结构:
- 外网:192.168.111.20 (Ubuntu + 74cms)
- 内网:10.0.20.131 (Ubuntu)、10.0.20.136 (Windows 7)
我的目标是从外网一路打到内网Windows机器,最终拿到flag。
第一步:外网立足点
目标识别
访问 http://192.168.111.20:81/,发现是一个招聘网站系统。通过指纹识别,确定是 74cms V6.0.20 (骑士PHP高端人才系统),底层框架是 ThinkPHP 3.2.3。
这个版本的74cms存在一个经典的文件包含漏洞,可以通过日志投毒的方式getshell。
74cms 文件包含漏洞利用
漏洞原理:
74cms在处理简历模板时,assign_resume_tpl 控制器存在任意文件包含漏洞。通过构造特殊的payload,可以包含ThinkPHP的日志文件,而日志文件中如果包含了我们注入的PHP代码,就能实现代码执行。
利用步骤:
第一步:日志投毒
访问漏洞端点并通过POST注入PHP代码到日志:
1 | |
这段payload的作用是:
- 向ThinkPHP的日志文件中写入PHP代码
- 代码功能是创建一个名为
tx.php的webshell - Webshell密码参数为
x
第二步:包含日志文件触发执行
确定当前日期对应的日志文件(格式:YY_MM_DD.log),然后包含执行:
1 | |
第三步:验证webshell
1 | |
返回:www ✅
成功拿到外网webshell!
踩坑记录:
- 日志文件的日期格式要对应当前日期(YY_MM_DD)
- payload中的特殊字符需要正确转义
- 宝塔WAF可能会拦截,需要注意绕过
最终获得:
- URL:
http://192.168.111.20:81/tx.php - 密码参数: POST
x - 权限: www用户
第二步:搭建内网代理
工具选择的小插曲
一开始我尝试用哥斯拉自带的内网代理功能,结果发现访问内网机器卡得不行。访问 http://10.0.20.136 几乎连不上,这让我很头疼。
后来换成了 Neo-reGeorg,效果立竿见影!访问速度从”几乎超时”变成了”不到1秒响应”。果然专业的工具还是靠谱。
Neo-reGeorg 部署步骤
Neo-reGeorg 是一个基于HTTP隧道的SOCKS代理工具,比传统的reGeorg性能更好。
1. 生成加密的tunnel脚本
1 | |
这里的 -k 参数是自定义密钥,客户端和服务端必须一致。执行后会在 neoreg_servers/ 目录生成各种平台的tunnel脚本。
2. 上传tunnel.php到目标服务器
我们需要的是 tunnel.php,把它上传到外网webshell能访问的web目录。我用哥斯拉的文件管理功能,直接上传到 /www/wwwroot/upload/tunnel.php。
上传后验证一下:
1 | |
返回200就说明文件可以正常访问了。
3. 启动本地SOCKS5代理
1 | |
看到 INFO: Starting socks server (127.0.0.1:1080) 就说明代理启动成功了。这个终端要保持运行,别关。
4. 验证代理效果
1 | |
返回 HTTP 200,响应时间不到1秒!这速度比哥斯拉的代理快太多了。✅
第三步:攻击内网Windows机器
发现phpMyAdmin
通过代理访问内网Windows机器(10.0.20.136),发现80端口运行着phpStudy环境。直接访问 /phpmyadmin 路径,居然真的有!
试了试弱口令 root/root,直接登进去了。这年头还有这样的弱口令,真是让人哭笑不得。
MySQL日志写shell - 第一次尝试
看到phpMyAdmin,我第一反应就是用MySQL日志写shell。原理很简单:
- 开启MySQL的通用日志(general_log)
- 把日志文件路径设置成web目录下的PHP文件
- 执行一条包含PHP代码的SQL查询
- PHP代码会被记录到日志文件中
- 访问这个日志文件就能执行我们的代码
第一次尝试 - 踩坑了
我一开始是这么操作的:
1 | |
一次性执行了多条SQL,感觉很完美对吧?结果访问 s.php 后,发现虽然文件存在,但执行命令时返回的全是MySQL日志内容,看不到命令执行结果。
我一度以为失败了,觉得日志写shell这个方法在这个环境下不可行。
转机 - 其实成功了
后来仔细测试了一下,发现其实shell是能用的!只是返回内容混杂了大量MySQL日志,我没有正确识别出命令执行结果。
测试命令:
1 | |
返回内容里确实有 test_s_php!原来PHP代码一直都在执行,只是被日志内容包围了。
第二次尝试 - 按官方思路来
参考官方WriteUp,我又按照标准流程做了一遍:
1 | |
生成了 vulntarget.php 这个文件(约912字节)。
测试命令执行:
1 | |
成功返回:win-d4s86jo2r26\crow ✅
用哥斯拉连接
命令行操作效率太低,直接上哥斯拉:
连接信息:
- URL:
http://10.0.20.136/vulntarget.php - 密码:
vuln - 代理: SOCKS5
127.0.0.1:1080
连接成功后,可以看到当前用户是 crow,并且已经是管理员权限了!
第四步:Windows提权与密码抓取
虽然通过phpMyAdmin已经拿到了crow用户的管理员权限webshell,但作为完整的渗透流程,我们还需要提权到SYSTEM并抓取密码。
检查安全软件
通过webshell执行命令检查杀软:
1 | |
发现系统安装了火绒安全软件,这意味着普通的MSF木马会被查杀,需要做免杀处理。
生成免杀木马
使用msfvenom的编码器进行多次迭代免杀:
1 | |
参数说明:
-e x86/shikata_ga_nai:使用shikata编码器-i 7:迭代编码7次-b '\x00':避免空字节LPORT=1234:监听端口-f raw:原始格式输出
配合加载器使用,上传到Windows系统并执行。
MSF连接与提权
启动MSF监听:
1 | |
执行木马后成功建立会话!
尝试提权:
1 | |
提权成功!✅ 当前已经是SYSTEM权限。
抓取明文密码 - 32位/64位问题
直接执行抓密码命令:
1 | |
结果失败了!原因是我们生成的木马是32位的,而很多系统进程是64位的。
解决方法:进程迁移
查看当前进程:
1
meterpreter > getpid查看系统进程列表:
1
meterpreter > ps迁移到64位的SYSTEM进程:
1
meterpreter > migrate 504
注意: 必须选择User为NT AUTHORITY\SYSTEM的64位进程!
- 重新抓取密码:
1
meterpreter > hashdump
成功获取明文密码:
- 用户名:
crow - 密码:
admin
开启RDP远程桌面
为了方便后续操作,开启Windows的远程桌面:
1 | |
配置好SOCKS代理后,就可以通过RDP远程连接Windows机器了。
第五步:寻找Flag
一个有趣的发现
拿到shell后,我本来打算先提权、抓密码、搞RDP,走一套标准的后渗透流程。
但突然意识到:我已经有管理员权限的webshell了,为什么不直接找flag?很多时候我们容易陷入”套路化”的思维,觉得必须要RDP登录才能拿flag,其实完全不必要。
Flag在哪里?
用哥斯拉的文件管理器浏览了几个常见位置:
C:\Users\crow\Desktop- 只有一个快捷方式C:\Users\crow\Documents- 空的C:\- 没有明显的flag文件
用命令行搜索也不太好使,webshell返回的内容混杂了MySQL日志,很难解析。
关键线索
后来得知flag文件名叫 falg.txt(注意是 falg 不是 flag),这是典型的CTF技巧 - 故意拼错避免被轻易搜索到。
最快方法:直接用哥斯拉的文件搜索功能,搜索 falg.txt,很快就找到了文件位置。
打开查看,得到flag:
1 | |
任务完成!🎉
经验总结
1. 内网代理工具的选择
这次最大的收获是对比了不同代理工具的性能:
| 工具 | 性能 | 适用场景 |
|---|---|---|
| 哥斯拉自带代理 | 很卡,几乎超时 | 临时测试 |
| Neo-reGeorg | 响应<1秒,稳定 | 正式渗透推荐 ✅ |
教训:遇到代理慢的问题,不要死磕,及时换工具才是正道。
2. MySQL日志写shell的坑
重要发现:即使返回内容混杂了大量MySQL日志,PHP代码也能正常执行!
我一开始以为失败了,其实只是没有正确识别命令执行结果。关键是要仔细观察返回内容,不要被日志迷惑。
两个可用的shell:
s.php(密码: x) - 第一次尝试生成的,其实能用vulntarget.php(密码: vuln) - 第二次按官方流程生成的
3. 思维定式要不得
拿到管理员权限的webshell后,我本能地想着要”提权→抓密码→RDP登录”。但其实仔细想想:
- 我已经有管理员权限了
- Webshell可以直接读取文件
- 何必非要RDP?
反思:不要被套路束缚,根据实际情况选择最高效的方法。有时候最简单的方法就是最好的方法。
4. 文件搜索的技巧
通过webshell命令行搜索文件效率很低,尤其是返回内容混杂的情况下。
最佳实践:直接用webshell管理工具(如哥斯拉)的文件管理和搜索功能,可视化操作比命令行快得多。
技术要点回顾
Neo-reGeorg 使用要点
1 | |
MySQL日志写shell要点
1 | |
注意事项:
- 生成的日志文件会包含MySQL日志头部
- PHP代码能正常执行,不要被混杂的日志内容迷惑
- 文件大小通常在几百字节到1KB之间
工具清单
| 工具 | 用途 | 下载地址 |
|---|---|---|
| Neo-reGeorg | 内网SOCKS5代理 | https://github.com/L-codes/Neo-reGeorg |
| 哥斯拉 | Webshell管理工具 | 自行搜索 |
| curl | 命令行HTTP测试 | 系统自带 |
结语
这次vulntarget-d靶场的实战演练让我收获很多:
工具选择的重要性 - 合适的工具能大幅提升效率,不要在性能差的工具上浪费时间
不要被表象迷惑 - MySQL日志写shell虽然返回内容混杂,但其实一直都在正常工作
灵活变通 - 有了管理员webshell就能直接读flag,不必执着于”标准流程”
细节决定成败 - 文件名
falg.txt而不是flag.txt,这种小细节很容易被忽略
总的来说,这是一个很好的内网渗透练习靶场,涵盖了代理搭建、弱口限利用、日志写shell等常见技术点。推荐给想练习内网渗透的朋友们!
最终Flag: c69afdfaaf2f7d820bb2c9ff4598d225
完成时间: 2026-07-06
Happy Hacking! 🎯