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 123412. 浏览器访问上传的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=xterm14.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 lscd到网站的目录/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 catrobert 拥有/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不了文件内容......
需要用绝对路径执行命令