在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。
从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
在提交页面随便选一个选项,进行查询,使用burp抓包。
因为是数字型,直接在后面加上真命题,不需要加单引号测试。
修改id参数为1 or 1=1 ,发送,得到返回的数据库数据。
点击注册,在用户那栏填入注入语句,如下爆出数据库名
wanku' or updatexml(1,concat(0x7e,database()),0) or'
正常登陆进来,在修改资料那里插入注入语句。
wanku' or updatexml(1,concat(0x7e,database()),0) or'
顺便留个言,有记录后,点击删除按钮,进行抓包。
发现参数是以get形式传递,把注入语句插在id之后,ctrl+U进行编码,send一下得到数据库名。
23 or updatexml+(1,concat(0x7e,database()),0)
基于真假的盲注主要特征
我们在皮卡丘平台一进行实验,输入下面的测试语句
kobe' and 1=1#
kobe' and 1=2#
发现一条正确执行,一条显示用户名不存在,说明后台存在 SQL 注入漏洞
基于真假的盲注可以看到回显的信息,正确 or 错误
基于时间的注入就什么都看不到了,我们通过特定的输入,判断后台执行的时间,从而确定注入点,比如用 sleep() 函数
在皮卡丘平台一,无论输入什么,前端都是显示 “I don’t care who you are!”
我们按 F12 打开控制台,选到网络
然后我们输入下面的 payload 进行测试
kobe' and sleep(5)#
如果存在注入点,后端就会 sleep 5秒才会返回执行结果
看到上面的结果说明我们注入成功了
当我们输入有单引号时被转义为\’,无法构造 SQL 语句的时候,可以尝试宽字节注入。
GBK编码中,反斜杠的编码是 “%5c”,而 “%df%5c” 是繁体字 “連”。
在皮卡丘平台中,将利用 BurpSuite 截获数据包,发送到 Repeater 中,在里面写入 payload
当我们用通常的测试 payload时,是无法执行成功的,下面的payload会报错
kobe' or 1=1#
因为在后台单引号会被转义,在数据库中执行时多了个反斜杠。
我们可以用下面的payload,在单引号前面加上 %df,让单引号成功逃逸
kobe%df' or 1=1#