Aura 酱的旅行日记 I <图寻擂台>
链接: Aura 酱的旅行日记 I <图寻擂台> 识图一下,成都自然博物馆,后续的题大概率都是在四川成都了
3-ret2syscall
ret2syscall原理ret2syscall,即控制程序执行系统调用,获取 shell。 例1继续以 bamboofox 中的 ret2syscall 为例。 点击下载: ret2syscall 首先检测程序开启的保护: $ checksec ret2syscall Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: No Debuginfo: Yes 可以看出,源程序为 32 位,开启了 NX 保护。接下来利用 IDA 进行反编译: int __cdecl main(int argc, const char **argv, const char **envp){ int v4; // [esp+1Ch] [ebp-64h] BYREF setvbuf(stdout, 0, ...
week2
shellcode_level1Hint:两字节怎么写系统调用 点击下载: shellcode_level1 Checksec 查看保护 $ chmod +x shellcode_level1$ checksec shellcode_level1 Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled SHSTK: Enabled IBT: Enabled Stripped: No 发现elf开启了pie保护,并且开启了canary保护,这使得使用栈溢出漏洞进行攻击变得难以执行。但是,根据题目提示,本题实质上还是要写入shellcode,但是具体往哪里写呢?又怎么写入呢? 还是利用ida进行反编译,观察一下程序的逻辑。 int __fastcall main(int argc, const char **argv, const char **en...
week1
签个到吧Hint:怎么连接靶机呢$ nc gz.imxbt.cn 20605lscat flag echoHint:binsh目录下只有echo? echo flag??$ nc gz.imxbt.cn 20139ls/bin/bash: line 1: ls: command not foundecho flagflag./flag./flag: line 1: BaseCTF{}: command not found或者echo `</flag` Ret2textHint:原来栈是可以溢出的! 点击下载: Ret2text → checksec Ret2text Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) SHSTK: Enabled IBT: Enabled Stripped: ...
PIE
由于ASLR是一种操作系统层面的技术,而二进制程序本身是不支持随机化加载的,便出现了些绕过方式,例如ret2plt、GOT劫持、地址爆破等。于是,人们于2003年引入了位置无关可执行文件(Posifion-Independent Bxecutable,PIE),它在应用层的编译器上实现,通过将程序编译为位置无关代码( Position-Independent Code,PIC),使程序可以被加载到任意位置,就像是一个特殊的共享库。在PIE和 ASLR 同时开启的情况下,攻击者将对程序的内存布局一无所知,大大增加了利用难度当然凡事有利也有弊,在增加安全性的同时,PIE也会一定程度上影响性能,因此在大多数操作系统上 PIE 仅用于一些对安全性要求比较高的程序。
2-ret2shellcode
ret2shellcode原理ret2shellcode,即控制程序执行 shellcode 代码。shellcode 指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的 shell。通常情况下,shellcode 需要我们自行编写,即此时我们需要自行向内存中填充一些可执行的代码。 在栈溢出的基础上,要想执行 shellcode,需要对应的 binary 在运行时,shellcode 所在的区域具有可执行权限。 需要注意的是,在新版内核当中引入了较为激进的保护策略,程序中通常不再默认有同时具有可写与可执行的段,这使得传统的 ret2shellcode 手法不再能直接完成利用。 利用方式第一种利用方式:根据函数调用约定,在一个函数执行的最后,是一个leave;ret; 实质是 mov esp,ebp pop ebp pop eip 这时候我们在填充一个shellcode,然后控制返回地址为jmp esp即可利用 shellcode jmp esp old_ebp 局部变量 pwndbg> r #不断点直接Starting program...
1-ret2text
随着 NX (Non-eXecutable) 保护的开启,传统的直接向栈或者堆上直接注入代码的方式难以继续发挥效果,由此攻击者们也提出来相应的方法来绕过保护。 目前被广泛使用的攻击手法是 返回导向编程 (Return Oriented Programming),其主要思想是在 栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。 gadgets 通常是以 ret 结尾的指令序列,通过这样的指令序列,我们可以多次劫持程序控制流,从而运行特定的指令序列,以完成攻击的目的。 返回导向编程这一名称的由来是因为其核心在于利用了指令集中的 ret 指令,从而改变了指令流的执行顺序,并通过数条 gadget “执行” 了一个新的程序。 使用 ROP 攻击一般得满足如下条件: 程序漏洞允许我们劫持控制流,并控制后续的返回地址。 可以找到满足条件的 gadgets 以及相应 gadgets 的地址。 作为一项基本的攻击手段,ROP 攻击并不局限于栈溢出漏洞,也被广泛应用在堆溢出等各类漏洞的利用当中。 需要注意的是,现代操作系统...
无标题
人麻了,我写的不见了,就看看下面那个师傅的吧,回头再补坑Ret2dlresolve攻击解析 - chan’s blog Q1:什么是动态链接? 把链接这个过程推迟到了运行时再进行,在可执行文件装载时或运行时,由操作系统的装载程序加载库 Q2:为什么需要动态链接? 解决静态链接的空间浪费和更新困难问题 Q3:动态链接的实现? Linux:.so;Windows:.dll 共享的是代码,私有的是数据 共享对象的最终装载地址在编译时是不确定的,而是在装载时,装载器根据当前地址空间的空闲情况,动态分配一块足够大小的虚拟地址空间给相应的共享对象 Q4:动态链接对象共享难题? 指令部分有两个地方需要在装载时确定 一是指令访问其他模块的数据。如果其他模块的数据的地址需要再装载时才能确定,这就必须修改指令中的地址 二是指令中调用其他模块的函数 解决方法:全局偏移表 GOT(global offset table) Q5:GOT? 数据段中的一个指针数组: 存储:存放跨模块的数据/函数的地址 动态修改:在装载时动态填入 访问:通过GOT的指针间接访问 说白了GO...








