Rop-Ret2Text介绍及实例教学 1、前提知识 2、实例教学 1、前提知识 什么是Rop系统攻击 是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。...ROP也有其不同于正常程序的内在特征: (1)ROP控制流中,call和ret指令不操纵函数,而是用于将函数里面的短指令序列的执行流串起来,但在正常的程序中,call和ret分别代表函数的开始和结束;...ROP攻击的防范:ROP攻击的程序主要使用栈溢出的漏洞,实现程序控制流的劫持。因此栈溢出漏洞的防护是阻挡ROP攻击最根源性的方法。如果解决了栈溢出问题,ROP攻击将会在很大程度上受到抑制。...安装gdb-peda的教程我之前发过 之前的文章,有gdb的基本使用和插件peda的下载教程 补充:pwndbg和peda的切换 /是根目录,~是home目录,Linux存储是挂载的方式,相当于是树状的...-zexestack -m32 -o -read -read.c 意思就是没有pie保护,有canary保护,栈可执行,32位文件,输出叫read的程序,用read.c的文件 我们打开gdb,发现是peda
ROP简介 返回导向编程(缩写ROP)是一种高级的内存攻击技术,这类攻击往往利用堆栈调用时的程序漏洞,通常是缓冲溢出。
因为需要在一次溢出中利用多个函数,所以要找到gadgetspop esi;pop edi;pop ebp;ret;
32位的程序执行完之后要有一个返回地址,可以随便给,64位就不行了,拼接payload 加一个返回地址就OK
栈帧是程序运行栈的一部分 ,在 Linux中 ,通过%esp和 %ebp寄存器维护栈顶指针和栈帧的起始地址 ,%eip是程序计数器寄存器 [1] 。...最初ROP攻击实现在x86体系结构下,随后扩展到各种体系结构.。与以往攻击技术不同的是,ROP恶意代码不包含任何指令,将自己的恶意代码隐藏在正常代码中。因而,它可以绕过W⊕X的防御技术。...ROP攻击的防范:ROP攻击的程序主要使用栈溢出的漏洞,实现程序控制流的劫持。因此栈溢出漏洞的防护是阻挡ROP攻击最根源性的方法。如果解决了栈溢出问题,ROP攻击将会在很大程度上受到抑制。...注:Linux是一种开源操作系统,更准确地说Linux提供了内核 [2] ,其上运行 GNU 开源项目的各种程序 [3] ,提供了丰富的功能和强大的扩展性。...事实上,基于 GNU / Linux 架构有很多 Linux 的不同发行版,比较著名的包括 Gentoo, Arch Linux, debian, Ubuntu, Fedora, Mandria, SUSE
git clone https://github.com/longld/peda.git~/panda/peda echo “source ~/panda/peda/peda.py” >> ~/.gdbinit...bashgcc -fno-stack-protector linux_x64_test1.c -o linux_x64_test1 -ldl //禁用栈保护 检测如下: gdb-peda$ checksec...bash gcc -fno-stack-protector linux_x64_test2.c -o linux_x64_test2 -ldl //禁用栈保护 检测如下: gdb-peda$ checksec.../linux_x64_test2 0x7fa84dc3d390 Hello, World ROP简介 ROP的全称为Return-oriented programming(返回导向编程),是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御..._test3.c -o linux_x64_test3 -ldl //禁用栈保护 检查防护 gdb-peda$ checksec linux_x64_test3 CANARY : disabled
在 ret2win 这个函数里面有个后门,输出了 flag.txt,地址是:0x8048659,只要把返回地址覆盖成这个就可以了
这里只是一道简单的栈溢出问题,但是因为设置NX,所以要通过rop来执行shellcode。...参考链接:https://medium.com/@iseethieves/intro-to-rop-rop-emporium-split-9b2ec6d4db08 前期信息搜集 这篇文章里前期用到了radare2...现在就看看怎么构造rop了?...rop的步骤: 利用fgets()来填充buffer,将返回地址覆盖为pwnme的地址 建立rop链把’/bin/cat flag.txt’传入RDI寄存器 调用system() exp.py # coding...= p64(pop_rdi_ret) rop_chain += p64(cat_addr) rop_chain += p64(system_addr) rop_chain += p64(fake_ret
16.Service Info: Host: FROLIC; OS: Linux; CPE: cpe:/o:linux:linux_kernel 17. 18.Host script results...会获取我们的输入然后输出 我们通过 1. base64 rop ?...得到这个文件内容的的编码内容,然后在放回到本机对这个文件解码进行查看调试 1. base64 -d rop.ba64 > rop 2. chmod +x rop 3. ..../rop hello ?...然后我们本地用gdb进行调试 1. gdb rop 插件peda的安装:https://blog.csdn.net/gatieme/article/details/63254211 ?
0 [vdso] 最下面的那个section,就是我们的vdso了,权限是r-xp,可读可执行但不可写,我们可以直接把他dump出来看看: gdb-peda...$ dumpmem vdso.so 0x00007ffff7ffa000 0x00007ffff7ffc000 Dumped 8192 bytes to 'vdso.so' gdb-peda$ quit...g DO *ABS* 0000000000000000 LINUX_2.6 LINUX_2.6 0000000000000f30 g DF .text 000000000000002a...LINUX_2.6 __vdso_getcpu 0000000000000f30 w DF .text 000000000000002a LINUX_2.6 getcpu 是一些常用的系统调用函数...0x02 vDSO 在内核提权中的应用 首先明确一点,vDSO在用户态的权限是R/X,在内核态的权限是R/W,这导致了如下两种思路: 假如我们能控制RIP,就通过ROP执行内核函数set_memory_rw
前言 rop emporium网站上提供了许多构造rop的challenge,作为小白的我从这里开始,专注于rop链的构造。 0x00 ret2win32 IDA打开,很容易找到溢出点 ?...有关linux下的保护措施,在此不做说明。...由于之前传入了三个参数,所以寻找rop使esp向上偏移0xc字节,寻找rop还是用之前方法即可。...通过之前提到的万能rop链只能给rdi,rsi赋值,但是没有pop rdx,但是如果说此题只需要两个参数,那么还是可以通过万能rop链来解决的。 ?...链,我想此时应该能感受到rop的强大了吧!
(gdb) source ~/tools/peda/peda.py gdb-peda$ checksec CANARY : disabled FORTIFY : disabled NX...这次为了方便直接找现成的函数和字符串地址: gdb-peda$ p system $2 = {} 0xf7e2bb30 gdb-peda...:) ROP 除了跳转到system函数, 还有些常用的比如mprotect(win下的VirtualProtect), 可以重新给内存添加执行权限....ROP Gadget的功能, 极大提高了exploit的效率..../victim_nx (gdb) source ~/tools/peda/peda.py gdb-peda$ aslr on gdb-peda$ checksec CANARY : disabled
0 [vdso] 最下面的那个section,就是我们的vdso了,权限是r-xp,可读可执行但不可写,我们可以直接把他dump出来看看: gdb-peda...$ dumpmem vdso.so 0x00007ffff7ffa000 0x00007ffff7ffc000 Dumped 8192 bytes to 'vdso.so' gdb-peda$ quit...g DO *ABS* 0000000000000000 LINUX_2.6 LINUX_2.6 0000000000000f30 g DF .text 000000000000002a...LINUX_2.6 __vdso_getcpu 0000000000000f30 w DF .text 000000000000002a LINUX_2.6 getcpu 是一些常用的系统调用函数...假如我们能控制RIP,就通过ROP执行内核函数set_memory_rw()来完成对用户态vdso段属性的更改,然后在用户态对vdso段的gettimeofday()函数代码进行覆盖为我们的shellcode
ROP Emporium 挑战是用来学习 ROP 技术的一系列挑战,本文就对于其中涉及的所有挑战记录一下 wirte up。...下载地址: https://ropemporium.com/ 虽然说简单,但是后面 badchar 后面的 rop 还是学到了不少东西的~ 程序默认开启 nx CANARY : disabled...所以我们需要先"泄露"地址咯,由于栈溢出的缓冲区大小比较少,完成泄露 + 执行完全不够用,所以要跳到 a1 去 ROP,这技术叫 stack pivot,栈翻转,就是让 esp 指向别处,在那 rop
这里以Linux为例: 在第二步的时候,内核会帮用户进程将其上下文保存在该进程的栈上,然后在栈顶填上一个地址rt_sigreturn,这个地址指向一段代码,在这段代码中会调用sigreturn系统调用。...主要利用过程为 先泄露stack的地址 将payload写入到栈中 执行execve系统调用 #coding:utf-8 from pwn import * context(arch='amd64',os='linux
通过checkbadchars函数我们可以发现对输入的字符串进行了过滤,使得我们无法直接写入”/bin/sh\x00” 这里可以对binsh进行异或加密输入,在...
操作系统原理 :找网课看看 CTF中大部分的pwn题都是linux平台上的,那么懂得linux的基本操作也是必不可少的.常用的命令,权限控制,linux的系统调用等…百度和b站找找教程就行了.参考书籍《...鸟哥的Linux私房菜基础篇》(真的是只是参考书籍,太厚了…,遇到了不懂的就翻翻就好了) 懂的上面这些就可以学习基本的二进制漏洞了....工具: IDA pro : 静态分析工具,有本书是专门讲IDA的《IDA pro权威指南》,这个工具很复杂. gdb : 动态调试工具,学会调试是很重要的. pwndbg,peda … :gdb的插件,...github上可以找到. pwntools :python的一个库,主要的用途是跟程序进行交互和方便调试. checksec :linux自带的检查文件开启的保护的工具 ropper,ROPgadget...等等等… CTF中漏洞学习过程: 基本类型: 栈溢出原理 ROP 格式化字符串漏洞原理 格式化字符串漏洞任意读写. 整数溢出 glibc heap的一些利用.
/nx") libc = ELF("/lib/i386-linux-gnu/libc.so.6") puts_plt = elf.plt["puts"] main_addr = elf.symbols[...home/da1sy/Documents/tools/libc-database/db/libc6-i386_2.23-0ubuntu10_amd64.so') libc = ELF('/lib/i386-linux-gnu.../da1sy/Documents/tools/libc-database/db/libc6-i386_2.23-0ubuntu10_amd64.so') #libc = ELF('/lib/i386-linux-gnu...offset_addr) system_addr = offset_addr + libc.symbols['system'] 确定system函数的真实地址后,这时只需要计算出libc中的binsh地址,便可以构造rop.../ret2libc_64') #libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') libc = ELF('../..
我们的目的是通过使用 ROP 技术绕过 DEP 并执行 shellcode,我会把文章重点着重放在 ROP 链的构造上。...先了解一下什么是 ROP? ROP 技术简介 ROP(Return Oriented Programming): 连续调用程序代码本身的内存地址,以逐步地创建一连串欲执行的指令序列。...ROP 技术主要是对抗微软的 DEP 保护机制的。 什么是 DEP?...之后微软引入了 ALSR 技术来对抗 ROP 不过这都是后话了…… 这里我选择 virtualProtect() 构造 ROP 链使 shellcode 所在的内存区域变为可执行。...小结 这篇文章主要向大家展示了 ROP 链的构造。如果大家没有看太懂,不妨通过我写好的 POC,一步一步进行调试,体会 ROP 的精髓。
---- 例题 Rop[简单系统调用] 点击下载-提取码: v3jq 思路 比较容易 参照上面解题步骤即可。 EXP from pwn import * sh = process("..../rop") eax_pop = 0x080bb196 edx_ecx_ebx_pop = 0x0806eb90 sh_pop = 0x080be408 Ret_syscall = 0x08049421
领取专属 10元无门槛券
手把手带您无忧上云