qemu pwn基础知识

[TOC]

常用指令

lspci 
ls /sys/devices/pci0000\:00/0000\:00\:04.0/
-monitor telnet:127.0.0.1:4444,server,nowait 后 nc 127.0.0.1 4444可以info pci看的更清楚,这个技巧仅限于qemu,发现内核不好使

qemu到底在pwn什么

  • 主要是pwn qemu这个elf文件本身,说是虚拟机但是更像用软件实现虚拟化,qemu文件中有各种各样的函数可以使用,因此泄露之后如何有任意函数执行那么就可以拿到shell
  • 远程一般要反弹shell
  • 主要是把exp复制到.cpio这个压缩包中,这样就可以在qemu中运行我们所写的攻击脚本
mkdir exp
cp ./initramfs-busybox-x64.cpio.gz ./exp/
cd exp
gunzip ./initramfs-busybox-x64.cpio.gz 
cpio -idmv < ./initramfs-busybox-x64.cpio

mkdir root
cp ../exp.c ./root/
gcc ./root/exp.c -o ./root/exp -static 
find . | cpio -o --format=newc > initramfs-busybox-x64.cpio
gzip initramfs-busybox-x64.cpio
cp initramfs-busybox-x64.cpio.gz ..

有关调试

  • 主要有两种调试方法
  1. 直接gdb qemu这个文件,然后set args设置启动参数
  2. 运行./launch.sh,然后ps -ef | grep qemu,通过gdb -p 进程号就可以连上进行调试了
  • 发现想打exp里面的断点很困难,那就把断点打在qemu这个文件中,比如b fastcp_mmio_write,然后c就行了

基础知识

地址转化

  • 这一点还是比较重要的,只有地址正确才能正确的执行相应的函数

PCI 设备地址空间

  • 主要就是MMIO和PMIO,目前只pwn过MMIO的

主要漏洞

  • 一般的漏洞都是读写的错误,特别是写的越界,因此注意检查size的限制很重要