渗透测试学习—HTB靶机之Base

这是HTB的Starting Point实验室中第九台靶机,主要根据官方提供的writeup来练习,中间穿插一些自己的理解和工具使用扩展。

一、环境配置

  1. 工具准备
    kali linux 2020.1 vmware虚拟机,配置为hostonly模式,共享宿主机网卡上网;
    firefox浏览器(kali linux自带);
    Base靶机IP地址:10.10.10.48;(VIP可用)

  2. 网络连接,按照说明连接到Starting Point实验室。

二、开始渗透
1. 信息收集
使用nmap扫描发现靶机开放了22和80端口。
渗透测试学习—HTB靶机之Base
在浏览器中访问靶机的80端口,出现一个网页,除了LOGIN菜单外其他菜单点击没反应。渗透测试学习—HTB靶机之Base
使用网站目录**工具对网站目录进行枚举,此处使用gobuster。(需要apt安装)
渗透测试学习—HTB靶机之Base
发现了两个感兴趣的目录/login和/_uploaded(可能支持上传文件),点击网页上LOGIN菜单,发现url为10.10.10.48/login/login.php,查看/login目录中的其他内容。
渗透测试学习—HTB靶机之Base
login目录中还有config.php和login.php.swp(使用vim、nano之类的工具编辑文件非正常退出会生成.swp文件),config.php暂时不知用途,从名称看应该是配置类文件。
点击下载login.php.swp文件到本地,该文件无法直接使用文本工具查看,可以使用strings命令查看。
渗透测试学习—HTB靶机之Base
在最后会看到如下内容,这段代码根据存储在config.php中的变量来检查用户输入的用户名/密码组合,以查看它们是否匹配。
渗透测试学习—HTB靶机之Base
其中以下代码使用strcmp字符串匹配函数来检查用户名和密码,这是不安全的,可以轻松地绕开。 因为如果给strcmp一个空数组与存储的密码进行比较,它将返回null。 在PHP中,==运算符仅检查变量的值是否相等,而NULL的值等于0。编写此值的正确方法是使用===运算符,该运算符同时检查值和类型。
渗透测试学习—HTB靶机之Base
2. 获取用户shell
设置浏览器代理,启用burpsuite拦截页面登录请求,并修改为username和password参数数组类型,并发送请求到靶机。
渗透测试学习—HTB靶机之Base
请求成功发送后浏览器跳转到了upload.php页面,出现了上传文件的页面。渗透测试学习—HTB靶机之Base
到这里可以使用之前靶机中使用过的方法了,修改IP地址后上传用于建立反向连接的php文件,kali linux中启动netcat监听,访问上传的文件,kali linux中收到webshell。渗透测试学习—HTB靶机之Base
修改端口
渗透测试学习—HTB靶机之Base
kali linux中启动监听
渗透测试学习—HTB靶机之Base
上传rev.php文件到靶机目录中。渗透测试学习—HTB靶机之Base
浏览器中访问上传的文件。
渗透测试学习—HTB靶机之Base
kali linux中收到反向连接,获取了webshell。渗透测试学习—HTB靶机之Base
有了webshell中在系统中枚举发现存在一个john用户,该用户家目录中有user.txt文件,但此shell无访问权限,渗透测试学习—HTB靶机之Base
前面查看/login目录中有一个config.php文件,此时可以查看它的内容。渗透测试学习—HTB靶机之Base
发现了一组用户名和密码。靶机开启了22端口,可以使用此密码尝试登录john用户。
渗透测试学习—HTB靶机之Base
登录成功,获取了john用户家目录中的user.txt文件内容。
也可以在当前webshell中使用python -c 'import pty; pty.spawn("/bin/bash")'命令获取bash然后su到john用户。
3. 权限提升
获得了用户shell之后,要想办法提升权限到root用户以获取root.txt。渗透测试学习—HTB靶机之Base
查看当前用户id和sudo权限后发现,用户具有以root用户身份执行find命令的权限。而find命令的-exec参数是可以使用root身份运行bash的。渗透测试学习—HTB靶机之Base
执行find命令后获得了root用户的shell,并获取了root.txt中的flag。