CTF-PWN
内容:
附件:https://pan.baidu.com/s/1twNiCnqBL17_WuQr1NdGBQ?pwd=g9by 提取码:g9by
答案:flag{d07d7b41-1672-4338-a72c-43e12c26c587}
总体思路
详细步骤
-
查看文件信息
-
int getShell() { int result; // eax char v1[9]; // [esp-Ch] [ebp-Ch] BYREF strcpy(v1, "/bin//sh"); result = 11; __asm { int 80h; LINUX - sys_execve } return result; }
-
-
题目通过将
/bin/sh
写入了ebx
,随后调用int80
(sys_execve)系统调用- [CTF pwn]傻傻分不清的execve、int80、syscall、system及shellcode
-
故此题可以直接获得了shell,直接执行。
参考文档
- 常用工具
- pwntools逆向python库
- 工具的基本使用方法,注意安装要使用
pip install pwntools
- 官方文档
- 官方使用教程
- 工具的基本使用方法,注意安装要使用
- Kali
- checksec:检查样本的基本信息也可以是通过设置 pwntool.context.log_level = 'debug’得到
- ROPgadget:检查文件中可以利用的
gadget
或rop-chain
- 注意在
python3
版本中,生成的chain需要在所有的字符串前面加上b
表示十六进制值,否则会出现str
不能合并bytes
的报错
- 注意在
- gdb:程序动态调试工具,也可以直接使用ida的远程调试功能
- pwntools逆向python库
- 教程
- 2019 北航 CTF Pwn入门培训课程(一)
- 基础的rop使用方法
- 2019 北航 CTF Pwn入门培训课程(二)
- 为什么main的返回地址被替换为
system_addr
后 a=system_ret ;b=p aram_1- ret2libc使用pil节区中的
system
和/bin/sh
- 如果没有的话就看其他函数的地址以查到libc版本,以及其各值的地址
- ret2libc使用pil节区中的
- 如果是静态编译则使用int80调用rop链
- ROPgadget
- 通过
ROPgadget --binary rop --ropchain
获取可以直接使用的rop链 - 通过
ROPgadget --binary rop --only "pop|ret"
获取可以存值的地方
- 通过
- ROPgadget
- 为什么main的返回地址被替换为
- 2019 北航 CTF Pwn入门培训课程(三)
- 待解析
- 2019 北航 CTF Pwn入门培训课程(四)
- 待解析
- 2019 北航 CTF Pwn入门培训课程(一)
- 常见知识点
- [CTF pwn]傻傻分不清的execve、int80、syscall、system及shellcode
- C 运算符重载