Sql Inject(SQL注入)介绍

在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
**一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重! 
SQL注入在网络上非常热门,也有很多技术专家写过非常详细的关于SQL注入漏洞的文章,这里就不在多写了。  

数字型注入(post)

第一关,选择查询的id然后点击查询就能查询到数据,这时候我对查询进行抓包。
1

右键 Send to Repeater
2

我们在id这块进行测试,在后面添加 or 1=1 发现有注入点:
3

字符型注入(get)

输入想查找的东西,点击查询进行查找,这边我们直接在输入框中进行测试,和上题一样输入 lili or 1=1#,发现有注入点:
4

xx型注入

和上题一样 ,输入**lili\**破坏其内部数据库语句结构
5
6

“insert/update”注入

这边我们点击注册,在用户栏进行注入。payload为:1’ and extractvalue(1,concat(0x7e,database())) and ‘
7
8

“delete”注入

这里是一个留言板,我们随便写一点东西进去,鼠标移到 删除 在左下角可以看到id=60,说明我们的数据是有id头的,所以点击删除抓包。
9
我们在id=60后面注入即可:
10
11

“http header”注入

有些时候,后台开发人员为了验证客户端头信息,比如常用的cookie验证,或者通过http请求头信息获取客户端的一些信息,比如useragent、accept字段等等,会对客户端的http请求头信息获取并使用sql进行处理,如果此时没有足够的安全考虑,则可能会导致基于http头的sql注入漏洞

首先,我们点击 点击退出 抓包
12

User-Agent进行注入,payload为1’ and extractvalue(1,concat(0x7e,database())) and ‘
13

盲注

时间盲注主要使用if语句,通过延迟信息进行判断,不看回显信息,这里就不多说了,使用SQLMAP效果更佳,手动测试难免有误差。