链接:https://zhuanlan.zhihu.com/p/23569276
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动。在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一。
什么是SQL注入
SQL注入基本介绍
结构化查询语言(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言。1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。
SQL注入(SQL Injection)是一种常见的web安全漏洞,攻击者利用这个问题,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
SQL注入产生原因
针对SQL注入的攻击行为可描述为通过在用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结为以下两个原因叠加造成的:
1. 程序编写者在处理应用程序和数据库交互时,使用字符串拼接的方式构造SQL语句
2. 未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中
sql注入攻击方式
SQL注入的攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注:
1、可显注入:攻击者可以直接在当前界面内容中获取想要获得的内容
2、报错注入:数据库查询返回结果并没有在页面中显示,但是应用程序将数据库报错信息打印到了页面中,所以攻击者可以构造数据库报错语句,从报错信息中获取想要获得的内容
3、盲注:数据库查询结果无法从直观页面中获取,攻击者通过使用数据库逻辑或使数据库库执行延时等方法获取想要获得的内容
如何进行SQL注入攻击
SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西。不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是,他们的客户极其容易受到攻击。下面的三部曲从漏洞发现到漏洞确认,再到漏洞利用,最后漏洞防御四个方面的技术做了详细的讲解。
SQL注入三部曲:
1、 渗透攻防Web篇-SQL注入攻击初级
http://bbs.ichunqiu.com/thread-9518-1-1.html
2、 渗透攻防Web篇-SQL注入攻击中级
http://bbs.ichunqiu.com/thread-9668-1-1.html
3、 渗透攻防Web篇-SQL注入攻击高级
http://bbs.ichunqiu.com/thread-10093-1-1.html
SQL注入经验与技巧
经验很重要,成功往往在多次失败之后。要想减少失败,就多看文章积累技巧吧,下面集合了i春秋论坛相关技术文章,从各个方面介绍了SQL注入。
1、 SQL学习笔记
http://bbs.ichunqiu.com/thread-2274-1-1.html
2、 人人都可学会的MySQL高级注射技巧
http://bbs.ichunqiu.com/thread-10359-1-1.html
3、 详解MySQL注射
http://bbs.ichunqiu.com/thread-10222-1-1.html
4、 浅谈.NET应用程序SQL注入
http://bbs.ichunqiu.com/thread-7636-1-1.html
5、 在SQL注入中使用DNS获取数据
http://bbs.ichunqiu.com/thread-10005-1-1.html
6、 WEB安全系列之如何挖掘sql注入漏洞(二次注入)
http://bbs.ichunqiu.com/thread-9193-1-1.html
7、深入了解php+mysql注入及修补!
http://bbs.ichunqiu.com/thread-10090-1-1.html
8、技巧整合 - mysql注入点的另类利用
http://bbs.ichunqiu.com/thread-9903-1-1.html
9、浅谈sql注入中的Post注入
http://bbs.ichunqiu.com/thread-7762-1-1.html
相关教程
工具教程篇:
1、 SQLMAP注入教程-11种常见SQLMAP使用方法详解
http://bbs.ichunqiu.com/thread-10583-1-1.html
2、 SQLMAP tamper WAF 绕过脚本列表注释
http://bbs.ichunqiu.com/thread-10387-1-1.html
3、零基础实战审计SQL注射漏洞
http://bbs.ichunqiu.com/thread-10284-1-1.html
4、被动式SQL注入神器总结
http://bbs.ichunqiu.com/thread-8428-1-1.html
5、利用Burpsuit学习注入工具语句
http://bbs.ichunqiu.com/thread-8319-1-1.html
代码审计篇:
1、 PHP代码审计SQL注入
http://bbs.ichunqiu.com/thread-11308-1-1.html
2、Joomla 3.xSql注入漏洞分析
http://bbs.ichunqiu.com/thread-1689-1-1.html
3、 浅谈JSP安全开发之SQL注入
http://bbs.ichunqiu.com/thread-9958-1-1.html
4、 代码审计之绕过addslashes总结
http://bbs.ichunqiu.com/thread-10899-1-1.html
相关技术及文档:
1、 mysql数据库学习
http://bbs.ichunqiu.com/thread-11248-1-1.html
2、 SQL注入自学指南
http://bbs.ichunqiu.com/thread-2141-1-1.html
3、 mssql注入经常使用的命令
http://bbs.ichunqiu.com/thread-3221-1-1.html
专业的视频教程-告别文字的枯燥
1、SQL注入漏洞-视频+实验:活学活用
http://www.ichunqiu.com/course/405
2、SQL注入漏洞审计及漏洞挖掘
http://www.ichunqiu.com/course/1325
3、科普类-SQL(结构化查询语言)注入攻击的好处
- 改变SQL(结构化查询语言)代码来掩盖你的攻击
- 进行SQL(结构化查询语言)注入攻击
- 解释一个SQL(结构化查询语言)注入攻击
http://www.ichunqiu.com/course/51849
4、SQL注入漏洞发现及修补技术(有攻有防才是王道)
http://www.ichunqiu.com/course/77
SQL注入工具
1、SQLmap
sqlmap 是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
项目地址:https://github.com/sqlmapproject/sqlmap
2、SSQLInjection
超级SQL注入工具(SSQLInjection)是一款基于HTTP协议自组包的SQL注入工具,支持出现在HTTP协议任意位置的SQL注入,支持各种类型的SQL注入,支持HTTPS模式注入。目前支持Bool型盲注、错误显示注入、Union注入,支持Access、MySQL5以上版本、SQLServer、Oracle等数据库。采用C#开发,底层采用Socket发包进行HTTP交互,极大的提升了发包效率,相比C#自带的HttpWebRequest速度提升2-5倍。支持盲注环境获取世界各国语言数据,直接秒杀各种注入工具在盲注环境下无法支持中文等多字节编码的数据。
项目地址:http://www.shack2.org/article/1417357815.html
3、Pangolin
Pangolin是一款帮助渗透测试人员进行SQL注入测试的安全工具。它具备友好的图形界面以及支持测试几乎所有数据库,并能够通过一系列非常简单的操作,达到最大化的攻击测试效果。
收费的,所以不放项目地址。
4、Havij
Havij是一款自动化的SQL注入工具,它不仅能够自动挖掘可利用的SQL查询,还能够识别后台数据库类型、检索数据的用户名和密码hash、转储表和列、从数据库中提取数据,甚至访问底层文件系统和执行系统命令。
收费的,所以不放项目地址。
5、The Mole
The Mole是一款开源的自动化SQL注入工具,其可绕过IPS/IDS(入侵防御系统/入侵检测系统)。只需提供一个URL和一个可用的关键字,它就能够检测注入点并利用。The Mole可以使用union注入技术和基于逻辑查询的注入技术。The Mole攻击范围包括SQL Server、MySQL、Postgres和Oracle数据库。
项目地址:nasel.com.ar
6、SQLNinja
sqlninja是一款用perl写的一个专门针对Microsoft SQL Server的sql注入工具。和市面上其他的注入工具不同,sqlninja没有将精力用在跑数据库上,而是侧重于获得一个shell。
项目地址:http://www.northernfortress.net/
kali自带工具
7、BBQSQL
BBQSQL是一个Python编写的盲注工具(blind SQL injection framework),当你检测可疑的注入漏洞时会很有用。同时BBQSQL是一个半自动工具,允许客户自定义参数。
项目地址:https://github.com/Neohapsis/bbqsql/
8、Jsql
JSQL是一款Java开发的轻量级远程服务器数据库注入漏洞测试工具,且免费、开源、跨平台 (Windows, Linux, Mac OS X, Solaris)。
项目地址:https://code.google.com/p/jsql-injection/downloads/list
9、Sqlsus
sqlsus是一个开放源代码的MySQL注入和接管工具,sqlsus使用perl编写,基于命令行界面。sqlsus可以获取数据库结构,注入你自己的SQL语句,从服务器下载文件,爬行web站点可写目录,上传和控制后门,克隆数据库等等
项目地址:http://sqlsus.sourceforge.net/download.html
10、SQL Poizon
SQL Poizon是一个SQL注入扫描器,能够利用搜索引擎搜罗互联网上有SQL注入漏洞的网站。该工具内建浏览器和注入任务工具检查注入效果。SQL Poizon的界面非常简单,即使没有多少技术功底的人也能轻松上手。
这个很老了就不提供地址了,互联网上很多。