环境准备
题目链接
https://github.com/eternalsakura/ctf_pwn/blob/master/%E5%BC%BA%E7%BD%91%E6%9D%AF2018/core_give.tar
调试环境
ubuntu14.04
| 1 | sakura@ubuntu:~$ uname -a | 
gdb 7.7.1
| 1 | sakura@ubuntu:~$ gdb -v | 
下载qemu
| 1 | sudo apt-get install qemu qemu-system | 
打开虚拟化
这个在cpu那里
vm版本:
pd版本:
start.sh
本来这样应该就可以了,不过有几个坑点我还是要说一下。
- -m megs         set virtual RAM size to megs MB [default=128]
 原先shell里指定的是64M,这样会GG,起码改成128M,觉得不够还可以加。
- -kernel bzImage use ‘bzImage’ as kernel image
 指定kernel image
- -initrd file    use ‘file’ as initial ram disk
 要运行不能只有内核,这里是相当于指定一个硬盘(使用软件将RAM模拟当做硬盘来使用)
 cpio是一种文件系统,后面解包就看懂了。
- -append cmdline use ‘cmdline’ as kernel command line
 没什么好说的,调试的时候可以关了kaslr,指定no kaslr
- -s              shorthand for -gdb tcp::1234
 这东西坑了我很久,意思是-gdb tcp::1234这个命令的缩写,所以你在后面再指定gdb,或者进了monitor(这种方法参考muhe师傅的文章,也就是启动时按ctrl+alt+2,反正mac的虚拟机里没法按……我就不这样了)再运行gdbserver都会报 Duplicate ID ‘gdb’ for chardev。

这样运行shell应该就可以了。


关闭定时power down
类似alarm,如图,直接自己就结束了。
要改掉这个,也是删掉一个配置就行了,不过这个要在init里改了,如图,就是这句,删掉就好了
而我们知道实际上这个硬盘是那个cpio文件,所以要删除这句话的话,首先需要解包cpio,删了这句话,然后重新打包。
| 1 | sakura@ubuntu:~/Desktop/give_to_player$ ls | 
解释一下,上面这些log里最重要的就是cpio的解包和打包。
- 解包的坑点是cpio文件应该这么解压,先用gunzip,再用cpio -idmv,但是gunzip认后缀不认文件格式,所以我们要先重命名为core.cpio.gz,再cpio -idmv提取。1 
 2gunzip 文件名.cpio.gz 
 cpio -idmv < 文件名.cpio
- 打包这个……师傅告诉我里面的gen_cpio.sh就是打包的shell,$1是我们输入的参数,也就是要输出的文件名。
 比如./gen_cpio.sh core.cpio就代表打包后输出的文件名为core.cpio。可以看到这样就删掉了,就不会2分钟后自动终止了。1 
 2
 3
 4/ $ cat gen_cpio.sh 
 find . -print0 \
 | cpio --null -ov --format=newc \
 | gzip -9 > $1 
其他
这样我们的搭建就完成了,看上去不复杂,我还是踩坑踩了一晚上,不过这样qemu+gdb调试kernel其实也会了(我后面应该会写怎么搭建)
感谢师傅们指导了QVQ。