• CTF,第二题


    https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5052&page=1

    有了之前第一题的基础,这个就非常容易了,事实证明,第二题也确实比第一题难度低,直接下载文件,看代码

     

     

    主要看这三段就够了,第一段是当前函数的唯一一个函数体,功能是输出提示接受输入,其实 read 0 ,就是从标准输入流接受输入

    它read 了16个字节,然后判断了一个变量,如果值符合要求,那么久调用下面的函数,下面的函数输出flag(读一个文件)

    很简单,那么我只需要看一下那个输入的缓冲区和那个普通变量就好了。

    全局变量也不怕,内存分布很巧,等待输入的变量和后需要判断的变量挨着,

    结果导致,如果我可以精心构造一个字符串的话,就有可能在输入这个字符串之后,修改了邻接的第二个变量,最后让if 判断符合条件,

    if的条件是要求 判断变量处内存需要为 == “aaun”

    根据内存分布,发现,判断变量前,到上一个变量即接收输入的字符串起始地址,差距4个字节,判断变量长度又是4个字节,

    所以我们精心构造的字符串应该是这样的:????aaun。

    后面什么样,就随它去吧,我比较习惯把后面填满,即再补8字节,但是其实不填也没问题,

    代码如下

     1 from pwn import *
     2 
     3 a = remote('124.126.19.106', 39129)
     4 r = a.recvuntil('bof
    ')
     5 print(r)
     6 
     7 str = "a" * 4 + "aaun" 
     8 print(str)
     9 a.send(str);
    10 
    11 a.interactive()

    执行效果

    有了第一次的经验,这次就知道怎么玩了,挺容易的,没难度,

    一共就用了五分多,之间还去了倒了一杯咖啡,之后又去了一趟WC。

    循序渐进吧。

  • 相关阅读:
    Nginx的启动、停止与重启
    如何修改element.style中的值
    在centos后台运行python程序(nohup)
    Python schedule 模块使用
    「Django」Django内置email发送邮件
    Django内置email发送邮件
    「Django」Xadmin应用
    「Django」浏览+1的操作
    「Vue」watch基本用法
    「Django」contenttypes基本用法
  • 原文地址:https://www.cnblogs.com/suanguade/p/12963654.html
Copyright © 2020-2023  润新知