io uring学习
基本结构io_uring 结构为两个单向环形队列,分为 Submission Queue (SQ) 和 Completion Queue (CQ) : 内核中使用 io_uring 结构体来保存单个环形队列的 head 和 tail, head 用于出列,tail 用于入列。 1234struct io_uring { u32 head; u32 tail;}; io_uring_sqe 结构体用于表示提交的请求 (Submission Queue Entry)。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192/* * IO submission data structure (Submission Queue Entry) */struct...
CorCTF2022 Cache-of-Castaways学习
Cross Cache overflow 和 Page-Level Heap Fengshui的例题。参考a3大佬的博客 : -) 保护机制提供了KCONFIG,并且从启动脚本中可以查看到开启了KPTI, SMEP, SMAP保护。 通过KCONFIG查看常见保护开启情况如下: 1234CONFIG_MEMCG_KMEM=yCONFIG_RANDOMIZE_BASE=y # KASLRCONFIG_SLAB_FREELIST_RANDOM=yCONFIG_SLAB_FREELIST_HARDENED=y 题目分析题目在注册设备时创建了kmem_cache,flag为0xDC0,即SLAB_ACCOUNT | SLAB_PANIC,同时开启了CONFIG_MEMCG_KMEM=y,因此申请的kmem_cache为独立的,通过kmem_cache_alloc申请的flag为GFP_KERNEL | __GFP_ZERO。 1234567891011121314151617__int64 init_module(){ castaway_dev = 255; ...
D^3CTF 2023 - d3kcache学习
学习 Page-Level 堆风水,学习a3大佬的文章 : -) 保护机制查看 run.sh 脚本内容,发现开启 smep, smap, kpti, kaslr 。 12345678910111213#!/bin/bashqemu-system-x86_64 \ -m 256M \ -cpu kvm64,+smep,+smap \ -smp cores=2,threads=2 \ -kernel bzImage \ -hda ./rootfs.img \ -nographic \ -monitor /dev/null \ -snapshot \ -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init kaslr pti=on quiet oops=panic panic=1" \ -no-reboot \ -s 查看 config...
InCTF Kqueue学习
堆溢出例题,参考a3大佬的博客来学习 : -) 保护机制查看启动脚本,开启了KASLR,关闭了KPTI,可以利用ret2usr进行利用。 123456789101112#!/bin/bashexec qemu-system-x86_64 \ -cpu kvm64 \ -m 512 \ -nographic \ -kernel "bzImage" \ -append "console=ttyS0 panic=-1 pti=off kaslr quiet" \ -monitor /dev/null \ -initrd "./rootfs.cpio" \ -net user \ -net nic 源码分析提供了kqueue.c源码,定义了kqueue设备,ops只定义了ioctl操作。该操作为一个堆菜单,包括增删改查等操作。 用户传入的结构体定义如下: 1234567typedef struct{ uint32_t max_entries; //...
MirChecker工具使用
该工具是一个用于 rust 内存错误检查的工具,主要是静态分析的方法。跟着 workflow 来就行 : -) 12345678910apt install build-essentialapt-get install m4# fix for unable to find library -lLLVM-11-rust-1.51.0-nightlyrustup toolchain uninstall nightly-2020-12-29-x86_64-unknown-linux-gnurustup toolchain install nightly-2020-12-29 --forcerustup component add rustc-dev llvm-tools-previewcargo cleancargo build --verbose# need to specify lib's pathexport...
HKVS获取固件
一个项目设备,记录下获取到固件的过程。 尝试1:串口提取(失败)首先通过USB2TTL拿到了U-Boot shell。命令里没有md等命令,尝试通过设置bootargs环境变量方式来。 尝试2:mtd 挂载(失败)还考虑使用 mtd 挂载的方式来读取,不过经过尝试,该方法仅适用于 ubi.img 没有错误的情况,否则会在 ubi attach 的时候报错。对应的 flash 芯片为 GD5F2GQ5UExxG,对应文档链接:https://download.gigadevice.com/Datasheet/DS-00890-GD5F2GQ5UExxG-Rev1.6.pdf可以看到比较重要的数据: 12345# 这四位是 read ID 返回的四个字节Manufacturer ID: 0xC8Device ID: 0x52Byte2 Byte value: noneByte3 Byte value: none 提取到的 bin 文件差不多为 256MB ,共有 2k 个块进行挂载不太行,首先是没有对应的 mtd simulated...
GreenHouse论文复现
考虑复现一下该工作 环境 Ubuntu 20.04 docker Docker环境使用清华源安装docker即可设置docker build时的代理: 1docker build -t greenhouse --network host . 修改Dockerfile内容: 1234567FROM m.daocloud.io/docker.io/library/ubuntu:20.04ENV ALL_PROXY="http://127.0.0.1:7890"...# 注释掉该行,因为仓库里没有该文件# COPY ubuntu.tar /ubuntu.tar... Docker Build进行编译,发现卡死在选择时区界面: Dockerfile开头添加以下内容: 12345RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ && apt-get install -y tzdata \ && ln -fs...
GreenHouse论文笔记
论文概述论文题目:Greenhouse: Single-Service Rehosting of Linux-Based Firmware Binaries in User-Space...
V8 数据结构
记录下V8的数据结构。 ArrayBuffer用于表示通用的原始二进制数据缓冲区。其为字节数组(bytearray)。不能直接操作ArrayBuffer内容,而是要通过类型化数组对象或DataView对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区内容。 创建ArrayBuffer123// 创建8字节缓冲区,并使用Int32Array视图引用const buffer = new ArrayBuffer(8);const view = new Int32Array(buffer); 操作ArrayBuffer要操作ArrayBuffer内容,需要使用视图对象。视图对象不存储任何数据,它只是对ArrayBuffer中字节的解释。例如Uint8Array将每个字节视为独立的数字。 123456let buffer = new ArrayBuffer(16);let view = new Uint32Array(buffer);view[0] = 123456;for(let num of view) { console.log(num);...
Client V8学习
V8 V8-ignition指令 V8内存回收机制 Code-caching V8 Hole V8指针压缩 V8 数据结构
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)