word基于SQL注入的渗透性测试技术研究.docx
《word基于SQL注入的渗透性测试技术研究.docx》由会员分享,可在线阅读,更多相关《word基于SQL注入的渗透性测试技术研究.docx(13页珍藏版)》请在冰豆网上搜索。
![word基于SQL注入的渗透性测试技术研究.docx](https://file1.bdocx.com/fileroot1/2022-10/7/6f55abc5-c028-4ed0-ad2d-043b2b159bc9/6f55abc5-c028-4ed0-ad2d-043b2b159bc91.gif)
基于SQL注入的渗透性测试技术研究第28卷
VO1.28
第l5期
NO.15
计算机工程与设计
ComputerEngineeringandDesign
2007年8月
Aug.2007
基于SQL注入的渗透性测试技术研究
余静,高丰,徐良华,朱鲁华
(江南计算技术研究所,江苏无锡214083)
摘要:
为了提高数据库系统的安全性,及时发现,防范网站中可能存在
的SQL注入漏洞,分析了基于SQL注入的渗透性测
试技术,在此基础上提出了渗透性测试的原型系统,给出了主要的功
能,通过对动网论坛的渗透性测试分析比较了原型系
统的效能.实验表明,该原型系统能较好发现系统的SQL注入的脆弱
点,从而帮助管理员提升系统的安全性.
关键词:
渗透测试;SQL注入;代码注入;函数注入;缓冲区溢出
中图法分类号:
TP393,08文献标识码:
A文章编号:
1000.7024(2007)15.3577.03
ResearchonpenetrationtestingbasedonSQLinjection
YUJing,GAOFeng,XULiang-hua,ZHULu-hua
(JiangnanInstituteofComputerTechnology,Wuxi214083,China)
Abstract:
InordertoimprovethesecurityofdatabasesystemandfindtheSQLi
njectionvulnerabilitiesintime,somekeypenetration
testingtechniquesarediscussedandbasedonwhichtheprototypesystemofpe
netrationtestingisintroducedThenthemainfunctions
aregivenandfinallythroughpenetrationtestingontheobjects,efficiencyofth
eprototypesystemiscomparedandanalyzed.Theex?
perimentshowsthattheprototypesystemCanfindSQLinjectionvulnerabiliti
eseffectuallyandhelptheadministratortoenhancethe
security.
Keywords:
penetrationtesting;SQLinjection;codeinjection;functioncallin
jection;bufferoverflow
0引言
很多Web系统存在脚本安全问题.攻击者利用与脚本有
关的安全漏洞(以下在不引起歧义的情况下将”安全漏洞”简称
为”漏洞”),可以访问原本不能访问的目录,甚至获取系统管理
员的权限”.主要的脚本攻击方法有结构化查询语言注入攻
击(SQL注入攻击)和跨站脚本攻击(css攻击).Web系统通常
的实现模式是在前端采用脚本语言,后端使用关系数据库服务器.而结构化查询语言(SQL)正是一种实现前端与关系数据
库进行交互的文本语言,也是目前使用最广泛的标准数据查
询语言.对于在前端采用ASP,JSP,PHP,PERL等脚本语言,
后端使用MSSQLServer,Access,Oracle,MYSQL,DB2,Informix
等数据库的Web系统,都可能存在SQL注入类型漏洞.
还没有一个严格的定义来解释什么是sOL注入漏洞,但
其本质是攻击者能够利用应用程序没有对用户输入的数据进
行严格约束和合法性检查等错误在程序中插入并执行自己构
造的sQL语句.例如,攻击者通过修改应用程序的Web表
单的输入域或页面请求的查询字符串等输入参数插入一系列
的SQL命令来改变数据库查询语句,从而欺骗服务器执行恶
意的SQL命令,实现对数据库未经授权的访问.
为降低甚至根除SQL注入漏洞带来的安全威胁,提高
Web系统的安全性,需要一种技术帮助系统管理员尽可能找
出系统中存在的SQL注入漏洞.渗透性测试通常运用成熟的
攻击性检测方法和技术,根据具体情况,对被测对象的网络和
计算环境实施实际的攻击性检测.其目的是检验被测对象网
络和计算环境的安全性和抗攻击的能力,从而更加准确掌握
被测对象整体的实际安全性和实际的抗网络攻击能力.本
文介绍一个基于SQL注入的渗透性测试原型系统以及相应的
测试技术,希望通过渗透测试的方法帮助系统管理员提高Web
系统的安全性.1SQL注入渗透性测试技术
根据SQL注入过程的不同阶段,SQL渗透测试技术大致
可以分为渗透准备技术和渗透实施技术.渗透准备技术包括
注入点的定位,数据库指纹识别和表结构的确定.寻找注入点
目前主要有单引号法和1=1,1=2的测试方法;数据库指纹识
别,根据不同数据库各自拥有的系统表以其在Web环境下的读
取权限来进行区分,当然对于SQLServer,利用user,db_nameO
等内置变量,函数在类型转换时出现的错误提示,来判断数据
库的类型也是常用的方法;表结构的确定,不同的测试环境,
收稿日期:
2006.09.03E-mail:
jxyujing@gmail.tom
作者简介:
余静(1982一),女,江西景德镇人,硕士,研究方向为网络安
全;高丰(1972一),男,浙江丽水人,博士,高级工程师,研究方向
为网络安全;徐良华(1963一),男,安徽无为人,博士,高级工程师,研究
方向为网络安全;朱鲁华(1964--),男,江苏盐城人,博士,教
授,高级工程师,博士生导师,研究方向为操作系统,网络安全
-——
3577-——
方法不同,比如在PHP+MYSQL的注入,就可以利用返回的数
据集或是构造特殊语句确定未知数据结构的字段及类型.
渗透实施技术则使用操作SQL语句,代码注入,函数注
入,缓冲区溢出等多种方式来实现重要信息的获取,木马上传,用户权限的提升.本文主要介绍渗透实施技术.
1.1操作SQL语句
通过添加WHERE子句的元素来修改已有的SQL语句,
或者是使用UNION,INTERSECT,ExCEPT(sYBAsE),MINUS
(0RACLE)等set操作来扩展SQL语句.
代表性的例子就是通过修改用户认证的WHERE子句,
使得WHERE条件始终成立,达到绕过认证的目的.SELECT
FROMusersWHEREusemame=Ibob‟andpassword=„mypass.
word‟这是一个检查用户身份的简单查询语句,如果密码输入
部分输入的不是mypassword而是mypassword‟ora=.a,于是
将SQL语句修改如下:
SELECTFROMuserSWHEREusemame=
„bob.andpassword_.mypassword.ora_‟a无论mypassword是
否正确,由于or语句的存在,使得WHERE子句始终成立,于
是就可以绕过认证访问应用程序.
UNION是在操作SQL攻击使用的最多的操作之一,可返
回其它表的数据集,实现跨表查询,SELECTproductname
FROMalljaroductsWHEREproduct..,攻击_namelike%Chairs%
者试图改变输入参数,执行SQL语句:
SELECTproductname
FROMall~aroductsWHEREproduct_
namelike‟%Chairs‟UNION
SELECTusemameFROMdba—
usersWHEREusemamelike%.不仅返回了allproducts表中所要查询产品的产品名而且也得到
了dbausers表中存储的所有数据库的用户账号.
1.2代码注入
代码注入指的是攻击者插入额外的SQL语句或是数据库
命令到SQL查询中,这种攻击在SQLSe~er服务器上频繁的
发生,而由于EXECUTE语句和MULTIPLESQL语句在Oracle
上的不到支持,因此这种攻击方式很少针对Oracle数据库的.
通过使用SELECT,DELETE,UPDATE,INSERT完成对用
户表users的查询,删除,更新,向表中添加自己构建的数据.
(1)SELECT语句
SELECTFROMusersWHEREusemame=„bob.andpass—
word=„mypassword‟:
SELECTFROMusers--‟
(2)DELETE语句
SELECTFROMusersWHEREusemame=.bob‟andpass-
word=.mypassword.:
DELETEFROMusersWHEREusemame=
„admin.
(3)UPDATE语句
SELECTFROMusersWHEREusemame=.bob.andpass-
word=.mypassword.:
UPDATE‟users.SET‟password‟=„newpas‟
WHEREusemame=„neo....
(4)sERT语句
SELECTFROMusersWHEREusemame=.bob‟andpass-word_‟mypassword‟;INSERTINTO.users‟usemame‟,.password‟)
VALUES(.neo2‟,‟newpas5‟)一一.
1.3函数注入
函数注入就是将数据库的内置函数或者是用户自己定义
——
3578——
的函数插入到存在注入漏洞的SQL语句中,实现对数据库中
的数据操作或是完成操作系统函数调用.
ORACLE数据库允许函数作为SQL语句的一部分执行,
缺省情况下ORACLE提供超过1000个函数,尽管其中只有小
部分能在注入攻击中使用,但是此类攻击能对数据库造成很
大的危害.
对于SELECTTRANSLATE(„userinput‟..0123456789AB.
CDEFGHIJKLMNOPQRSTUVWXYZ‟,‟0123456789‟)FROMdual;
这个查询语句其它几种注入方法都很难对其进行攻击,但是
函数注入却很好实现:
在用户输入部分注入数据库函数UTL
HTTP.request,可以向web服务器请求web页面:
SELECT
TRANSLATE(“llUTLHTTP.REQUESTttrI:
//192.168.1.1,)l_”,
.0l23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ..
„0123456789.)FROMdual;也可以注入自己定义的函数,函数
adduser是用户包MYAPPADMIN中被标为”PRAGMATRANS.
ACTION”的自定义函数,语句SELECTTRANSLATE(.Cadmin.,.llmyappadmin.adduser.newpass‟)ll”,.0l23456789ABCDEFGH-
IJKLMNOPQRSTUVWXYZ‟,‟0123456789.)FROMdual;执行后
可以为应用程序