• [BUUCTF]PWN4——pwn1_sctf_2016


    [BUUCTF]PWN4——pwn1_sctf_2016

    题目网址:https://buuoj.cn/challenges#pwn1_sctf_2016

    步骤:
    例行检查,32位,开启nx(堆栈不可执行)保护,就是说我们没法往堆栈上写东西
    在这里插入图片描述
    nc一下看看输入点的字符串
    在这里插入图片描述
    用32位ida打开附件,shift+f12查看一下程序里的字符串,看到了比较敏感的“cat flag.txt”
    在这里插入图片描述
    双击跟进,ctrl+x查看哪个函数调用了这个字符串,找到函数后按f5将其反编译成我们熟悉的伪代码
    在这里插入图片描述
    看到这个函数的作用就是输出flag.txt里的内容,记一下地址 flag_addr=0x8048F0D
    在这里插入图片描述

    回到我们查看字符串的窗口,根据nc时看到的字符串找到输入点
    可以看到第12行的fgets是我们的输入点,但是它只读入了32(=0x20)长度的数据,小于0x3c,没有办法造成溢出,但是呢这个程序有点意思的地方就在于回将一个字节的“I”替换成三个字节的“you”
    那么思路来了,我们输入20字节的 “I” ,经过第19行的replace函数后会变成60字节的 “you” ,这样就可以进行溢出了,之后覆盖ebp,覆盖返回地址为输出flag的函数地址,就可以完成利用
    (14~26行的代码是c++的语法,不是很清楚的,可以去网上查一下这几个的用法,注释处是我的理解)

    exp:

    from pwn import*
    
    r=remote("node3.buuoj.cn",27491)
    flag_addr=0x8048f0d
    payload='I'*20+'aaaa'+p32(flag_addr)
    r.sendline(payload)
    
    r.interactive()
    

    在这里插入图片描述

  • 相关阅读:
    redis配置引发的问题
    String类的split()方法
    修改mysql编码配置文件不生效
    mysql性能优化小知识点
    limit使用
    mysql执行顺序
    记录一个不知名的错误
    子数组最大和及下标
    maven项目中不能加载java目录下的配置文件
    判断树是否为搜索树
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273731.html
Copyright © 2020-2023  润新知