欢迎光临
我们一直在努力

buuctf-pwn ciscn_2019_ne_5题解(学习过程持续更新)

本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题

此处我将文件命名为pwn

checksec pwn 查看一下保护机制

可以看到这是一个32-bit的文件,NX保护开启

将文件拖入ida,按F5将汇编代码转换成c语言代码,得到

可以看到第一次让我们输入s1,如果strcmp(s1, "administrator")不等于0,也就是如果s1不等于administrator,就会结束程序,所以第一次得输入administrator。然后让我们选择,如果选0:结束;如果选1:进入AddLog(让我们输入log);如果选2:进入Display(打印所有的log);如果选3:进入Print(输出Printing……);如果选4:进入GetFlag

看一下AddLog函数,和GetFlag函数

可以看到我们在AddLog里可以让我们128字节的数据,然后这个数据会作为GetFlag函数的参数,然后在GetFlag函数内复制给dest,然而dest距离ebp偏移只有0x48,远小于128,所以可以发生栈溢出。

因此我们只需要在AddLog函数里输入0x48+8的垃圾数据,再拼接我们的ROP链。然后在GetFlag函数里复制给dest,发生栈溢出,覆盖返回地址为我们的system("sh"),获得shell

返回虚拟机

ROPgadget –binary pwn –string "sh"

得到sh_addr = 0x80482ea

nano exp.py

上面已经讲解过了,在这不再重申一遍

保存退出

python3 exp.py

cat flag

此题完

赞(0)
未经允许不得转载:171主机测评 » buuctf-pwn ciscn_2019_ne_5题解(学习过程持续更新)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址