最近HTB
上新出来了一个靶场OneTwoSeven
,所以我对它进行了测试,发现整个思路挺有意思,所以记录下来。
像往常一样,我们先masscan
扫描然后再用nmap
。
通常,这是我们执行强制浏览或某种形式的自动Web扫描的地方。但是,由于存在速率限制,因此我们需要手动浏览该站点。
浏览时,我们http://10.10.10.133/signup.php
发现它为我们提供了凭据sftp
。
我们还看到了域名的使用onetwoseven.htb
。在继续之前,需要更新本地DNS条目/etc/hosts
。否则访问不了域名
完成之后,让我们检查一下远程文件系统上可以访问的内容。
我们将从以预先生成的用户身份访问sftp服务器开始。由于无法上传和执行Web Shell,因此让我们检查一下该命令可用的help
命令。
我们创建一个符号链接,并且public_html文件夹可写;让我们看看它带我们到哪里。
Nmap网络扫描:
(nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。)
源代码恢复让我们从一些源代码恢复开始。我们将利用symlink
命令来浏览原始的php文件。我们可以检查一些有意思的文件是signup.php
和index.php
。如果我们尝试使用相同的名称(即php扩展名)符号链接到这些文件,则服务器在尝试执行php时会遇到问题。相反,我们将删除php扩展名,以便我们可以恢复源代码。
让我们先来看一看index
。我们无法从sftp shell中查看/获取文件。这里的窍门是我们需要view-source:http://10.10.10.133/~ots-yZjFkZWY/index
在浏览器中输入。在其中,我们可以发现,如果要从服务器本身(127.0.0.1)或104.24.0.54访问此页面,则将显示指向服务器的链接。服务器本身似乎正在监听port 60080
。
下一个文件signup
包含有趣的信息。具体来说,它向我们展示了如何为sftp登录生成用户名和密码。
让我们确认用户名功能如何处理我们的IP地址。
第1行:生成给定IP地址的md5sum
第5行:获取哈希IP的前8个字符
第9行:base64对缩短的哈希进行编码
第13行:从字符串中删除所有等号
第17行:返回缩短/替换后的哈希的子字符串,从第四个字符开始,一直到字符串末尾
第21行:将字符串“ ots-”与上述所有操作的结果连接起来,为我们提供用户名
密码要简单得多。
如果还有其他用户遵循ots-模式,我们可以获取他们的密码!我们来/etc/passwd
看看是否有感兴趣的用户。
回到sftp shell,我们可以进行符号链接/etc/passwd
并检出内容。
在上面的输出中,我们可以看到我们的用户名。这里的好处是,每个/etc/passwd
条目的GECOS字段中记录了IP地址。让我们进行下一步,并获取与127.0.0.1关联的用户的密码!
那里有一套凭据!让我们在sftp服务上使用它们。
登录后,我们看到user.txt。剩下的就是下载并打开它!
让我们再次重新访问sftp服务器。这次,我们将链接文件系统的根。
我们将再次使用浏览器来查看结果。
观察文件夹,目前我们唯一有权浏览的有用的的文件.login.php.swp
位于http://onetwoseven.htb/~ots-mODVhZTM/var/www/html-admin/
。
让我们下载文件并分析其内容。运行file
命令可以分析.login.php.swp
告诉我们这是一个vim隐藏文件。
当vim打开login.php
文件进行编辑时,它会创建一个隐藏的交换文件.login.php.swp
。并且这个文件是可以恢复的!
出现上述提示后,我们可以按Enter键并查看我们新恢复的文件。我们要关注几行;我们将从第一行开始。
第1行告诉我们,可以预期运行此php文件的服务器位于端口60080上。
接下来,第26行让我们知道该php文件与他们的后端管理相关。
有趣的东西在第78行;管理员用户名和哈希密码!
我们可以使用crackstation.net获取明文密码。
我们尝试开启ssh隧道。
我们使用ssh -v
命令看看。
我们可以从上述输出中得出的结论是,在服务器断开连接之前,连接成功并且ssh连接已建立。所以我们可以来建立ssh转发隧道,以到达服务器回送地址上的端口60080。
两个ssh选项将帮助我们在没有交互式shell的情况下建立隧道。让我们检查一下。
下面我们看到使用的隧道选项。
运行完上面的命令后,我们运行kali上的netstat
命令。我们应该在端口60080上看到一个侦听器。
我们可以看到我们的kali机器上有一个60080的监听器。在那里发送的所有流量都将转发到端口60080上的10.10.10.133的localhost接口。知道这一点,我们可以浏览到本地隧道,该隧道将把所有流量通过该隧道移至目标。
拿到WEB SHELL设置好隧道后,我们可以浏览到http://127.0.0.1:60080。
最明显的点是底部的**插件上传”**部分。我们可以使用开发人员工具来启用该Submit Query
按钮。
当我们在开发工具中查看按钮时,会在标记上看到禁用的属性\
。
我们可以简单地删除属性以启用按钮。
让我们尝试上传一个简单的php web shell,尝试一下乐趣。在此过程中,让我们在Burp中捕获POST请求,因为稍后会派上用场。
网站回应404错误。
如果浏览到127.0.0.1:60080/menu.php?addon=addons/ots-man-addon.php
,则会看到一条说明,告知我们禁用的功能会导致404错误。我们可以假设已经尝试禁用文件上传功能。
上面的页面上还有一条注释:
插件管理器不能直接执行,而只能通过提供的RewriteRules执行
因此,当我们要下载菜单上列出的文件之一时,我们通过类似于以下网址的URL进行请求http://127.0.0.1:60080/addon-download.php?addon=[SOME_PLUGIN]
。每当addon-download.php
请求时,Web服务器都会在内部将请求重写为addons/ots-man-addon.php
。请注意,两者addon-upload.php
和addon-download.php
都由同一个文件处理:ots-man-addon.php
。
由于我们对负责处理文件上载和下载的文件最感兴趣,下面分析ots-man-addon.php
源码。
以下是我们关注的代码片段。
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录