欢迎提出宝贵建议、欢迎分享文章、欢迎关注公众号 OneMoreThink 。
目录
1. 侦查
1.1 收集目标网络信息:IP地址
1.2 主动扫描:扫描IP地址段
1.3 主动扫描:字典扫描
2. 初始访问
2.1 利用面向公众的应用
3. 权限提升
3.1 计划任务/作业:Cron
靶场地址:https://portal.offsec.com/labs/play
1. 侦查
1.1 收集目标网络信息:IP地址
靶机启动后,直接获得IP地址,192.168.56.249。
1.2 主动扫描:扫描IP地址段
对靶机进行全端口扫描、服务扫描、版本扫描,发现21/FTP、25022/SSH、33414/TCP、40080/HTTP。
1.3 主动扫描:字典扫描
靶机故障,重启后IP地址变为,192.168.51.249。
访问33414/TCP服务,根据响应内容判断是HTTP服务,但需要正确的目录或页面才能访问。
扫描33414/HTTP的目录和页面,发现/help目录和/info目录。
访问/help目录,发现文件上传接口/upload-file、目录浏览接口/file-list。
2. 初始访问
2.1 利用面向公众的应用
根据接口说明,使用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用户权限。
3. 权限提升
3.1 计划任务/作业:Cron
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用户权限。