首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Ret2syscall学习

    原理 Ret2syscall,即控制程序执行系统调用,获取 shell。...,调用对应的内核函数(系统调用) 系统调用完成相应功能,将返回值存入 EAX,返回到中断处理函数 中断处理函数返回到 API PI 将 EAX 返回给应用程序 应用程序调用系统调用的过程是: 把系统调用的编号存入...拖进32位IDA分析程序,看到有/bin/sh的gadgets,就使用execve 如果程序不存在/bin/sh,就调用read函数将/bin/sh写入bss段,然后在使用execve 然后就开始通过.../rop –only ‘pop|ret’|grep ‘eax’ ? ROPgadget –binary ./rop –only ‘pop|ret’|grep ‘ebx’ ?...调用的过程就是在内存地址读取之后用户输入/bin/sh先找到eax,ebx,ecx,edx以及int 0x80的地址 eax参数为read()函数系统调用号0x3,在edx,ecx,ebx传入相对应的

    1.2K40

    ROP-Ret2csu详解

    利用原理 当在x64环境下函数的参数传递凑不齐类似“pop rdi;ret”/“pop rsi;ret”/“pop rdx;ret”等3个传参的gadgets时,就可以考虑使用_libc_csu_init...rbp置为1,比较结果为非零值,便不会发生跳转,使程序继续执行到ret的位置 jnz     short loc_5555555546F0 这两段代码运行后...,会将栈顶指针移动56字节 所以一般要在后面加上56个字节的数据才可以连接到到ret位置进行跳转 流程示意图 ?...利用思路 当在x64程序找不到rdx、rsi、edi时,再使用此方法 确定gadget1、gadget2的地址及顺序 构造初步ret2csu payload函数 ---- 例题 easy_csu...时 利用_libc_csu_init函数的两个代码片段来实现这三个参数的传递 确定gadget1、gadget2的地址 由于程序vul函数并未执行过,而call函数的用法是跳转到某地址内所保存的地址

    1.7K20

    ROP-Ret2libc详解

    当程序开始运行时会加载系统库的函数,通过函数返回地址直接指向系统库(libc.so.6)的函数,如system函数,从而执行例如system函数获得shell。...控制程序eip指向,为第二次劫持做准备 寻找output函数(如puts和write)和待泄露函数 只能泄露使用了的函数:因为动态链接库的加载机制是lazy原则(got表) libc.so 动态链接库的函数之间相对偏移固定...system(bin/sh) 解题步骤 前骤 使用ldd确认该程序所使用的本地libc库 一般在打本地的程序时,都使用这个库 远程时,先确定泄露出的某函数的真实地址,在利用后三位在libc_database确定所使用的库并下载到本地...gadgets片段 只能找到 pop_rdi_ret 确定该程序所使用的csu_gadgets 使用csu_gadgets泄露write函数地址 def csu(r12,r13,r14,r15,ret_addr... 0x%x",offset_addr) system_addr = offset_addr + libc.symbols['system'] 确定system函数的真实地址后,这时只需要计算出libc

    1.9K40

    ROP-Ret2shellcode详解

    利用原理 ret2shellcode,即控制程序执行 shellcode 代码。一般来说,shellcode 需要我们自己填充。...利用思路 先使用cyclic测试出溢出点,构造初步的payload 确定程序的溢出位,看是否可在bss段传入数据 使用GDB的vmmap查看bss段(一般为用户提交的变量在bss段) 先发送为shellcode...---- 例题 Ret2sec[BSS段写入数据] ida查看源代码发现没有关键函数,随即找到name变量声明在bss段 ? 使用gdb动态调试查看bss段是否有足够权限 ?...Ret2sec_x64[64位版本] 总体与32位步骤相同,只要注意以下几点即可 使用64位shellcode 将返回地址修改为64位的地址 EXP Ret2shellcode_plus IDA分析源代码.../Ret2shellcode_plus') context.log_level = 'debug' bss_addr = 0x0804A048 r.recvuntil("shellcode") r.sendline

    1.1K20

    ROP-Ret2libc学习

    mov eax,DWORD PTR [esp] 1227: c3 ret 这个函数的作用就是把返回地址的值放到 eax 寄存器,也就是把0x11c1...保存到eax,然后再加上 0x2e3f ,最后再加上 0×24 。...利用原理 ​ ret2libc这种攻击方式主要是针对动态链接的编译的程序,因为在正常情况下,程序是找不到system() execve()这种系统函数的(如果有这些系统函数的程序就可以直接控制返回地址指向他们...一般情况下,我们会选择执行 system("/bin/sh"),因此我们通常需要找到 system 函数的地址 ret2libc通常可以分为下面这几类: 程序自身就含有system函数和”/bin.../sh”字符串 程序自身就有system函数,但是没有”/bin/sh”字符串 程序自身就没有system函数和”/bin/sh”字符串,但给出了libc.so文件 程序自身就没有system函数和

    78430

    ROP-Ret2reg详解

    利用原理 Ret2reg,即攻击绕过地址混淆(ASLR),返回到寄存器地址。...一般用于开启ASLR的ret2shellcode题型,在函数执行后,传入的参数在栈传给某寄存器,然而该函数再结束前并为将该寄存器复位,就导致这个寄存器仍还保存着参数,当这个参数是shellcode时,...只要程序存在jmp/call reg代码片段时,即可拼接payload跳转至该寄存器 该攻击方法之所以能成功,是因为函数内部实现时,溢出的缓冲区地址通常会加载到某个寄存器上,在后在的运行过程不会修改...也就是说只要在函数ret之前将相关寄存器复位掉,便可以避免此漏洞。...编译命令: gcc -Wall -g -o ret2reg ret2reg.c -z execstack -m32 -fno-stack-protector 源代码 #include

    1.5K30

    ROP-Ret2syscall详解

    在eax、ebx、ecx、edx带入指定的参数拼接成关键的系统函数,最后在寻找int 0x80的地址,从而执行这些函数....rdi->rsi->rdx->rcx->r8->r9 解题步骤 先使用cyclic测试出溢出点 确定要调用的系统函数 再使用工具RODgatgets查找各寄存器、、所在的地址 然后构造payload依次对该地址传值...) sh.sendline(payload) sh.interactive() Ret2sys[多系统函数调用] 点击下载-提取码:64ff 思路 由于程序并没有/bin/sh这个字符串,如果执行系统调用必须要手动将.../bin/sh写入到程序bss段 构造payload可以使用read函数,在内存地址读取之后用户输入的/bin/sh 先找到eax,ebx,ecx,edx以及int 0x80的地址 对eax,ebx...,ecx,edx填充read函数的参数(在bss段找到一个有权限的地址,带入到ebx) 再次对eax,ebx,ecx,edx填充,这次使用execve函数,执行之前read函数读取的内容所在的地址内的值

    1.4K20

    ROP_Ret2Shellcode-32实例

    ROP_Ret2Shellcode-32实例 一、相关知识 之前我们说过ret2text漏洞是依赖于程序存在执行 system("/bin/sh")的函数,那么如何解决ret2text的局限性 ret2textshellcode...没有执行shell的函数,没有开启NX保护 传入自定义的shellcode ret2libc 开启NX(可写的不可执行) 使用libc函数,leak libc + ROP 什么是shellcode...通常是开启一个shell Linux的系统调用 /usr/include/x86_64-linux-gnu/asm/unistd_32.h 写shellcode就是在eax中放我们的系统调用号,最经常用的就是红框的...(DEP)数据执行保护:可写的不可执行,可执行的不可写 二、实例教学 实例下载:提取码:8189 step1:checksec 检查保护 我们发现没有NX和canary保护 这时我们可以用ret2text...护着ret2shellcode step2:查看是否存在系统函数 -d 显示汇编语句 grep system 查找是否存在system函数,但是这里显然是没有的,所以只能用ret2shellcode

    12010

    ROP-ret2libc基础知识

    ROP-ret2libc基础知识 前提知识准备 Linux延时绑定机制 Linux演示绑定机制的实现 延迟绑定对我们有什么意义 libc函数在哪?...ret2libc使用条件 如何使用libc plt表和got表的关系 整体的跟踪 前提知识准备 Linux延时绑定机制 动态连接的程序调用了libc的库函数,但是libc在运行才被加载到内存,调用libc...在程序执行时才被加载到内存 libc是一定可以执行的,跳转到libc函数绕过NX保护 libc函数在哪?...结尾的代码片段 实现: 设置参数、持续控制的目的 构造执行write(1,buf2,20)之后再返回main函数 如何使用libc 1、绕过NX ret2libc aslr随机化 泄露libc...地址 2、aslr导致ret2libc的技术常常需要配合一个泄露的操作 3、ret2libc = leak libc 地址 + sys(/bin/sh) 简单的说: 1、泄露任意一个函数的真实地址

    14910
    领券