
靶机启动后,直接获得IP地址,192.168.56.249。

对靶机进行全端口扫描、服务扫描、版本扫描,发现21/FTP、25022/SSH、33414/TCP、40080/HTTP。

靶机故障,重启后IP地址变为,192.168.51.249。
访问33414/TCP服务,根据响应内容判断是HTTP服务,但需要正确的目录或页面才能访问。

扫描33414/HTTP的目录和页面,发现/help目录和/info目录。

访问/help目录,发现文件上传接口/upload-file、目录浏览接口/file-list。

根据接口说明,使用POST请求文件上传接口/upload-file,响应400报错,BAD REQUEST,缺少file部分,需要自行构造。

靶机故障,重启后IP地址变为,192.168.55.249。
准备webshell文件,并使用curl命令上传,仍然响应400报错,但这次是缺少filename部分。


增加filename部分,仍然响应400报错,这次是没通过文件类型白名单的安全检查。


将file部分的文件名称后缀改为白名单中的txt,就可以上传成功,而最终保存到服务器中的文件名称却是filename部分的shell-2.php,看来安全检查漏掉了这里,可以绕过上传webshell。



只可惜webshell被上传到了服务器的/tmp/目录。上传时在filename部分添加到web根目录的文件路径,看是否存在路径穿越漏洞。
结果响应500报错,INTERNAL SERVER ERROR,看来存在路径穿越漏洞,只是web根目录没有写入权限。


想必上传恶意的passwd文件到/etc/目录,也是没有写入权限。疯狂翻垃圾,发现存在/home/alfredo/.ssh/目录,既然都能读取了,试试有没权限写入authorized_keys文件,竟然成功。





使用私钥文件连接25022/SSH服务,获得alfredo用户权限。

root用户存在计划任务,每分钟会执行一次/usr/local/bin/backup-flask.sh脚本。

当前alfredo用户具有/usr/local/bin/backup-flask.sh脚本的查看权限。查看脚本内容,发现是将/home/alfredo/restapi/目录设为环境变量后,使用tar命令打包压缩/home/alfredo/restapi/目录。

在/home/alfredo/restapi/目录中创建tar命令,以利用环境变量劫持tar命令。由于网络原因无法反弹shell,那就往tar命令中写入“将alfredo用户的authorized_keys文件拷贝给root用户“的命令来提权。

使用私钥文件连接25022/SSH服务,获得root用户权限。

本文分享自 OneMoreThink 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!