HackTheBox-Oopsie

Hackthebox-Oopsie

目标IP:10.10.10.28

本机IP:10.10.16.38

信息收集

nmap

nmap-Oopsie

通过nmap信息搜集可以发现目标开放了22和80端口,既然开放了WEB服务,直接访问看看网站的功能和可能存在问题的点。

网站按钮全部无效,页面底部有邮箱 admin@megacorp.com可能有用。

其中有处内容存在提示

tips-Oopsite

翻译过来为:我们提供服务来操作生产数据,如报价、客户请求等。请登录以获取服务。

Burpsuite

通过Burpsuite截包,我们在网站地图中找到了可能的登录路径

login-Oopsite

直接访问http://10.10.10.28/cdn-cgi/login/进入登录界面

backlogin-Oopsite

尝试登录,用户名admin或者administrator

密码弱口令爆破无果,看了下官方WP,密码为上一台靶机Archetype的管理员密码MEGACORP_4dm1n!!,登录成功。

越权

简单看了一下功能,其中Uploads页面提示需要超级管理员权限。

那么接下来就是如何获取超级管理员权限看能否进行文件上传。

其中Account页面可以看到当前用户信息

account-Oopsite

再看Burpsuite中当前页面的请求包

request-Oopsite

GET参数content用来进行功能页面的跳转,id参数作用不明

Cookieuserrole分别对应Access IDName

两个方向猜测:1.是否存在sql注入 2.是否存在越权漏洞

经过简单的测试发现sql注入行不通,尝试对id进行爆破。Payload可以用Intruder模块自带的numbers

superadmin-Oopsite

结果中看到有几个id请求的响应包长度不同,其中id=30的响应包中发现了super admin

字样,对应的Access ID86575,直接在URL中修改id=30访问Account页面发现确实是超级管理员账号。

回到Uploads页面抓包,修改Cookie中的user值为86575发回数据包,可以上传文件了

文件上传反弹shell

uploads-Oopsite

文件上传shell文件(注意抓包修改user值为超级管理员),文件上传成功但是不知道上传目录,用目录扫描工具扫一下试试

uploadshell-Oopsite

发现uploads路径,nc监听2333端口,curl请求test.php反弹shell

1
2
nc -lvvp 2333 //shell中写的1234端口
curl http://10.10.10.28/uploads/test.php

shell-Oopsite

查看各种目录文件,在/var/www/html/cdn-cgi/login中发现了db.php文件

获取内容得到本地用户robert的账号密码

dbphp-Oopsite

尝试用su xxxx切换用户,报错:su: must be run from a terminal

反弹的shell是个非交互式shell,非交互式shell会有很多问题,比如:

  • 无法用vim等文本编辑器
  • 不能用tab补全指令
  • 不能su
  • 不能向上使用历史

知识点 交互式和非交互式

交互式模式:就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。

非交互式模式:以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

网上反弹shell升级交互式用的都是python,但是目标机子上没有python环境,然后去问了树哥,树哥说用script /dev/null,惊了居然su可行了!!

但是这个shell不是交互式的shell,算是个半交互式,不如交互式方便但也凑合

知识点 script命令 和 /dev/null

script命令

scirpt就是一个命令,可以制作一份记录输出到终端的记录

/dev/null

/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”

用途

1.丢弃标准输出

2.丢弃标准错误输出

nullpython-Oopsite

userflag-Oopsite

得到user的flag

提权

利用Linux id命令发现robert所在组为bugtracker

id-Oopsite

1
2
find / -type f -g bugtracker 2>/dev/null #Linuxfind命令 -type 设置查找类型为文件 -g 设置组为bugtracker 2>/dev/null 将错误输出到/dev/null 2为Linux文件描述符(错误输出)
ls -al /usr/bin/bugtracker Linux ls基本命令参数不多赘述

其中有个s权限,当一个可执行程序具有SetUID权限,用户执行这个程序时,将以这个程序所有者的身份执行。前提是这个文件是可执行文件,可就是具有x权限(属组必须先设置相应的x权限)

执行/usr/bin/bugtracker

bug1-Oopsite

文件作用是 用户输入一个BUG ID输出BUG报告

strings命令查看/usr/bin/bugtracker的执行过程

bug2-Oopsite

如箭头所指,文件执行过程中调用了cat命令输出/root/reports/目录下的BUG报告

由于s权限,robert用户本来无权读取/root/reports/,现在可以了

我们可以构造一个恶意的cat命令来提权root

1
2
3
4
export PATH=/tmp:$PATH //设置环境变量到/tmp linux下的tmp目录是一个系统产生临时文件的存放目录,同时每个用户都可以对他进行读写操作
cd /tmp/ //切换到/tmp目录下
echo '/bin/sh' > cat
chmod +x cat //赋予执行权限

此时,再次执行/usr/bin/bugtracker将会调用/tmp目录下的恶意cat命令,此时我们再次输入任意BUG ID就可以用root权限执行命令了

注意没有变成root用户

root-Oopsite

rootflag-Oopsite

得到root的flag

end

小结

总的看下来这台靶机其实不算特别难,终究是自己的知识面太狭隘

参考链接

https://blog.csdn.net/gui951753/article/details/79154496

https://www.cnblogs.com/aaak/p/14067593.html

https://www.linuxprobe.com/shell-dev-null.html