声明
本文仅是渗透测试技术研究,适用人群为:渗透测试人员,IT运维人员,以及Web开发人员,帮助我们在发现登录等容易发生SQL注入漏洞。严禁用于非法用途,否则产生的一切后果由所观看文章的人自行承担,IT者说不承担任何责任。
个人能力有限 如有错误 ,欢迎指出
引言
SQL注入攻击是最古老,最流行,最危险的Web应用程序漏洞之一。黑客或者恶意攻击者,一旦注入成功可以使用万能密码绕过登录验证;获取管理员账号密码;列目录,读文件,写入文件;读、写、删除注册表;远程执行命令。
什么是SQL注入
SQL注入就是利用现有应用程序的特性,攻击者在Web表单、URL等可输入数据的地方,插入恶意SQL语句一并和原有的SQL语句被数据库一起执行。SQL命令就是前端应用程序和后端数据库之间的接口。简单来说,就是攻击者在一些正常输入数据的位置,插入特殊SQL语句,但这条语句被数据库正确的执行,从而造成安全事故。
SQL注入原理
上图展示用户访问网站的数据流程。
具体如下:
- 用户通过浏览器想访问http://www.xxx.com/article.php?id=11,其中id为11的一篇文章,浏览器向Web服务器发送请求。
- Web服务器根据id=11,动态构造SQL语句:SELECT * FROM article where id =11,向数据库发送请求。
- 数据库在article表中查询出id=11的所有数据,并将所有查询的记录返回给Web服务器。Web服务器将返回的请求进行处理,并生成html文件,返回给浏览器。
- 浏览器将返回的HTML代码展示给用户。
对照访问网站数据流程,SQL注入过程是
①修改参数值等数据请求给Web服务器;
②Web服务器未经审查和过滤,将修改的数据注入到SQL语句中,SQL语句原来的功能被修改;
③数据库将一些危险敏感的信息,返回给服务器;
④攻击者获取到重要信息。
一般的SQL注入分类
按Sql注入的输入参数,分为数字型和字符串型;按数据库返回结果分为显错注入和盲注。当然也有专家将SQL注入分为:post注入,get注入,cookie注入,盲注,延时注入,搜索注入,base64注入,基本上都可以归入以上两种类型。
总结
SQL注入虽然危害极大,但还是可控可防的。从以下几点可以避免SQL注入攻击
- 在设计应用程序时,完全使用参数化查询来设计数据访问功能。
- 在组合SQL字符串时,先针对所传入的参数加入其他字符(将单引号字符前加上转义字符)。
- 如果使用PHP开发网页程序的话,需加入转义字符之功能(自动将所有的网页传入参数,将单引号字符前加上转义字符)。
- 使用php开发,可写入html特殊函数,可正确阻挡XSS攻击。
- 其他,使用其他更安全的方式连接SQL数据库。例如已修正过SQL注入问题的数据库连接组件,例如ASP.NET的SqlDataSource对象或是 LINQ to SQL。
- 使用SQL防注入系统。
- 增强WAF的防御力