后台SQL注入
漏洞位于 /admin/configure.php
的46 行,可以看到这里未对 ip 进行过滤

跟进 delCommentByIp

直接接入了 sql语句中
利用方法

根据 ip进行删除评论,抓包后修改 ip

不能直接构造 POC

有个认证信息
后台还有一个注入是在 /admin/configure.php

未对 tag
进行过滤,取 $tags
数组的 键值 作为参数传入 deleteTag
跟进 deleteTag

直接将 $tagId
传入sql语句
构造 tag[1 and updatexml(1,user,1)]=xx
可造成SQL注入
利用方式

先点击全选之后再点击删除,抓包修改 payload(同样有 token 认证,因此需要在浏览器修改)



后台任意文件上传
漏洞位于 /admin/plugin.php
在其插件上传出存在任意文件上传

首先接受我们传入的 zip 文件,将缓存路径 和 解压路径 以及 plugin
参数传入 emUnZip
我们跟进 emUnZip

先分析上部分
首先使用 class_exists
判断是否有 ZipArchive 类,之后检查是否有读写权限,然后使用
getNameIndex
获取解压后的目录, explode('/', $zip->getNameIndex(0), 2);
其实就是要获取解压后目录的
$dir = isset($r[0]) ? $r[0] . '/' : '';
是为了在目录后面 加上 "/"

这里面是判断解压后的目录是否有 解压包名称的 php文件(假设为 test.zip 则检测是否有 test.php)
判断成功过调用 extractTo
函数解压
利用过程


上传后在 ../content/plugins/mikasa/mikasa.php
中就可连接

注意先创建一个 test 文件夹 在把 test.php 放入里面(因为使用的是getNameIndex 函数获取目录的)

同理在 /admin/template.php
也存在任意文件上传


利用方式不再解释

数据库备份拿shell
思路也简单,在 /admin/data.php
存在数据库备份/导入,因此我们只要在备份后的 sql 文件里面,写一些拿shell的指令就行了
一般有两种思路
1. 直接写文件 //不建议使用
2. 开启日志 //建议使用

在中间插入语句导入即可(不做过多解释)
存储型XSS
在 /admin/page.php
存在 存储型 XSS

新添加文章时,只对大部分参数进行了 addslashes
处理

跟进 addlog

未进行任何过滤存入数据库
看一下输出那边

跟进 getLogsForAdmin

仅仅对标题进行了转义,想上面的模板(template变量)依然可以导致 xss

验证

参考链接
https://www.freebuf.com/vuls/195351.html
通过这次代码审计,也算是学到了不少东西吧,希望可以变得更强