这是HTB的Starting Point实验室中第七台靶机,主要根据官方提供的writeup来练习,中间穿插一些自己的理解和工具使用扩展。
一、环境配置
-
工具准备
kali linux 2020.1 vmware虚拟机,配置为hostonly模式,共享宿主机网卡上网;
firefox浏览器(kali linux自带);
Markup 靶机IP地址:10.10.10.49;(VIP可用) -
网络连接,按照说明连接到Starting Point实验室。
二、开始渗透
1. 信息收集
使用nmap扫描,发现靶机开启了22端口(ssh)、80端口(http)和443端口(https)。
使用浏览器查看靶机的80端口,看起来是个需要先登录的购物网站。
使用在上一台靶机中获取的身份凭据:daniel/>SNDv*2wzLWf进行登录。页面显示以顾客身份登录,点击不同的菜单查看内容。
在order和contact菜单发现有输入框可以提交内容,但contact菜单实际上无法提交(没反应),重点测试order菜单。
在order中输入测试内容后,页面弹窗提示订单已接受,并未校验订单信息内容的有效性。
开启浏览器代理,使用burpsuite测试order页面,可以看到提交的订单信息实际上通过XML方式提交到服务器。这可能会存在XXE漏洞。
XXE漏洞是由于XML输入的不安全解析而导致的,从而导致LFI和RCE。关于XXE漏洞的详细信息可以查看这里。
2. 获得用户shell
可以使用一段代码来测试XXE漏洞。在burpsuite中修改包含订单信息的XML内容,并发送到服务器。收到了不寻常的返回,页面返回了win.ini文件(操作系统基本配置信息)的内容。
页面中弹窗提示的内容也不同。
点击ok后,页面上右键查看网页源代码。代码中泄露出了一个操作系统用户名daniel。
经过测试可以利用XXE漏洞显示操作系统中的文件内容,而靶机有开启了22端口,可以尝试请求daniel用户的ssh私钥,然后进行登录。windows中ssh私钥默认位置是C:\Users\your-username.ssh\id_rsa。
burpsuite中修改请求的文件路径为C:/Users/daniel/.ssh/id_rsa并发送请求(注意路径中用’/‘而不是’’),返回的页面中包含了daniel用户的ssh私钥信息。复制获得的私钥信息到一个文本中,注意复制的内容要准确,否则登录会报错。
使用获取的私钥尝试登录,提示权限问题无法登录。
修改文件权限为400后登录成功,用户身份为daniel。在daniel的桌面上能够找到user.txt文件。
- 权限提升
获取普通用户权限后再系统目录中枚举后发现C:\Log-Management文件夹中有一个名为job.bat的批处理文件。
查看文件内容,该文件只是要清除系统事件日志。
尝试执行该批处理文件,提示需要管理员权限才能执行。
使用icacls查看job.bat的权限显示BUILTIN \ Users组具有对该文件的完全控制(F)。 BUILTIN \ Users组代表所有本地用户,其中也包括Daniel。
可以通过将netcat传输到系统并修改job.bat脚本以执行反向shell来获取管理员shell。(为什么?)
使用python搭建简易http服务器以提供nc.exe给靶机下载。
将使用netcat.exe建立反向连接的命令输入到job.bat中。
kali中启动netcat监听1234端口
执行job.bat,kali linux中netcat获得反向shell。
发现获得的shell并不是管理员的,依然是daniel用户的。这里有坑,因为靶机是公用的,大家都会写job.bat文件,所以系统定时会重置job.bat文件的文件(据说是30秒),为了防止因为重置文件出现问题,可以把两个命令合并在一起执行。
获得管理员权限,并在administrator的桌面上找到root.txt文件。