初次实战SQL注入

目录

1.判断漏洞是否存在

2.判断注入类型(数字型/字符型)

3.猜列数

4.联合查询判断回显位

6.获取数据库表明


此实验为本人学习内容,从未攻击任何网站!!!请伙伴们同样遵纪守法!!!

环境:虚拟机win10

靶场:dvwa

1.判断漏洞是否存在

根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试语句被执行了,说明存在注入漏洞。
一般利用单引号( ' )或者双引号( " )来判断是否存在漏洞,如果出现SQL 语句错误说明有很大的可能会存在漏洞。
将dvwa靶场难度调为low
进入sql注入
第一步看到User ID可以先尝试输入数字,我尝试输入的1
第二步使用HackBar插件,点击LoadURL,就会在右方输入框内看到url
第三步点击Spit URL,方便查看
第四步在id=1后输入'或",查看是否报错 (因为sql语句中单引号或双引号都是成双成对,我们在这里输入单引号或者双引号后如果报错,很大可能存在此漏洞)
第五步点击Execute
可以看到报错信息里多出一个单引号,那么很大可能存在sql注入漏洞
我们可以查看数据库日志,进一步印证这一点(日志文件需要自行添加)
添加日志文件
添加
general_log = 1
general_log_file = "D:\phpStudy\PHPTutorial\MySQL\data\mysql.log"
回到添加路径下新建mysql.log即可
我们可以看到日志文件中我们在网页中做出的修改,一开始输入了1,第二次输入了1',可以看到这两句实际上就是sql查找语句(因为是学习阶段我们可以查看数据库日志文件来验证我们的想法)
第二次多输入一个单引号可以从语句中看出多了一个单引号,所以会报错
得出结论我们可以通过这里修改数据库从而得到更多有用信息

2.判断注入类型(数字型/字符型)

判断注入类型是 数字型 还是 字符型 ,这涉及到在注入的过程中是否 需要添加单引号,可以使用and ( 逻辑与)进行判断,当条件表 达式两边都为真才是真,有一边为假则是假
1 and 1=1
1 and 1=2
如果输入 1 and 1=1 1 and 1=2 页面的查询结果都返回相同的内 容,说明不是数字型注入。既然不是数字型,那就有很大的可能是 字符型注入了。
如果是字符型则需要对单引号( ' )进行闭合,因为 MySQL 中的引号 都是成双成对出现的。
输入以后可以看到 1 and 1=1, 1 and 1=2都能正常显示,这说明什么呢?说明这里不是数字型,数字型肯定会报错,很有可能是字符型
可以观察日志文件
既然已经判断不是数字型,我们就来验证一下是不是字符型
我们输入1' and 1=2--+,发现没有正常显示因为结果为假
(--+是注释的意思在数据库中注释为-- (有个空格),在url中会将+编码为空格)
我们输入--+是为了注释掉数据库中原本自带的单引号,让前面自带的单引号和我们输入 的单引号组成一对
我们再次查看日志文件
为了进一步验证,我们输入1' and 1=1--+
发现正常显示,这就形成了单引号闭合,符合字符型
我们可以在数据库中对比一下
首先是数字型,数字型正常来说是这两种结果,而在靶场中则是显示为相同的结果,原因是数据库将我们输入的1 and 1=1和1 and 1=2看做成'1 and 1=1'和'1 and 1=2',因为是字符型所以会自动的将我们输入的数据看成一体。
而我们后来输入的1' and 1=1--+和1' and 1=2--+,因为我们在末尾都输入了注释符将字符型它本身的后单引号给注释掉了所以会呈现两种状态。
这里还涉及到隐式类型转换
'1 and 1=1'和'1 and 1=2'是两个字符串从被单引号引起来就能看出这一点,
'1 and 1=1'会从左往右读首先是1然后空格后面就不会再读取了,就等价于1,如同c语言中strlen()函数计算字符串长度时遇到\0就会结束。
我们知道这里是单引号闭合以后可以开始下一步猜列数

3.猜列数

查看日志文件就明白了
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 10 -- '
这条查询语句的意思是查询user_id=1,first_name, last_name这两列里的信息然后进行排序(order by)
这条查询语句中只选择了first_name, last_name这两列,所以我们根据列来查询只能是2,在实战中没有日志文件我们可以不断缩小列数来查询

4.联合查询判断回显位

这里我就不解释数据库查询语句了,不懂的伙伴可以学习一下数据库增删改查的知识

dvwa靶场中正常显示了两行但很多网站可能只会显示上面一行的内容不会显示我们输入的1,2

怎么解决呢我们输入id=-1' union select 1,2  --+,让id=-1,这样数据可在查询的时候发现没有匹配的就不会显示,则直接显示我们输入的查询

这好似我在数据库中演示的结果这样很好理解
确定回显位后我们则可以根据联合查询得到更多信息
如union select database(),version(),可以查询数据库名称和版本号

6.获取数据库表明

可以看到我们通过联合查询语句查出了dvwa数据库的两个表名

还是同样的问题,很多网站只会显示一条内容,这里我们的解决方法是group_concat()函数
第二种方式-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='dvwa' )%23
我们将查询标明的语句卸载括号里让他成为一条完整的查询语句这样对我们新手更加友好
查到表名后我们就要进一步查询表的字段了,这里我们查询users表的字段     %23也代表注释
-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users' )%23
最后就可以去具体的数据了比如查询user字段的数据
-1' union select 1,(select group_concat(user) from users )%23
这样我们就查出了所有的用户名
接下来我们查询user 和 password
显示在一行唯一的缺陷就是会将所有数据写在一起,需要自己根据前面查出的用户来对照
这里的密码是经过加密的可以通过解密工具解密
#group_concat() 函数被过滤时,可以使用 limit n,1 来逐个输出查询内容

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

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

相关文章

一个复杂的数据流转换:文件流转base64

一个复杂的数据流转换:文件流转base64 可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,又能如此精彩地讲述自己是如何衰老的。这样的老人在乡间实在是 难以遇上,也许是困苦的生活损坏了他们的记忆&#xff0…

线程池知识点总结

线程池 池化思想:线程池、字符串常量池、数据库连接池 提高资源的利用率 手动创建线程执行任务执行完毕、释放对象 预先创建多个线程对象,放入缓冲池中 优点: 提高线程的利用率提高程序响应速度(因为线程对象是提前创建好的…

内存溢出(OOM)-汇总指南

目录 java.lang.OutOfMemoryError:Java heap space 原因分析 示例 解决方案 java.lang.OutOfMemoryError:GC overhead limit exceeded 原因分析 示例 解决方案 java.lang.OutOfMemoryError:Permgen space 原因分析 示例 解决方案 java.lang.OutOfMemoryError:Metas…

(vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)

(vue)el-checkbox 实现展示区分 label 和 value&#xff08;展示值与选中获取值需不同&#xff09; 后端数据 解决方法 在 el-checkbox 标签中间传入要展示的文本即可&#xff0c;代码如下&#xff1a; <el-checkbox-groupv-model"formInline.processFieldList"…

总线要点笔记

1. AXI/AHB/APB差异 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) …

公众号运营的基本流程分享,纯干货!

公众号运营是一个系统工程&#xff0c;需要运营者从定位与策划、内容创作、引流与互动三个方面进行精心设计和执行。如何运营好一个公众号&#xff0c;实现高质量的内容输出和有效的用户互动&#xff0c;是许多企业面临的挑战。 本文伯乐网络传媒为您详细解析公众号运营的基本流…

前端学习之HTML(第二天)--多媒体标签和表格标签

注&#xff1a;里面的注释是对各个标签的解释 多媒体标签 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title> </head> <body> <!-- audio是音频可以填写绝对路径也可填写相对路径 --> &l…

MySQL学习笔记5: MySQL表的增删查改 (进阶)

目录 前言1. 数据库约束1.1. 约束类型not null 约束unique 唯一约束default 默认值约束primary key 主键约束foreign key 外键约束 2. 表的设计2.1. 实体之间的关系一对一一对多多对多 3. 新增4. 查询4.1. 聚合查询4.1.1. 聚合函数4.1.2. group by 子句4.1.3. having 4.2. 联合…

跨境知识分享:什么是动态IP?和静态IP有什么区别?

对于我们跨境人来说&#xff0c;清楚地了解IP地址、代理IP等这些基础知识&#xff0c;并学会正确地使用IP地址对于保障店铺的安全性和稳定性至关重要&#xff0c;尤其是理解动态IP和静态IP之间的区别&#xff0c;以及如何利用这些知识来防止账号关联&#xff0c;对于每个电商卖…

嵌入式学习33-网络通信

网络: 数据传输,数据共享 1.网络协议模型: OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&#xff08;数据…

Day22 Linux高级编程 --- Makefile

Makefile简介: 1.工程管理工具 2.指定目录下编写Makefile文件或者makefile 3.在目录下输入make 4.调用对应目录下的makefile文件 5.根据文件设定的编译规则来编译代码 Makefile语法: 1.格式: 要生成的文件:依赖的文件 生成方式 …

【STM32+OPENMV】二维云台颜色识别及追踪

一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容&#xff0c;详情见【STM32HAL】与OpenMV通信 有关七针OLED屏显示内容&#xff0c;详情见【STM32HAL】七针OLED(SSD1306)配置(SPI版) 二、所用工具 1、芯片&#xff1a;STM32F407ZGT6 2、CUBEMX配置软件 3、KEIL5 4…

GDOI2024游记

Day0 中午一点钟从学校出发去东莞&#xff0c;大概坐了一个多小时车&#xff0c;两点半多到酒店。住的八方精选酒店&#xff08;ljh说他们住九方精选酒店&#xff0c;乐&#xff09;&#xff0c;说的是景区酒店&#xff0c;但打开外窗&#xff0c;近处是简陋的阳台&#xff0c…

上位机图像处理和嵌入式模块部署(qmacvisual入门)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 虽然我们前面学习了很多的知识点&#xff0c;比如说在windows这边&#xff0c;用qt写界面&#xff0c;用opencv写图像处理代码&#xff1b;在linux…

PHP语言常见面试题:PHP中的数据类型有哪些?请举例说明。

在PHP中&#xff0c;有几种基本的数据类型&#xff0c;它们包括&#xff1a; 字符串&#xff08;String&#xff09;&#xff1a;字符串是字符的序列&#xff0c;由零个或多个字符组成。在PHP中&#xff0c;字符串可以包含任何字符&#xff0c;包括字母、数字、空格、标点符号、…

[unity] xLua 热更新 【个人复习笔记/有不足之处欢迎斧正/侵删】

lua解析器 void Start(){//Lua解析器 能够让我们在Unity中执行Lua//一般情况下 保持它的唯一性LuaEnv env new LuaEnv();//执行Lua语言env.DoString("print(你好世界)");//执行一个Lua脚本 Lua知识点 &#xff1a;多脚本执行 require//默认寻找脚本的路径 是在 Res…

cuda python torch 虚拟环境配置

以下是Pytorch和CUDA对应的版本 以下是Pytorch和Python对应的版本 检查cuda与Python版本是否匹配 import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.empty(3,4,devicecuda))cuda 删除cuda conda uninstall cudatoolkit --forceconda u…

MyBatis三个经典问题

1. Mybatis的执行流程 MyBatis 是一个流行的 Java 持久化框架&#xff0c;提供了对象关系映射 (ORM) 和 SQL 映射的功能&#xff0c;使开发者能够更加方便地与数据库交互。MyBatis 的执行流程大致如下&#xff1a; 配置阶段: 加载配置文件: MyBatis 通过读取配置文件&#xff…

蓝桥杯2013年-幸运数(C语言-链表模拟)

题目描述 幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成 。 首先从1开始写出自然数1,2,3,4,5,6,.... 1 就是第一个幸运数。 我们从2这个数开始。把所有序号能被2整除的项删除&#xff0c;变为&#xff1a; 1 _ 3 _ 5 _ 7 _ 9 .... 把…

支付宝小程序模板开发,实现代小程序备案申请

大家好&#xff0c;我是小悟 支付宝小程序备案整体流程总共分为五个环节&#xff1a;备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前&#xff0c;需要确保小程序基本信息已填写完成、小程序至少存在一…