emlog6.0代码审计

 

后台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

通过这次代码审计,也算是学到了不少东西吧,希望可以变得更强

posted @ 2020-09-24 02:08  Zahad003  阅读(247)  评论(0编辑  收藏  举报