[BUUCTF]PWN——picoctf_2018_leak_me(puts的‘\x00’绕过输出敏感数据)

picoctf_2018_leak_me

附件

步骤

  1. 例行检查,32位,开启了nx保护
    在这里插入图片描述
  2. 本地运行看一下大概的情况
    在这里插入图片描述
  3. 32位ida载入
    在这里插入图片描述
    程序执行的大概流程就是先输入name,然后输入password,靶机上应该会有一个password.txt去检测是否输入是否正确,输入正确,就会调用flag函数,flag函数回将flag打印出来
    在这里插入图片描述
  4. 参数v5(存放name)和参数s(存放flag)在栈上的位置相差不远,而且给参数v5读入数据的时候可以覆盖道参数s
    在这里插入图片描述
    在这里插入图片描述
    他们相差0x154-0x54=0x100,而且我们对v5输入的数据长度正好是0x100,可以将v5填充满,后面紧接着的就是s,main函数里的34行会将v5打印出来,puts遇到‘\x00’才停止,v5里的内容现在是0x100*a+password+'\x00'*4c,所以回将password顺带着打印出来。
    这边我使用的cyclic来生成的字符串去读出password
    在这里插入图片描述
    得到密码a_reAllY_s3cuRe_p4s$word_f85406
  5. 接下来重新nc,输入该密码即可
    在这里插入图片描述

这题完全不用写exp,但是水一下文章,还是写一下吧

from pwn import *

p = remote("node3.buuoj.cn",28171)

password = "a_reAllY_s3cuRe_p4s$word_f85406"
p.sendlineafter("What is your name?\n","A")
p.sendlineafter("Please Enter the Password.\n",password)

p.interactive()

猜你喜欢

转载自blog.csdn.net/mcmuyanga/article/details/113540092