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
MIPS rop gadgets记录贴&&持续更新的更多相关文章
- OpenFlow1.3.3 学习记录(持续更新)
OpenFlow1.3.3 学习记录(持续更新) 正在学习OpenFlow1.3,该篇笔记将日常更新,主要内容大致为官方文档的总结与翻译. 交换机组件 按照优先级顺序进行包匹配,如果匹配到流表项,则执 ...
- .NET6中一些常用组件的配置及使用记录,持续更新中。。。
NET6App 介绍 .NET 6的CoreApp框架,用来学习.NET6的一些变动和新特性,使用EFCore,等一系列组件的运用,每个用单独的文档篇章记录,持续更新文档哦. 如果对您有帮助,点击右上 ...
- Atom使用记录(持续更新中)
部分内容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持续更新中 Atom安装插件在窗口中File---Setting---install 在里面进 ...
- oracle数据库学习记录(持续更新中...)
--------------------------------------------day1------------------------------------------------- 1. ...
- Laravel 5 使用中的问题记录(持续更新)
1.更新了blade模板却没有更新缓存 通过使用ftp上传文件到服务器,更新了blade模板,却没有更新缓存,经查,原因是系统时间的影响,通过ftp上传的模板文件修改时间与缓存文件的时间不一致,导致模 ...
- Ubuntu系统使用记录(持续更新)
本篇文章记录在虚拟机上跑Ubuntu16.04遇到的一系列问题,熟悉一下Ubuntu的相关操作,进入终端的方法ctrl+alt+t. 1.修改屏幕分辨率,进入系统默认的是800x600 即便能够进入s ...
- C++ 编程技巧笔记记录(持续更新)
C++是博大精深的语言,特性复杂得跟北京二环一样,继承乱得跟乱伦似的. 不过它仍然是我最熟悉且必须用在游戏开发上的语言,这篇文章用于挑选出一些个人觉得重要的条款/经验/技巧进行记录总结. 文章最后列出 ...
- leetcode 刷题记录(java)-持续更新
最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...
- css高级应用及问题记录(持续更新)
css 参考手册: 1.http://css.doyoe.com/ 1.混合选择器样式定义: .button.icon:before { content: ""; po ...
随机推荐
- java命令行编译和运行引用jar包的文件
经常遇到需要添加第三方jar文件的情况.在命令行状态下要加载外部的jar文件非常麻烦,很不好搞,在网上折腾了很久终于搞定了,在这里做个笔记: 2.运行:java -Djava.ext.dirs=./l ...
- oracle_jdbc_Query
本例子程序是根据马士兵老师所讲+自己的注释.写的比较全面,特别是最后释放资源的代码. package com.ayang.jdbc; import java.sql.*; public class T ...
- Tomcat性能调优-让小猫飞奔
一.总结前一天的学习 从“第三天”的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: ü 吞吐量 ü Responsetime ü Cpuload ü MemoryUsa ...
- Dubbo-Centos7管控台安装
1.下载Tomcat7: $ wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0. ...
- Oracle 中分组排序取值的问题
整理一下排序: 建表语句:create table EXAM( name VARCHAR2(32), subject VARCHAR2(32), score INTEGER)数据:IN ...
- 关于offsetTop的误解
一直以为offset是子元素相对于父元素的距离,后来用了才知道是一个坑,只存在于定位元素中 在做li的搜索的定位的时候,为了得到li相对于ul的距离,本来也可以用li的高度相乘,但是用了offsetT ...
- Python函数中的可变参数
在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...
- CFLAGS CPPFLAGS CPPFLAGS 区别
CPPFLAGSC预处理器参数.( C 和 Fortran 编译器也会用到). CXXFLAGSC++语言编译器参数. CFLAGSC语言编译器参数.
- 面试题27:单链表向右旋转k个节点
Given a list, rotate the list to the right by kplaces, where k is non-negative. For example:Given1-& ...
- Leetcode 762. Prime Number of Set Bits in Binary Representation
思路:动态规划.注意1024*1024>10^6,所以质素范围是(0,23). class Solution { public int countPrimeSetBits(int L, int ...