RoCET —远程代码执行工具
整个项目以vulnhub.com上的ctf开始。 最初,我是为红色团队做的,该团队决定每周我们需要一个新的vulnhub完成。 到目前为止,还没有大佬,我有两个。 不过这是不同的。 我正在阅读一些演练,并收集了有关本地文件包含漏洞如何工作的信息。 我回想起几个月前,我偶然发现有人写了一个Shell,该Shell能够与粘贴在网站上的文件列表脚本进行交互。 这给了我一个想法,创建一个可以与文件包含物交互的外壳,有效地提供了一个完整的外壳,脱离了您可以读取某个文件的基础,并运行了将打印到该文件的命令。 我在LFInT上开发的vm被称为evilscience,可以在此处下载。 您打开虚拟机,发现它没有头。 您对此进行了简单的nmap扫描,发现一些有趣的端口打开了: 好的,有不错的端口开放,但是在探索之前,因为它是 托管在端口80上,让我们立即对其进行漏洞扫描。 事实证明,有可能包含本地文件 通过此扫描结果: 知道可能会让我看到文件的下一件事是尝试查找其中包含的其他文件。 浏览包含的常用文件,有些事情引起了我的注意。 /var/log/auth.log是一个常用的文件,我们的目标正在运行ssh。 因此,尝试卷曲此文件: 嗯不错。 现在,我可以读取通过ssh进行身份验证的日志的位置。 但是,这里有一个问题:感谢curl,它采用HTML。 根据过去的经验,我知道可以通过简单的一行PHP来插入一行,例如, 并在服务器上执行命令。 那么,为什么不尝试使用它作为ssh的用户名,并卷曲页面并为其提供命令呢? 现在卷曲: 我们有成功! 现在,这是我在CTF挑战赛中停下来的地方。 原因是我立即开始考虑编写脚本,该脚本使我可以利用此远程代码执行漏洞做很多事情。 在挑战之后,您通常会运行某种反向外壳程序,并完成标志。 老实说,到目前为止,我还没有完成挑战。 但是,这个脚本来了。 首先,我开始通过python简单执行,特别是使用os.system。 在笑着说我不知道如何使用os.system编写python之前,只知道这整个过程为我带来了更好的方法。 这是我最初如何通过python卷曲网站的示例: os.system("curl '192.168.150.128/index.php?file=/var/log/auth.log&" + cmd) 接下来,我使用一些非常糟糕的文件读/写操作来解析文件。 它使用sed和awk写入文件,使用sed清理此虚拟机专用的内容,然后使用awk清理重复的行。 不过,随着时间的流逝,我决定使其更像一个脚本,并实现库。 第一个方便的库是pycurl库。 从逻辑上讲,这是在这种情况下最好的库,因为它执行与curl相同的操作。 当然,导入StringIO可以写入和读取curl的字节。 这样可以使我的卷曲操作非常干净。 下一步非常简单,创建一些方法来获取工作目录,主要方法包括遍历目录并执行。 剩下的唯一步骤是解析提供给我们的信息,并将其打印到终端上作为基本外壳。 至此,我将项目重命名为RoCET,代表远程命令执行工具。 如果您能够执行命令并将其打印输出到html,则该工具可以与通过网络执行的任何远程代码一起使用。 这个shell仍在开发中,但是在我的github上。