下载cms来看看
从目录来看应该是普通的cms,没有用什么框架之类的
这里直接使用mysql安装吧
真是小巧
从入口文件看起
<?php include('config.php'); include(SYS_ROOT.INC.'common.php'); $path=$_SERVER['PATH_INFO'].($_SERVER['QUERY_STRING']?'?'.str_replace('?','',$_SERVER['QUERY_STRING']):''); if(substr($path, 0,1)=='/'){ $path=substr($path,1); } $ctrl=isset($_GET['action'])?$_GET['action']:'run'; if(isset($_GET['createprocess'])) { Index::createhtml(isset($_GET['id'])?$_GET['id']:0,$_GET['cat'],$_GET['single']); }else{ Index::$ctrl($path); } ?>
入口引入两个文件
config.php普通配置文件
common.php 加载一些核心的文件及30行开始对gpc使用Base类的magic2word静态方法进行调用
ctrl+b跟进去
static function magic2word($text){ if (is_array($text)) { foreach($text as $k=>$v){ $text[$k]=self::magic2word($v); } }else{ $text=stripslashes($text); } return $text; }
可以了解到 判断是否为数组,然后对数组的值进行遍历,当数组的值不为数组的时候,调用stripslashes函数对值进行过滤
那么就清楚了,这里有两个问题
第一个: stripslashes函数
那么这个函数对注入和xss都没什么用
第二个:使用magic2word静态方法,过滤的只是值,并没有对键过滤,so
找一处能够利用漏洞的地方
可以看到首页就调用了createhtml方法,并且传了get的参数,跟进去
使用了get_one,这个很清楚就是sql操作
那么我们可控的地方是$nowvar
靠 ,写文章好麻烦 直接上poc
为什么这么构造语句呢,因为我把表的数据删除了,也就是空表,空表是没有数据的,所以用常规的注入是判断不了的
比如
1 and 1=1 # 1=1是成立的,但是表中没有数据,无法判断,如果有的话,返回的是表中id为1的数据
1 or 1=1 # or 1 =1 恒成立,会返回所有数据,但是没有数据,所以无法正常返回
所以这里需要构造空表查询
select (select * from (select sleep(5))a)