书单
《SQL注入攻击与防御第2版》
原理
注入攻击的本质,是吧用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。当然,想要研究SQL注入需要深入了解每种数据库的SQL语法及特性。
危害
通过SQL注入攻击,可以获取、删除、修改数据库信息,并提供提权来控制web服务器等其他操作,数据库信息泄露的话,用户信息被泄露,非法倒卖,危害企业政府,国家安全。《刑法》、《网络安全法》都有明确提到计算机危害的严重性。
SQL注入流程
- 判断注入类型
- 判断注入字段数
- 查询回显位
- 查询数据库
- 查询表,字段名(列名)
- 查询对应内容
测试注入:sqlmap.py -u "url"
注数据库:sqlmap.py -u "url" --dbs
注当前数据库:sqlmap.py -u "url" --current-db
注表名:sqlmap.py -u "url" -D 库名 --tables
注列名:sqlmap.py -u "url" -D 库名 -T 表名 --columns
注数据:sqlmap.py -u "url" -D 库名 -T 表名 -C 列名,列名 --dump
分类及常用工具
以注入技术分类:错误注入,布尔注入,UNION注入,时间盲注,ASCII逐字解码
常用工具:SQLmap,Havij(胡萝卜),Pangolin(穿山甲)
防御
- 不要信任用户的输入,对用户输入进行检测,通过正则表达式,限制输入长度,对单引号和双“_”等进行转换
- 不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取
- 不要使用管理员等高级权限的数据库连接,为每个应用使用单独的,权限有限的账号
- 不要吧机密信息明文存放,采用加密或哈希(加盐)处理敏感信息
- 应用的异常信息应该给出尽可能少的提示,最好使用自定义错误信息对原始错误信息进行包装