01SQL注入简介
Sql 是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限陷)。
02SQL注入的危害
数据库信息泄露:数据库中存放的用户信息泄露。
网页篡改:通过操作数据库对特定网页进行篡改。
网站挂马:通过操作数据库嵌入木马。
数据库恶意操作:修改管理员账密。
远程操控:安装后门。
破坏数据:恶意删除数据。
03SL注入的防范措施
网络层面:
1、WAF:使用WAF设备进行防范
代码层面:
1、对输入进行严格的转义和过滤
2、PDO预处理
3、使用参数化(Parameterized)
04 SQL注入可能存在的地方
1、与数据库交互的相关页面:
http://www.*****.com/***.asp?id=xx (ASP注入)
http://www.*****.com/***.php?id=xx (php注入)
http://www.*****.com/***.jsp?id=xx (jsp注入)
2、登录、更新、注册等:
3、HTTP:
可能出现注入的地方:http头、cookices、referee、user agent,post提交数据包的地方等等:
05 SQL注入分类
数字型
字符型
注:怎样区分数字型和字符型?
“单引号”法和1=1和1=2法
http://www.baidu.com/php?id=1' :在最后加个'
http://www.baidu.com/php?id=1 and 1=1 :在最后加个and 1=1
http://www.baidu.com/php?id=1 and 1=2 :在最后加个and 1=2
06 SQL注入提交方式
get提交:地址栏就可以看见参数,并进行添加或修改
post提交:通过burp抓包
cookie提交:通过burp抓包
http头部信息:
07 SQL注入类型
1、联合查询注入(UNION):
合并两个或多个SQL语句集合起来,得到联合的查询结果
2、报错注入(ERROR):
后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端
3、布尔盲注(Boolean)(类似暴力破解):
在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办?
通过大于几,小于几,判断库名、表名、用户名、密码长度。
再通过ASCII码,大于几,小于几;判断库名、表名、用户名、密码都是什么字母
4、时间盲注(sleep)(类似暴力破解):
用沉睡(sleep)时间来判断。
5、http头部信息注入:
先burp抓包到信息,然后更改http头、cookices、referee、user agent,post提交数据包。
6、WAF绕过:
如果企业有WAF,怎么骗过WAF的防护呢?
1、简单编码绕过:
比如WAF检测关键字,那么我们让他检测不到就可以了。比如检测union,那么我们就用%55 也就是U的16进制编码来代替U, union写成 %55nION,结合大小写也可以绕过一些WAF,你可以随意替换一个或几个都可以。
2、注释绕过:
把敏感词放到注释里面,注意,前面要加一个!(/?id=1/union/union/select/select+1,2,3/*)
3、分隔重写绕过:
把关键字分隔,/?id=1+un//ion+sel//ect+1,2,3—
4、使用逻辑运算符or/and绕过
比如想写id=74,就可以写成下列样式:
/?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
08sqlmap工具
针对SQL注入漏洞的利用工具也是越来越智能,sqlmap是目前被使用最多的注入工具,这是一款国外开源的跨平台SQL注入工具,在kali上就可以直接用,用Python开发,支持多种方式以及几乎所有类型的数据库注入,对SQL注入漏洞的兼容性也非常强。