zoukankan      html  css  js  c++  java
  • MIPS rop gadgets记录贴&&持续更新

    前言

    本帖记录一些常用的,效果好的 rop gadgets.

    uClibc

    从栈中设置$t9 并跳到 $t9 的gadgets , __thread_start 函数第二行

    使用 案例

    使用tips:

    • 调用函数时,进入函数内部时要求 $t9 指向函数的起始地址。
    lw      $t9, arg_0($sp)
    jalr    $t9
    
    

    四个组合使用,调用栈中 shellcode 的 rop_gadget , 需要可以控制 $s1,

    详细分析在这里

    rop_gadget 1, 设置 参数一 为 1,位于 __uClibc_main ,可以使用 mipsrop.find("li $a0, 1") 查找

    	LOAD:00055C60                 li      $a0, 1
    	LOAD:00055C64                 move    $t9, $s1
    	LOAD:00055C68                 jalr    $t9 ; sub_55960
    	LOAD:00055C5C                 lui     $s0, 2
    

    rop_gadget 2,从栈中设置寄存器,使用 mipsrop.tail() 查找

    	LOAD:0001E20C                 move    $t9, $s1
    	LOAD:0001E210                 lw      $ra, 0x28+var_4($sp)
    	LOAD:0001E214                 lw      $s2, 0x28+var_8($sp)
    	LOAD:0001E218                 lw      $s1, 0x28+var_C($sp)
    	LOAD:0001E21C                 lw      $s0, 0x28+var_10($sp)
    	LOAD:0001E220                 jr      $t9
    	LOAD:0001E224                 addiu   $sp, 0x28
    
    

    rop_gadget 3,获取栈地址,使用 mipsrop.stackfinder() 查找

    	LOAD:000164C0                 addiu   $s2, $sp, 0x198+var_180
    	LOAD:000164C4                 move    $a2, $v1
    	LOAD:000164C8                 move    $t9, $s0
    	LOAD:000164CC                 jalr    $t9 ; mempcpy
    	LOAD:000164D0                 move    $a0, $s2
    
    

    rop_gadget 4,通过 $t9, 跳转到 $s2,使用 mipsrop.find("move $t9, $s2") 查找, 位于 readdir

    	LOAD:000118A4                 move    $t9, $s2
    	LOAD:000118A8                 jalr    $t9
    

    从栈中取数据到寄存器, opendir 函数尾部

    .text:0000AA6C                 lw      $ra, 0xC0+var_4($sp)
    .text:0000AA70                 lw      $s2, 0xC0+var_8($sp)
    .text:0000AA74                 lw      $s1, 0xC0+var_C($sp)
    .text:0000AA78                 lw      $s0, 0xC0+var_10($sp)
    .text:0000AA7C                 jr      $ra
    .text:0000AA80                 addiu   $sp, 0xC0
    .text:0000AA80  # End of function opendir
    

    从栈中设置基本上所有的重要寄存器,位于 scandir 或者 scandir64尾部

    LOAD:00011BB0                 lw      $ra, 0x40+var_4($sp)
    LOAD:00011BB4                 lw      $fp, 0x40+var_8($sp)
    LOAD:00011BB8                 lw      $s7, 0x40+var_C($sp)
    LOAD:00011BBC                 lw      $s6, 0x40+var_10($sp)
    LOAD:00011BC0                 lw      $s5, 0x40+var_14($sp)
    LOAD:00011BC4                 lw      $s4, 0x40+var_18($sp)
    LOAD:00011BC8                 lw      $s3, 0x40+var_1C($sp)
    LOAD:00011BCC                 lw      $s2, 0x40+var_20($sp)
    LOAD:00011BD0                 lw      $s1, 0x40+var_24($sp)
    LOAD:00011BD4                 lw      $s0, 0x40+var_28($sp)
    LOAD:00011BD8                 jr      $ra
    LOAD:00011BDC                 addiu   $sp, 0x40
    LOAD:00011BDC  # End of function scandir
    
  • 相关阅读:
    HIVE 技巧积累之合并重叠日期
    记一次hive版本升级
    【转】elasticsearch中字段类型默认显示{ "foo": { "type": "text", "fields": { "keyword": {"type": "keyword", "ignore_above": 256} }
    【转】深入理解Linux修改hostname
    VMware中 CentOS7挂载windows共享文件夹
    Apache版hadoop编译
    No route info of this topic
    java遍历文件夹及所有子文件
    关闭spring整合kafka时,消费者一直打印kafka日志
    (转)详解shell中>/dev/null 2>&1到底是什么
  • 原文地址:https://www.cnblogs.com/hac425/p/9416864.html
Copyright © 2011-2022 走看看