环境准备
题目链接
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。