holynix

靶机搭建

下载链接

https://download.vulnhub.com/holynix/holynix-v1.tar.bz2

如果扫不到ip可以尝试下面的操作

  • 用vmware打开虚拟机,选择我已移动主机
  • 把虚拟机改成nat模式
  • 重启

信息搜集

主机发现

扫描C段,发现130这台主机

端口扫描

快速TCP扫描

开放了80端口

常见端口的UDP扫描

详细TCP扫描

漏洞脚本扫描

可能有sql注入


漏洞探测

Web渗透

来到登录界面,尝试万能密码

成功登录,后台有文件上传的接口

尝试上传,但是没有权限。抓个包看看

这里的id很简单啊,感觉可以越权

改成3之后上传成功了

回到浏览器中,将id固定为3

刷新,用户变成了gmckinnon

上传php-webshell,用kali中自带的就行了(记得改ip)

猜测上传的目录是用户的家目录/~gmckinnon,访问刚刚上传的php,显示没有权限

还有另一种上传方式,上传gzip压缩文件,然后勾选自动解压,这里可以多尝试几种压缩命令,最后发现要用tar命令

tar -czf shell.tar.gz php-reverse-shell.php

上传shell.tar.gz会发现家目录中多了php-reverse-shell.php这个文件,点击即可fantanshell

其实不尝试也可以,还有任意文件读取漏洞,但我做的时候没发现

开到security页面,可以发现每一个选项框对应的是一个文件路径,那就可以尝试一下文件包含

改成/etc/passwd,成功读取

读取一下上传文件的逻辑,文件是transfer.php(抓个包就知道了),这里最好用php伪协议+base64编码读取,看着清晰一点

php://filter/convert.base64-encode/resource=transfer.php

可以看到解压命令是tar,上传的文件需要tar.gz,所以要用tar -czf这个命令

<?php
if ( $auth == 0 ) {
        echo "<center><h2>Content Restricted</h2></center>";
} else {
	if ( $upload == 1 )
	{
		$homedir = "/home/".$logged_in_user. "/";
		$uploaddir = "upload/";
		$target = $uploaddir . basename( $_FILES['uploaded']['name']) ;
		$uploaded_type = $_FILES['uploaded']['type'];
		$command=0;
		$ok=1;

		if ( $uploaded_type =="application/gzip" && $_POST['autoextract'] == 'true' ) {	$command = 1; }

		if ($ok==0)
		{
			echo "Sorry your file was not uploaded";
			echo "<a href='?index.php?page=upload.php' >Back to upload page</a>";
		} else {
        		if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
			{
				echo "<h3>The file '" .$_FILES['uploaded']['name']. "' has been uploaded.</h3><br />";
				echo "The ownership of the uploaded file(s) have been changed accordingly.";
				echo "<br /><a href='?page=upload.php' >Back to upload page</a>";
				if ( $command == 1 )
				{
					exec("sudo tar xzf " .$target. " -C " .$homedir);
					exec("rm " .$target);
				} else {
					exec("sudo mv " .$target. " " .$homedir . $_FILES['uploaded']['name']);
				}
				exec("/var/apache2/htdocs/update_own");
        		} else {
				echo "Sorry, there was a problem uploading your file.<br />";
				echo "<br /><a href='?page=upload.php' >Back to upload page</a>";
			}
		}
	} else { echo "<br /><br /><h3>Home directory uploading disabled for user " .$logged_in_user. "</h3>"; }
}
?>

提权

用mv提权,把/bin/su复制为/bin/tar。又因为可以不用密码使用sudo执行tar,就可以不用密码执行sudo su(sudo tar这里的tar已经变成su了)

复盘

打靶的时候我有个疑问,为什么直接上传权限是600,而解压后权限提升了变成了644

这和linux中的权限掩码有关

文件默认权限 = 666 - umask(目录是777 - umask);

  • root/ 普通用户默认umask 022 → 文件默认 644;
  • www-data为了安全,umask通常是077 → 文件默认 600;

不解压,只执行mv,保留 Web 用户(www-data)创建临时文件的 600 权限(umask 077),仅移动文件不修改权限。

解压(sudo tar xzf):还原打包时文件的 644 权限(Kali/root 用户默认 umask 022,文件默认 644)。

posted @ 2026-02-24 15:35  leee0  阅读(1)  评论(0)    收藏  举报