安装依赖:
yum -y group install “development tools”
yum -y install ncurses-devel
下载内核源码后解压,下的慢选国内源:
wget https://mirror.tuna.tsinghua.edu.cn/kernel/v2.6/
tar -zxf linux.2.6.32.22.tar.gz
移动到内核源码目录:
mov linux….. /usr/src/kernels/
进入目录编译
cd /usr/src/kernels/
make menuconfig
make -j4 bzImage
make -j4 modules
make -j4 modules_install
make -j4
make -j4 install
最后一步找不到一些模块可以忽略
复制虚拟机一份,一个debug是被调试的,一个server是调试debug的
两个机器关机状态下添加串行端口,使用通道.\pipe\s ,debug是服务端server是客户端,另一头都是虚拟机,主动放弃cpu勾选上
开机,一个执行cat /dev/ttyS1 另一个 echo 123 &>/dev/ttyS1看看有输出没,没有就换,从ttyS0开始往后试,假设是ttyS1
这时候重启debug,选择编译好的内核按e编辑,在quiet后面加 kgdboc=ttyS1,kgdbwait kgdbwait 然后启动,进入kgdbwait界面
server启动gdb:
gdb /usr/src/kernels/linux.2.6.32/vmlinuz
set remotebaud 115200
target remote /dev/ttyS1
这时如果正常就可以进行调试了,如果不正常,需要重新编译内核,修改 /kernel/kgdb.c下面switch …. case ‘f’:下面if里的error….和case ‘T’:下面相同的一行,重新编译后再次进行调试即可
gdb按c执行后,在debug上以root运行
echo g > /proc/sysrq-trigger
即可中断

Pwn需要

errno:

include <errno.h>

perror(“ASD”);  -> ASD: BAD ADDRESS….

execve():

include <unistd.h>

execve(“/../../../asd”, argv, env);

argv最后要多一个NULL(argv[100]–>argv[101]=NULL)