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 ...
随机推荐
- liunx相关指令
修改网卡命名规范 a 如何进入到救援模式 修改网卡 1.修改配置文件名称 /etc/sysconfig/network-scripts/ 名称为:ifcfg-xxx 2.修改配置文件内的 dev ...
- 转 ZFC公理系统
http://blog.sina.com.cn/s/blog_5d045b5c0100spld.html 首先,ZFC集合论中的公理大致分为3组: 1.外延公理. 2.子集公理模式.无序对公理.并集公 ...
- Vue的Computed的使用
Vue的Computed的使用 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 【树】Sum Root to Leaf Numbers
题目: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a nu ...
- 《LeetBook》leetcode题解(15):3Sum[M]
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- 最全面的 Android 编码规范指南
最全面的 Android 编码规范指南 本文word文档下载地址:http://pan.baidu.com/s/1bXT75O 1. 前言 这份文档参考了 Google Java 编程风格规范和 Go ...
- Fiddler 502问题
使用Fiddler的时候遇到下面这个问题:在地址栏想打开个一般处理程序,出现连接本机失败的提示,如下图: 而这在我没打开Fiddler的时候是显示正常的. 查看Fiddler,在嗅探 -> 第二 ...
- springboot-18-springboot的参数封装
springboot的参数封装, 和springmvc相识 简单参数的封装 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * ...
- ThreadPool线程池的关注点
public class TestThreadPool { //线程池维护线程的最少数量 private static final int COREPOOLSIZE = 2; //线程池维护线程的最大 ...
- 高云的jQuery源码分析笔记
(function( window, undefined ) { // 构造jQuery对象 var jQuery = function( selector, context ) { return n ...