前言

本帖记录一些常用的,效果好的 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

MIPS rop gadgets记录贴&&持续更新的更多相关文章

  1. OpenFlow1.3.3 学习记录(持续更新)

    OpenFlow1.3.3 学习记录(持续更新) 正在学习OpenFlow1.3,该篇笔记将日常更新,主要内容大致为官方文档的总结与翻译. 交换机组件 按照优先级顺序进行包匹配,如果匹配到流表项,则执 ...

  2. .NET6中一些常用组件的配置及使用记录,持续更新中。。。

    NET6App 介绍 .NET 6的CoreApp框架,用来学习.NET6的一些变动和新特性,使用EFCore,等一系列组件的运用,每个用单独的文档篇章记录,持续更新文档哦. 如果对您有帮助,点击右上 ...

  3. Atom使用记录(持续更新中)

    部分内容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持续更新中 Atom安装插件在窗口中File---Setting---install 在里面进 ...

  4. oracle数据库学习记录(持续更新中...)

    --------------------------------------------day1------------------------------------------------- 1. ...

  5. Laravel 5 使用中的问题记录(持续更新)

    1.更新了blade模板却没有更新缓存 通过使用ftp上传文件到服务器,更新了blade模板,却没有更新缓存,经查,原因是系统时间的影响,通过ftp上传的模板文件修改时间与缓存文件的时间不一致,导致模 ...

  6. Ubuntu系统使用记录(持续更新)

    本篇文章记录在虚拟机上跑Ubuntu16.04遇到的一系列问题,熟悉一下Ubuntu的相关操作,进入终端的方法ctrl+alt+t. 1.修改屏幕分辨率,进入系统默认的是800x600 即便能够进入s ...

  7. C++ 编程技巧笔记记录(持续更新)

    C++是博大精深的语言,特性复杂得跟北京二环一样,继承乱得跟乱伦似的. 不过它仍然是我最熟悉且必须用在游戏开发上的语言,这篇文章用于挑选出一些个人觉得重要的条款/经验/技巧进行记录总结. 文章最后列出 ...

  8. leetcode 刷题记录(java)-持续更新

    最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...

  9. css高级应用及问题记录(持续更新)

    css 参考手册: 1.http://css.doyoe.com/ 1.混合选择器样式定义: .button.icon:before {    content: "";    po ...

随机推荐

  1. java命令行编译和运行引用jar包的文件

    经常遇到需要添加第三方jar文件的情况.在命令行状态下要加载外部的jar文件非常麻烦,很不好搞,在网上折腾了很久终于搞定了,在这里做个笔记: 2.运行:java -Djava.ext.dirs=./l ...

  2. oracle_jdbc_Query

    本例子程序是根据马士兵老师所讲+自己的注释.写的比较全面,特别是最后释放资源的代码. package com.ayang.jdbc; import java.sql.*; public class T ...

  3. Tomcat性能调优-让小猫飞奔

    一.总结前一天的学习 从“第三天”的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü   吞吐量 ü   Responsetime ü   Cpuload ü   MemoryUsa ...

  4. Dubbo-Centos7管控台安装

    1.下载Tomcat7: $ wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0. ...

  5. Oracle 中分组排序取值的问题

    整理一下排序: 建表语句:create table EXAM(  name    VARCHAR2(32),  subject VARCHAR2(32),  score   INTEGER)数据:IN ...

  6. 关于offsetTop的误解

    一直以为offset是子元素相对于父元素的距离,后来用了才知道是一个坑,只存在于定位元素中 在做li的搜索的定位的时候,为了得到li相对于ul的距离,本来也可以用li的高度相乘,但是用了offsetT ...

  7. Python函数中的可变参数

    在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...

  8. CFLAGS CPPFLAGS CPPFLAGS 区别

    CPPFLAGSC预处理器参数.( C 和 Fortran 编译器也会用到). CXXFLAGSC++语言编译器参数. CFLAGSC语言编译器参数.

  9. 面试题27:单链表向右旋转k个节点

    Given a list, rotate the list to the right by kplaces, where k is non-negative. For example:Given1-& ...

  10. Leetcode 762. Prime Number of Set Bits in Binary Representation

    思路:动态规划.注意1024*1024>10^6,所以质素范围是(0,23). class Solution { public int countPrimeSetBits(int L, int ...