0x01 端口扫描
常见端口如下:
- 80端口:HTTP服务
- 22端口:SSH服务
访问80端口
0x02 泄露的登录凭证
根据页面的提示我们访问提示的文件,可发现能够读取到对应文件的内容。
访问pwdbackup.txt
内容大致如下,提示这密码至少加密了13次,然后是一串加密字符串。根据特征可大致判断为base64。我们复制密文去解密。
拥有了密码,但我们目前还无法确定用户归属。
0x03 目录穿越漏洞
构造payload如下成功读取到/etc/passwd文件
这里我们发现和密码关联的用户charix,可尝试ssh登录。
0x04 组合利用线索获取主机访问权限
通过我们获得的密码和用户名尝试ssh登录
至此我们获得了低权限
0x05 从目录穿越到LFI(本地文件包含)
通过利用目录穿越时我们可以发现,读取的php文件内容并非是以文本的形式展现的,而是以php代码执行结果的形式展现的,这表明该漏洞很可能不仅仅是一个目录穿越漏洞,更可能是一个LFI漏洞,那么我们便可以通过LFI转化成RCE。
0x06 LFI转化为RCE
本次基于Apache中间件access.log日志文件的写入形式来利用LFI
首先通过前期的信息搜集可得知操作系统为freeBSD,Apache中间件版本为2.4.29。
我们猜测access.log文件在/var/log/httpd-access.log处,构造url进行访问。
可以看到日志文件中记录了很多内容,如来源IP,访问时间,请求方式,访问页面地址,访问参数,访问结果及浏览器UA等内容,很明显这其中多个数据是我们可以在访问过程中修改和控制的。
尝试日志写入webshell
访问该地址不会产生任何效果,但会在access.log中写入一条日志信息,当拥有LFI漏洞的使用权时即可使用LFI漏洞访问access.log,上述payload中的webshell就会被当作代码来执行。
通过日志发现写入的webshell符号被转义了,该方法不可行。
既然会被浏览器转义,那么我们找到一个不会被转义的地方插入即可,UA就是一个非常好的位置。
抓包后修改UA,插入一句话木马
通过LFI漏洞访问access.log
提示无法执行空命令,说明我们修改UA写入的webshell生效了。
构造payload进一步验证
至此我们拿下了charix用户和www用户的权限。
0x07 本地脆弱性枚举
ssh登录charix账户发现存在一个secret.zip压缩包,看名字可能包含敏感信息。
首先在kali使用命令,让nc监听4000端口,并将数据保存为secret.zip
接下来在目标主机使用命令调用nc程序将zip文件远程传输到本地的4000端口。
本地查看压缩包
使用之前得到的密码成功解压,但解压后的文件无法直接读取
暂且放置,上传linPEAS进行本地脆弱性搜集
枚举进程发现目前有一个root执行的vnc程序,且目前处于可连接的本地监听状态。
VNC程序
vnc是一种远程操作软件,用户可借助vnc进行操作系统的远程连接,并像在本地一样对远程系统进行访问和操作。此次目标主机开放root权限的vnc程序监听,意味着如果我们有机会连接该vnc可直接获得root身份的操作系统远程访问权限。
0x08 本地脆弱性-root权限的vnc会话
为了获得vnc连接,需要在目标主机本地的5901端口进行端口映射,并将其连接权限转发到其他对外端口上。这里通过ssh服务实现将远程端口映射到本地。
接下来基于vncviewer对kali系统的5901端口进行登录尝试,这时会提示需要密码,且charix用户密码不再起作用。考虑到vncviewer还支持以密码文件的形式提供认证凭证,加上之前无法读取的secret文件,我们可尝试使用该方法登录。
至此我们拿下root权限
0x09 总结
- 敏感文件泄露登录凭证
- 目录穿越到LFI
- LFI2RCE:Apache中间件access.log写入webshell
- LFI2RCE:绕过浏览器转义,修改UA写入webshell
- 组合利用登录ssh获取charix权限
- 本地脆弱性枚举获取带有root权限的vnc程序
- vnc仅允许本地访问,端口映射至本机
- vncviewer使用密码文件访问,拿下root权限