渗 透 测 试
之 SQL 注 入(1)
前言
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动。在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一。
01
基本介绍
02
产生原因
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
03
类型分类
SQL注入类型大致可以分为三类:
1. 从注入手法分类可以分为:联合查询注入、报错型注入、布尔型注入、延时注入、堆叠注入;
2. 从数据类型上可以分为:字符型(即输入的输入使用符号进行过滤)、数值型(即输入的输入未使用符号进行过滤);
3. 从注入位置可以分类为:GET数据(提交数据方式为GET,大多存在地址栏)、POST数据(提交数据方式为POST,大多存在输入框中)、HTTP头部(提交数据方式为HTTP头部)、cookie数据(提交数据方式为cookie)。
04
产生危害
SQL注入漏洞常见且危害性大,具体表现为:
绕过登录验证
使用万能密码登录网站后台等
获取敏感数据
获取网站管理员帐号、密码等
文件系统操作
列目录,读取、写入文件等
注册表操作
读取、写入、删除注册表等
执行系统命令
远程执行命令
05
举例
下面我们拿sqli-labs闯关游戏来举例。
1.联合查询注入
其中最重要的是页面要有显示位,即爆出来的库信息能在页面上当作正常数据显示出来。然后爆出来的库信息要放在select后相应的位置。下面是操作步骤:
首先判断闭合类型
?id=1' and 1=1 --








extractvalue函数:extractvalue(1,2)在xml文档中提取相应的值,第一个数值表示xml字符串,第二个是xml路径。注入的时候,使用的方式大概为?id=1 and extractvalue(111,'~sdfggfds'),发现第二位的属于会在报错代码中显示。使用的限制为对mysql版本有要Mysql5.0 以上才能使用函数。
UpdateXml函数:该函数共有三个参数,第一个参数是XML文档对象的名称,第二个参数是xml路径,第三个参数是String格式替换查找到的符合条件的数据。注入的时候,使用的方式大概为id=1 and updatexml(1,concat(0x7e,(查询的内容),0x7e),1),使用的限制为对mysql版本有要Mysql5.0 以上才能使用函数。
Floor函数:注入的时候,使用的方式大概为?id=1 and (select 1 from (select count(*),concat((select 查询的内容 from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a) -- ,且适应任何mysql版本。
3.布尔型注入





4.延时注入

06
防御方法
防止注入漏洞需要将数据与命令语句、查询语句分隔开来。
• 最佳选择是使用安全的API,完全避免使用解释器,或提供参数化界面的接口,或迁移到ORM或实体框架。
注意:当参数化时,存储过程仍然可以引入SQL注入,如果PL/SQL或T-SQL将查询和数据连接在一起,或者执行带有立即执行或exec()的恶意数据。
• 使用正确的或“白名单”的具有恰当规范化的输入验证方法同样会有助于防止注入攻击,但这不是一个完整的防御,因为许多应用程序在输入中需要特殊字符,例如文本区域或移动应用程序的API。
• 对于任何剩余的动态查询,可以使用该解释器的特定转义语法转义特殊字符。
注意:SQL结构,比如:表名、列名等无法转义,因此用户提供的结构名是非常危险的。这是编写软件中的一个常见问题。
• 在查询中使用LIMIT和其他SQL控件,以防止在SQL注入时大量地泄露记录。
关于我们:
河北镌远网络科技有限公司(Hebei JYCYBER TechnologyCo.,Ltd.)是一家集人才、技术和经验于一体的,提供全面网络安全解决方案的专业服务商。镌远科技致力于为各行业的网络安全需求提供软件研发和通用解决方案,业务领域主要包括基础服务、咨询业务、产品研发和安全培训四大版块,各版块相互独立又相辅相成,完美阐释了“专业服务、全程服务、延伸服务”的服务体系和“单一业务与长远目标相融合”的服务理念。
关注镌远科技,关注网络安全!
河北分公司:河北镌远网络科技有限公司
地址:河北省邯郸市丛台区中华北大街193号慧谷大厦14层
总公司:北京冠程科技有限公司
地址:北京市昌平区科技园区东区产业基地企业墅上区一号楼九单元四层
实训基地:河北省石家庄市电子信息学校冠程科技研究与实训中心


欢迎扫描关注我们,及时了解更多关于网络安全相关知识

