| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> SQL注入原理-数值型注入 -> 正文阅读 |
|
[大数据]SQL注入原理-数值型注入 |
? ? ? ? 小伙伴们大家好!本期为大家带来的是SQL注入原理-数值型注入的讲解! 目录 SQL注入原理????????SQL注入的原理是由于后端没有对前端用户输入的数据进行检验与过滤,导致用户输入的SQL语句传入到后端,被后端执行。 数值型注入? ? ? ? 数值型注入顾名思义就是我们前端传入后端的参数是一个数值,比如id值。 比如后端需要根据前端传来的id值进行数据库查询并把结果传给前端进行展示。 源代码:
1、测试是否存在注入点这里我们可以直接传入?id=1,即可得到users表下id=1的数据。? 由于id值是由用户输入的,那我们就可以构造恶意的SQL语句来查询其他的数据。 例如我们输入?id=1 and 1=2
前端什么都没有显示,这就是因为我们输入的“and 1=2”也被传入到了后端,被当成SQL语句去执行,而 1=2 是错误的,所以前端不会显示数据。 当我们输入?id=1 and 1=1 时,页面就能正常回显users表下id值为1 的数据了。 这样即可证明一个网站是否存在SQL注入点。说明后端没有对我们输入的id值进行检验与过滤,使得我们构造的SQL语句被得到了执行。 2、判断字段个数接下来,我们就是来判断后端在数据库查询时,总共查询了几个字段的数据。 我们通常使用order by 来判断后端进行数据库查询时所查询的字段数。 我们直接构造id值为“?id=1 order by 3”
? ? ? ? order by是数据库查询的时候对结果进行的排序,如果后面写的是字段,则根据查询字段进行排序,但如果后面写的是数字,该数字大于所查询的字段数,则就会报错,小于的话就不会报错。 可以看到,当order by 3时页面正常回显,而当order by 4时页面报错“Unknown column '4' in 'order clause'”。 说明后端数据库查询语句查询的字段数为3个。返回上面查看源代码查询的字段数确实是3个。 3、找出可以回显的字段构造id值“?id=1 union select 1,2,3”
发现没有显示1,2,3。这是为什么呢?因为后端正常查询了id=1的数据并且前端只显示一条数据的信息。想要得到1,2,3分别能在哪里显示,就必须让后端的查询语句查不到结果,即:让id值为负或者在id=1后添加一个条件“and 1=2”。 这里可以查询的字段,只有第二个跟第三个字段能在前端页面显示。 4、查询数据库的信息? ? ? ? 1.查看当前的数据库? ? ? ? ? 构造id值“?id=-1 union select 1,database(),3”
? ? ? ? ? 可以看到当前数据库名为test数据库。? ? ? ? ? 2.查看当前数据库的用户?????????构造id值“?id=-1 union select 1,user(),3”
? ? ? ? 3.查看数据库的版本?? ? ? ? 构造id值“?id=-1 union select 1,version(),3”
????????4.查看所有的数据库名? ? ? ? 构造id值“?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata” 因为前端只显示一条数据,而我们想要得到所有的结果就要舒勇group_concat()函数,group_concat() 可以将我们查询到的数据用“,”拼接起来。 information_schema数据库是MySQL5.0之后自带的数据库,infomation_schema数据下的schemata表存储了所有数据库名,information_schema数据库下的tables表存储了所有的表名,information_schema数据库下的columns表存储了所有的字段名。
????????5.查看数据库下的所有表名? ? ? ? 构造id值“?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='study'”
????????6.查询表中所有的字段? ? ? ? ?构造id值“?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='study' and table_name='student'”
????????7.查询表中的数据? ? ? ? 构造id值“?id=-1 union select 1,group_concat(name),group_concat(age) from study.student”
? ?这样我们就查到了study数据库下student表中的数据信息。 总结数值型注入的基本流程为: ????????先使用and1=2的条件观察页面是否正常回显,如果正常回显则存在注入点,接下开始用order by 来判断后端SQL语句查询字段个数,再检测哪个字段可以被前端页面回显,之后就可以爆数据库、表、字段了,爆出字段就可以直接获取数据了! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:17:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |