PWN:从零开始搭建Ubuntu CTF

您所在的位置:网站首页 ubuntu安装monocle3 PWN:从零开始搭建Ubuntu CTF

PWN:从零开始搭建Ubuntu CTF

2023-07-07 07:50| 来源: 网络整理| 查看: 265

环境准备

1、下载ubuntu https://cn.ubuntu.com/download/alternative-downloads 2、安装参考 https://blog.csdn.net/qq_54218833/article/details/125241618 2、安装WMwareTool https://blog.csdn.net/MR_lihaonan/article/details/125479384 4、安装Oh-My-Zsh https://blog.csdn.net/weixin_43658578/article/details/126802982

安装工具

安装pwntools

apt install python3-pip sudo apt install python3-pwntools

安装pwndbg(运行gdb下有pwndbg标识即表示安装成功)

git clone https://gitee.com/Z3R3F/pwndbg.git cd pwndbg ./setup.sh

安装checksec(运行pwndbg时自动检测)

git clone https://github.com/slimm609/checksec.sh.git cd checksec.sh sudo ln -s /xx/xx/checksec /usr/local/bin/checksec #绝对路径

安装LibcSearcher-ng(联网可用)

git clone https://github.com/dev2ero/LibcSearcher.git cd LibcSearcher python3 setup.py develop

安装LibcSearcher(推荐LibcSearcher-ng)

sudo apt install python3-capstone git clone https://github.com/lieanu/LibcSearcher.git cd LibcSearcher python3 setup.py develop

安装ropgadget

sudo apt install python3-ropgadget 使用:OPgadget --binary ./ciscn_2019_c_1 --only "pop|ret"

安装one_gadget

sudo apt -y install ruby sudo gem install one_gadget 使用:one_gadget libc.so.6

指定libc执行:p= process(['./ld-2.23.so','./pwn'], env = {'LD_PRELOAD' : './libc-2.23.so'})

其它技巧

1、ida

1. ida 查看反编译成代码 F5 2. ida 查看字符串Shift+F12 3. n:修改函数名 4. ctrl + s:查看各段地址

2、调试程序、查看内存、栈

EIP 下条指令执行的位置 stack 50 x\16x 0x482054 x\s 0x482054 x \gx rsp r或run:运行程序。 n 或 next:单条执行。 s或step:进入函数调用 continue(或c):从当前位置开始连续而非单步执行程序 break(b) 行号:在某一行设置断点 info break :查看断点信息。 finish:执行到当前函数返回,然后挺下来等待命令 print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数 p 变量:打印变量值 quit:退出gdb pwn保护机制

1、PIE随机地址保护

解释: 顾名思义,就是地址每次运行时随机的,因为我们覆盖返回地址,那你得知道我们要执行的代码要去哪对吧,所以你要知道shellcode的地址,那你开地址随机化,你不就没办法知道了吗。

绕过: 我们可以有两个思路,第一个就是我们一旦泄露出一个变量的地址,那这不就稍微加减计算一下就可以得到所有的地址了吗,第二个就是我们覆盖地址只覆盖2字节,也就是4个数字,也就是说我们第4个数字不知道,1个数字那不就10种可能嘛,一个个试,不过呢这个方法只适合小端序的程序

2、Canary保护

栈溢出保护是一种缓冲区溢出攻击缓解手段,在ebp的上面,会压入一个Canary的值,在子函数验证完之后,对比Canary的值,看看是否相等。不相等,代表程序被修改,产生了异常

3、NX保护机制

No-eXecute(不可执行),基本原理是将数据所在内存页标识为不可执行,其实就是让我们不能直接利用程序中的某一段代码或者自己填写代码来获得 shell



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3