catalog

. 漏洞描述
. 漏洞触发条件
. 漏洞影响范围
. 漏洞代码分析
. 防御方法
. 攻防思考

1. 漏洞描述

这个漏洞的成因简单来说可以归纳为如下几点

. 类似于ECSHOP的的模版代码编译功能,QIBO允许在文章中添加指定格式的模版代码
. 在显示文章的时候,QIBO会使用: eval("\$rs2[title]=\"$rs2[title]\";");方式对模版动态变量进行赋值
. 黑客可以通过XSS、CSRF劫持管理员向数据库中注入恶意代码: ${@fwrite(fopen('ali.php', 'w+'), 'test’)}
. 由于PHP的动态执行特性,eval赋值的时候,在双引号中的代码会被动态执行,从而导致原本的变量赋值变成了代码执行入口

Relevant Link:

2. 漏洞触发条件

攻击向量

. 黑客需要向{$pre}jfabout数据表注入恶意代码
) 黑客直接拿到管理员密码,登录了后台
) CSRF
) XSS攻击
. 文章显示的时候,对模版变量进行解析,未对模版内容本身进行有效的过滤、恶意判断

0x1: POC

http://localhost/qibo/admin/index.php?lfj=jfadmin&action=addjf
POST:
title=test&content=${@fwrite(fopen('ali.php', 'w+'), 'test’)}&list=1 或者普通用户访问/do/jf.php,即可在do目录下生成ali.php文件

3. 漏洞影响范围
4. 漏洞代码分析

/do/jf.php

<?php
require(dirname(__FILE__)."/"."global.php"); $lfjdb && $lfjdb[money]=get_money($lfjdb[uid]); $query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list");
while($rs = $db->fetch_array($query))
{
$fnameDB[$rs[fid]]=$rs[name];
$query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list");
while($rs2 = $db->fetch_array($query2))
{
/*
1. 用于变量赋值的客体用双引号包裹,PHP curl syntax(${${}})可以执行
2. 未对模版内容进行转义处理,存在闭合注入的可能
*/
eval("\$rs2[title]=\"$rs2[title]\";");
eval("\$rs2[content]=\"$rs2[content]\";");
$jfDB[$rs[fid]][]=$rs2;
}
} require(ROOT_PATH."inc/head.php");
require(html("jf"));
require(ROOT_PATH."inc/foot.php"); ?>

/hack/jfadmin/admin.php

//通过这个向量黑客可以向{$pre}jfabout数据表注入恶意代码
..
elseif($action=="addjf"&&$Apower[jfadmin_mod])
{
$db->query("INSERT INTO `{$pre}jfabout` ( `fid` , `title` , `content`, `list` ) VALUES ( '$fid', '$title', '$content', '$list' )");
jump("添加成功","index.php?lfj=jfadmin&job=listjf&fid=$fid",);
}
..

5. 防御方法

/do/jf.php

<?php
require(dirname(__FILE__)."/"."global.php"); $lfjdb && $lfjdb[money]=get_money($lfjdb[uid]); $query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list");
while($rs = $db->fetch_array($query)){
$fnameDB[$rs[fid]]=$rs[name];
$query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list");
while($rs2 = $db->fetch_array($query2)){
//eval("\$rs2[title]=\"$rs2[title]\";");
//eval("\$rs2[content]=\"$rs2[content]\";");
$rs2[title] = addslashes($rs2[title]);
$rs2[content] = addslashes($rs2[content]);
eval("\$rs2[title]='$rs2[title]';");
eval("\$rs2[content]='$rs2[content]';");
$jfDB[$rs[fid]][]=$rs2;
}
} require(ROOT_PATH."inc/head.php");
require(html("jf"));
require(ROOT_PATH."inc/foot.php"); ?>

代码防御的关键点主要如下

. 将eval赋值语句内的双引号改为单引号,禁止其PHP动态执行特性
. 在参数外层包裹addslash,防止黑客注入进行闭合

6. 攻防思考

Copyright (c) 2015 LittleHann All rights reserved

QIBO /do/jf.php EvilCode Execution Injected By /hack/jfadmin/admin.php的更多相关文章

  1. NetBpm XML解读(5)

    原文: nPdl的翻译 在看NetBPM的nPdl文档时做了个翻译,一来是让自己能更好的理解nPdl,二来是希望能得到关心NetBPM的同志的指导.    由于对工作流不熟悉,所以有不少术语翻译没有把 ...

  2. AOP aspect XML 配置

    /** * 00配置接入点:定义一个切入点 * execution(* com.foen.foensys.controller..*.*(..))") "*" 第一个* ...

  3. Spring Boot -- Spring AOP原理及简单实现

    一.AOP基本概念 什么是AOP,AOP英语全名就是Aspect oriented programming,字面意思就是面向切面编程.面向切面的编程是对面向对象编程的补充,面向对象的编程核心模块是类, ...

  4. struts2 CVE-2013-1965 S2-012 Showcase app vulnerability allows remote command execution

    catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...

  5. CVE-2014-6321 && MS14-066 Microsoft Schannel Remote Code Execution Vulnerability Analysis

    目录 . 漏洞的起因 . 漏洞原理分析 . 漏洞的影响范围 . 漏洞的利用场景 . 漏洞的POC.测试方法 . 漏洞的修复Patch情况 . 如何避免此类漏洞继续出现 1. 漏洞的起因 这次的CVE和 ...

  6. Microsoft Windows 2003 SP2 - 'ERRATICGOPHER' SMB Remote Code Execution

    EDB-ID: 41929 Author: vportal Published: 2017-04-25 CVE: N/A Type: Remote Platform: Windows Aliases: ...

  7. 执行监听器( Execution listener)

    相关类: org.activiti.engine.delegate.ExecutionListener org.activiti.engine.delegate.TaskListener org.ac ...

  8. Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收

    执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...

  9. Error:Execution failed for task ':app:clean'.

    运行时出现 Error:Execution failed for task ':app:clean'. 错误,Builld->Clean Project即可.

随机推荐

  1. 设置select默认值

    W3C下设置一个默认值直接为 select.value='默认值'. IE8下设置默认值必须有这个option才能被设置,不像W3C 如chrome这种,直接设置就能显示,如果IE下这样设置的话sel ...

  2. 微信小程序 开发 微信开发者工具 快捷键

    微信小程序已经跑起来了.快捷键设置找了好久没找到,完全凭感觉.图贴出来.大家看看. 我现在用的是0.10.101100的版本,后续版本更新快捷键也应该不会有什么变化. 现在貌似不能修改.如果有同学找到 ...

  3. 2015-2016-2 《Java程序设计》项目小组博客

    2015-2016-2 <Java程序设计>项目小组博客 1451 完+美 java项目 守望先疯 JavaGroup 07_10_20_22 FromBottomToTop L.G.Su ...

  4. swift邮箱手机验证

    import UIKit class Validate: NSObject { //邮箱.手机验证 enum ValidatedType { case Email case PhoneNumber } ...

  5. 学习笔记——Maven 如何处理传递性依赖

    maven引入的传递性依赖机制,一方面大大简化和方便了依赖声明,另一方面,大部分情况下我们只需要关心项目的直接依赖是什么,而不用考虑这些直接依赖会引入什么传递性依赖.但有时候,当传递性依赖造成问题的时 ...

  6. Windows下Memcache的安装及PHP扩展配置

    一.下载 找到完整的memcache的Windows安装包,解压放在硬盘上,比如 F:\memcached.exe 二.安装 WIN7 64位双击打开这个exe可能只有一个空的窗口,不能输入任何命令, ...

  7. 从零开始打造个人专属命令行工具集——yargs完全指南

    前言 使用命令行程序对程序员来说很常见,就算是前端工程师或者开发gui的,也需要使用命令行来编译程序或者打包程序 熟练使用命令行工具能极大的提高开发效率,linux自带的命令行工具都非常的有用,但是这 ...

  8. Beta版本冲刺Day3

    会议讨论: 628:已经将原本写在jsp中的所有界面修饰代码转移到了css文件中,同时当页面跳转的时候也不会出现崩溃的现象,并且已经解决了上次无法连接数据库的问题.但是又遇到了一些新的小问题,希望明天 ...

  9. 毕向东JAVA基础25天教程目录

    视频目录:day01-01-基本常识day01-02-Java的跨平台性day01-03-Java环境搭建(安装)day01-04-Java环境搭建(环境变量配置)day01-05-Java环境搭建( ...

  10. Android数据格式解析对象JSON用法(转)

    地址:http://www.cnblogs.com/devinzhang/archive/2012/01/09/2317315.html 里面的重点: JSON解析案例     (1)解析Object ...