
保护绿
环境我也不知道他当时给的多少的
我反正用的20.04
缺点库
sudo apt-get update #更新一下索引包
sudo apt-get install libgfapi0
然后剩下几个手动下载
具体流程可以参考一下
史上最硬核的Linux依赖问题
大概就是找到网站,手动下载安装包,然后dkpg安装
启动脚本
#!/bin/bash
./qemu-system-x86_64 -initrd ./rootfs.cpio -nographic -kernel ./vmlinuz-5.0.5-generic -L pc-bios/ -append "priority=low console=ttyS0" -device qwb -monitor /dev/null
设备叫qwb

函数并不多
qwb_class_init函数拿到id

realize看到注册了mmio,大小0x100000

整个设备的结构体
mmio_write还是比较简单的

mmio_read
函数比较麻烦
考虑了一下还是放图分析吧
主要是用addr来进行功能的选择
addr 0

addr 1

addr 2

addr 3

addr 4

addr 5

addr 6

addr 7

addr 8

addr 9

addr 10

其他
首先重点放在读上
我们发现
这里read在数组都填满的时候可以越界把后面的内容都带出来
做到越界读。
然后我们把目光看向上面那一堆乱七八糟加密里面
首先我们总结一下加密
就addr为5 6 7 8 的时候对应分别给两个指针赋值
9 10 的时候要创建线程
再次分开分析
aes_encrypt_function

我们发现最后会把校验值贴到output后面
其中v7是我们output的长度
所以这里其实是能造成越界写的。
aes_decrypto_function

同样也有越界写的问题
然后

这个就比较敷衍了
居然其实是一个函数

似乎就是一个异或
好像用处不大
然后看创建线程

一眼就看出来
就是分别调用crypto.decrypt crypto.encrypt两处的函数
所以我们这道题就分析完了
利用方式也应该比较明显了
通过任意读泄露程序基地址
得到system的plt表
劫持output下面那个函数

啊就是encrypt
在input里面写点参数
执行一下就好了
#include <assert.h>
#include <fcntl.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/io.h>
uint32_t mmio_addr = 0xfea00000;
uint32_t mmio_size = 0x100000;
unsigned char* mmio_mem;
void die(const char* msg) {
perror(msg);
exit(-1<

本文详细解析了一个存在于Linux环境中的越界读写漏洞,包括如何利用该漏洞进行程序基地址泄露,并最终实现对目标函数的劫持。
最低0.47元/天 解锁文章
3895

被折叠的 条评论
为什么被折叠?



