SQL注入学习笔记(一)–简单了解SQL注入原理,判断注入点

SQL注入原理

1
2
3
4
5
SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的sql服务器加以
解析和执行。由于sql语句本身的多样性,以及可用于构造sql语句的编程方法很多,因此凡是构造sql语句的步骤均存在被
攻击的潜在风险。Sql注入的方式主要是直接将代码插入参数中,这些参数会被置入sql命令中加以执行。间接的攻击方式是
将恶意代码插入字符串中,之后将这些字符串保存到数据库的数据表中或将其当成元数据。当将存储的字符串置入动态sql
令中时,恶意代码就将被执行。

SQL注入产生过程

1
2
3
4
大多数的web应用都需要与数据库进行交互,并且大多数web应用编程语言(如ASP、C##、.NET、Java和PHP)均提供了可编
程的方法来与数据库连接并进行交互。如果web应用开发人员无法确保在将从web表单,cookie及输入参数等收到的值传递给
sql查询(该查询在数据库服务器上执行)之前已经对其进行过验证,那么通常会出现sql注入漏洞,如果攻击者能够控制发
送给sql查询的输入,并且能够操纵该输入将其解析为代码而非数据,那么攻击者就很有可能有能力在后台数据库执行该代码。

一个网站在执行SQL语句时大概流程

1
2
3
4
1、接收数据
2、拼接数据
3、执行SQL语句
4、展示执行结果

判断是否存在注入点(SQL语句是否可以进行拼接)

1
2
3
4
5
6
7
8
9
10
11
1、逻辑值(老方法)
and 1 = 1 页面正常(和以前页面无太大区别)
and 1 = 2 页面异常
则可能存在注入点
2、乱输一顿(返回正常页面说明过滤了;返回错误页面说明查询了,有带入数据库查询,即说明存在注入点)
www.xiaodi8.com/news.php?y=1asdawdasdwa
3order by
通过order by 判断注入的字段数
4、若输入东西进去,跳转到404错误或者跳转到主页,说明网站存在过滤
```
### 可注入条件,产生条件

可控变量,带入数据库查询($result=mysql_query($sql);),变量未存在过滤或过滤不严谨。
eg:
$id=$_GET[‘id’];
$sql=”SELECT * FROM users WHERE id=$id LIMIT 0,1”;
//直接传递的变量$id带入sql语句中执行没有做任何的限制,这样为恶意代码插入执行创造了条件。通过修改带入的代码执行
//的语句最终达到SQL注入获取敏感信息
防范:在接收参数后,进行过滤,再带入数据库进行查询。

1
2
[简单SQL注入演示:13:00](https://www.bilibili.com/video/BV1JZ4y1c7ro/?p=11&spm_id_from=pageDriver&vd_source=d32bce54780cf3d9710df43274886fde)
### 判断一下网址哪可能存在注入点

www.xiaodi8.com/index.php?id=8(存在可控参数id)
www.xiaodi8.com/?id=8(存在可控参数,且?前面相当于省略了index.php,可以说是默认指向某一个,本质与1一样)
www.xiaodi8.com/?id=8&x=1(相当于两个可控参数)
www.xiaodi8.com/index.php(post注入,参数不在网址,抓包可以看到)

1
### 已知参数x有注入,以下哪个注入测试正确?

a.www.xiaodi8.com/news.php?y=1 and 1=1 &x=2
b.www.xiaodi8.com/news.php?y=1 &x=2 and 1=1
c.www.xiaodi8.com/news.php?y=1 and 1=1 &x=2 and 1=1
d.www.xiaodi8.com/news.php?xx=1 and 1=1 &xxx=2 and 1=1
哪个参数有注入,and 1=1 注入语句就写在哪个参数的后面(b,c)

1
### 如何获取列名(爆字段)

数据库中有一个information_schmema,
有表、字段信息,注入的时候先查表查字段就OK了

1
### union联合注入

有几个注意的点:
1.查询返回字段数要和前一个查询(前一个select)字段数相等。
2.字段类型也要相对应。!!!!
3、把id设置成-2之后,前面select语句条件部分为假就不会执行
,从而不会影响到后面select语句的执行结果(-2是为了让他
报错从而执行union后的语句)。
```