预备知识

本题涉及到的知识点:

  • 栈溢出(ret2libc)

  • 动态调试

程序分析

  1. 首先,使用checksec查看保护情况。

    32位程序,开启了Canary和NX保护。

    1
    2
    3
    4
    5
    Arch:     i386-32-little
    RELRO: Partial RELRO
    Stack: Canary found
    NX: NX enabled
    PIE: No PIE (0x8048000)
  2. 运行程序,首先输入数字数量,然后依次输入数字。随后出现程序菜单。

    pwn2

  3. 拖入IDA进行分析。程序通过while循环不断执行菜单里的功能。没有发现太明显的漏洞。

    pwn2_1

  4. 经过分析,发现一处增加数字功能,在往数组写入时没有检查边界。

    通过该函数,我们可以实现任意地址写数据。

    pwn2_2

  5. 继续分析,可以发现存在一个后门函数:hackhere。

    不过该函数调用system(‘/bin/bash’),服务器环境没有提供bash命令。

    我们可以利用system函数,直接执行system(‘sh’)。

    pwn2_3

利用思路

动态调试计算偏移地址

写入system_plt

写入sh参数

exp