SQL注入解决漏洞研究与防范方法论文.docx

上传人:b****7 文档编号:8820726 上传时间:2023-02-01 格式:DOCX 页数:9 大小:39.58KB
下载 相关 举报
SQL注入解决漏洞研究与防范方法论文.docx_第1页
第1页 / 共9页
SQL注入解决漏洞研究与防范方法论文.docx_第2页
第2页 / 共9页
SQL注入解决漏洞研究与防范方法论文.docx_第3页
第3页 / 共9页
SQL注入解决漏洞研究与防范方法论文.docx_第4页
第4页 / 共9页
SQL注入解决漏洞研究与防范方法论文.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

SQL注入解决漏洞研究与防范方法论文.docx

《SQL注入解决漏洞研究与防范方法论文.docx》由会员分享,可在线阅读,更多相关《SQL注入解决漏洞研究与防范方法论文.docx(9页珍藏版)》请在冰豆网上搜索。

SQL注入解决漏洞研究与防范方法论文.docx

SQL注入解决漏洞研究与防范方法论文

SQL注入解决漏洞研究与防范方法

StructuredQueryLanguageInjectionLeakStudyAndDefenseMeasure

姜志坤

摘要:

在现今的数字世界中,人们发此刻维持公布的Internet连接的同时,爱惜网络和运算机系统的平安变得愈来愈困难。

病毒、木马、后门、蠕虫等解决层出不穷,虚假网站的钓鱼行为也让警戒性不高的公众深受其害。

为了减轻信息泄露及系统被解决带来的风险,企业和机构开始对自己的系统进行渗透测试,找出其中存在的漏洞和薄弱环节。

本文通过对目前最流行的SQL注入解决漏洞的解决方式做了一一的分析,并提出了检测和防范的方法。

关键字:

SQL注入解决 脚本解决网络平安解决防范模型有害代码

SQL注入(SQLInjection)解决是目前网上最流行最热点的黑客脚本解决方式之一,那什么是SQL注入式解决呢?

它是指黑客利用一些Web应用程序(论坛、留言本、文章发布系统)中某些疏于防范的用户能够提交或修改的数据的页面,精心构造SQL语句,把特殊的SQL指令语句插入到系统实际SQL语句中并执行它,以取得用户名、密码等灵敏信息,从而达到获取主机操纵权限的解决方式。

1.SQL注入解决原理

1.1SQL注入解决实现原理

结构化查询语言(SQL)是一种用来和数据库交互的文本语言,SQLInjection确实是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。

它的产生主若是由于程序对用户输入的数据没有进行细致的过滤,致使非法数据的导入查询。

SQL注入解决主若是通过构建特殊的输入,这些输入往往是SQL语法中的一些组合,这些输入将作为参数传入Web应用程序,通过执行SQL语句而执行入侵者想要的操作,下面以登录验证中的模块为例,说明SQL注入解决的实现方式。

在Web应用程序的登录验证程序中,一样有效户名(username)和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。

其原理是通过查找user表中的用户名(username)和密码(password)的结果来进行授权访问,典型的SQL查询语句为:

Select*fromuserswhereusername=′admin′andpassword=′smith′

假设是别离给username和password赋值“admin'or1=1--”和“aaa”。

那么,SQL脚本说明器中的上述语句就会变成:

select*fromuserswhereusername=′admin′or1=1--andpassword=′aaa′

该语句中进行了两个判定,只要一个条件成立,那么就会执行成功,而1=1在逻辑判定上是恒成立的,后面的“--”表示注释,即后面所有的语句为注释语句。

同理通过在输入参数中构建SQL语法还能够删除数据库中的表,查询、插入和更新数据库中的数据等危险操作:

(1)droptableauthors—假设是存在authors表那么删除。

(2)unionselectsum(username)fromusers—从users表中查询出username的个数。

(3)insertintousersvalues(666,′attacker′,′foobar′,0xffff)—在user表中插入值。

(4)unionselect@@version,1,1,1--查询数据库的版本。

(5)exec′dir′通过xp_cmdshell来执行dir命令。

1.2SQL注入解决分析

SQL注入能够说是一种漏洞,也能够说是一种解决。

当程序中的变量处置不妥,对用户提交的数据过滤不足,都可能产生那个漏洞。

它的解决原理确实是利用用户提交或可修改的数据,把想要的SQL语句插入到系统实际SQL语句中,轻那么取得灵敏的信息,重那么操纵效劳器。

例如Web应用有一个登录页面,那个登录页面操纵着用户是不是有权访问应用,要求用户输入一个名称和密码。

解决者在用户名字和密码输入框中输入1'or'1'='1之类的内容。

该内容提交给效劳器以后,效劳器运行上面的代码构造出查询用户的SQL命令,但由于解决者输入的内容超级特殊,因此最后取得的SQL命令变成:

“select*fromuserswhereusername=''or'1'='1'andpassword=''or'1'='1'”。

效劳器执行查询或存储进程,将用户输入的身份信息和效劳器中保留的身份信息进行对照,由于SQL命令事实上已被注入式解决修改,已经不能真正验证用户身份,因此系统会错误地授权给解决者。

SQL注入是通过目标效劳器的80端口进行的,这和一般的Web页面访问没什么两样,因此一样的防火墙可不能对这种解决发出警告或拦截。

这种解决可能引发的危害取决于该网站的软件环境和配置。

当Web效劳器以操作员的身份访问数据库时,利用SQL注入解决就可能删除所有表格,创建新表格。

而当治理员以超级用户的身份访问数据库时,利用SQL注入解决就可能操纵整个SQL效劳器,在某些配置下解决者乃至能够自行创建用户账号以完全操作数据库所在的效劳器。

SQL注入的方式很多,而且在解决时会碰着各类各样的SQL语句,因此一样解决者需要丰硕的体会和耐心,才能绕过一些检测和处置提交构造的SQL语句,从而取得想要的有效信息。

那个进程需要花费很多的时刻,假设是仅以这种手动方式进行SQL注入解决的话,许多存在SQL注入漏洞的ASP网站会平安很多了,不是漏洞不存在了,而是利用那个漏洞入侵的本钱太高了。

但此刻解决者可用一些现成的黑客工具来辅助SQL注入解决,加速入侵的速度。

由于SQL注入解决利用的是SQL语法,使得这种解决具有普遍性。

理论上说,关于所有基于SQL语言标准的数据库软件都是有效的,包括MSSQLServer,Oracle,DB2,Sybase,MySQL等。

固然,各类软件有自身的特点,最终的解决代码可能不尽相同。

1.3SQL注入解决进程

(1)绕过身份认证机制

一个登录界面,需要输入用户名和密码,然后Post到另一个页面,进行身份认证,因此解决者只需在用户名和密码的输入框中都输入"’or’1’=’1"的内容,那么解决者就能够够够不通过任何认证而直接进入下一个页面,并拥有和正常登录用户一样的全数特权。

缘故是什么呢?

咱们比较一下正常常利用户登录和解决者登录时的两种SQL语句:

1)正常常利用户(用户名为grace,密码为1111):

SQL="select3fromadminwhereusername=’grace’andpassword=’1111’

2)解决者(用户名和密码都为"’or’1’=’1"):

SQL="select3fromadminwhereusername=’’or’1’=’1’andpassword=’’or’1’=’1’

能够看到由and连接的两个条件都被一个永久成立的’1’=’1’所代替,执行的结果为真,因此效劳器也会以为条件成立,于是把login标志设为true,让解决者以合法身份登录进入下一个页面。

(2)对数据库系统进行读取、插入、修改等操作

如一个商品查询页面?

id=1,程序设计者本来设计用意是显示id为1的商品信息,而解决者利用程序中没有对id的内容进行检查之机,插入自己的代码。

从中摘录两句最关键的语句:

SQL="select3fromproductwhereproductid=’"&request("id")&"’"SQL,conn,0,3

能够看到,id没有进行任何的处置,直接组成SQL语句并执行,而解决者在明白该系统的数据库中表及表中字段名称的情形下(目前网上免费的论坛系统或是商业网站代码超级多),利用SQL语句特性(分号是将两句SQL语句分开的符号),直接向数据库中添加记录:

?

id=1;Insertinto"admin"(’username’,’password’,’type’)values(’hacker’,’pass123456’,’治理员’),然后解决者就能够够够直接用适才成立的帐户进行登录了。

通过如此的方式,解决者还能够对系统做任何的情形,包括增加、修改、删除记录。

(3)执行系统命令

假设是Web主机利用MSSQL数据库系统,而list.asp中存在注入点,那么解决者就能够够够用到xp_cmdshell那个扩展存储进程,xp_cmdshell是一个超级有效的扩展存储进程,用于执行系统命令,比如dir,net等,解决者能够依照程序的不同,提交不同的语句:

ww.XXX.comö?

id=1;?

exec?

’dir’

XXX.comö?

id=1;?

exec?

?

’dir’

或能够插入下面的语句

netuserhacker/add

netlocalgroupadministratorshacker/add

来向Web主机系统中加入一个非法的治理员帐号,只是如此的做法必需同时知足几个条件,第一ASP利用的SQLSERVER帐号必需是治理员,第二请求的提交变量在整个SQL语句的最后,不然构造出来的SQL语句在语法上是错误的,也就不可能执行成功。

2.SQL注入解决的检测方式及方式

2.1检测方式

SQL注入解决检测分为入侵前的检测和入侵后的检测。

入侵前的检测,能够通过手工方式,也能够利用SQL注入工具软件。

检测的目的是为预防SQL注入解决,而关于SQL注入解决后的检测,主若是针对日记的检测,SQL注入解决成功后,会在IIS日记和数据库中留下“痕迹”。

2.2检测方式

(1)输入验证检查

动态的SQL语句是一个进行数据库查询的壮大的工具,但把它和用户输入混合在一路就使SQL注入成了可能。

将动态的SQL语句替换成预编译的SQL或存储进程对大多数应用程序是可行的。

预编译的SQL或存储进程能够将用户的输入作为参数而不是SQL命令来接收,如此就限制了入侵者的行动。

固然,它不适用于存储进程中利用用户输入来生成SQL命令的情形。

在这种情形下,用户输入的SQL命令仍可能取得执行,数据库仍然有受SQL注入解决的危险。

假设是一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。

假设是能够同意字母,那就要检查是不是存在不可同意的字符。

确保应用程序要检查以下字符:

分号、等号、破折号、括号和SQL关键字。

(2)数据检查

利用HDSI、NBSI和Domain等SQL注入解决软件工具进行SQL注入解决后,都会在数据库中生成一些临时表。

通过查看数据库中最近新建的表的结构和内容,能够判定是不是曾经发生过SQL注入解决。

(3)日记检查

在Web效劳器中假设是启用了日记记录,那么IIS日记会记录访问者的IP地址,访问文件等信息,SQL注入解决往往会大量访问某一个页面文件(存在SQL注入点的动态网页),日记文件会急剧增加,通过查看日记文件的大小和日记文件中的内容,也能够判定是不是发生过SQL注入解决。

(4)其他

SQL注入解决成功后,入侵者往往会添加用户、开放3389远程终端效劳和安装木马后门等,能够通过查看系统治理员账号、远程终端效劳器开启情形、系统最近日期产生的一些文件等信息来判定是不是发生过入侵。

3.SQL注入解决防范模型及方法

3.1防范模型

在前人提出的SQL注入解决的检测/防御/备案模型基础上,本人进行了检测进程的优化,提出了一种SQL自动防范模型如图1所示,本模型中所有检测都在效劳器端进行。

第一对IP地址进行检测,假设是该IP地址在SQL注入解决库中,那么禁止该用户的访问,并再次将相关信息添加到SQL注入解决库中;假设是用户是第一次访问,那么对提交字符进行检测,假设是是非法字符,那么检测是不是达到规定的访问值,假设是达到那么禁止用户访问,同时发送邮件给系统治理员。

本模型能够幸免解决者穷举解决并可自由设置解决次数的上限,一旦抵达上限,系统将自动发送邮件给治理员,治理员收到邮件后能够进行相应的处置,假设是条件许诺,还能够增加短信发送,增强SQL注入解决的自动防范能力。

图1

本模型的最大特点是自动将解决信息及时地传递给治理员,方便治理员及时做出响应。

核心代码如下:

substopit()

"存在禁止访问ip地址:

"&rs("ip")

""

endsub

dimattack_browser,attack_ip,attack_host

attack_browser=("Http_User_Agent")

attack_ip=("ReMote_Addr")

attack_host=("Remote_Host")

setrs1=("")'从访问禁止ip中查询是不是存在访问者的IP地址,假设是存在那么禁止其访问

SQL1="selectipfromprohibit_ipwhereip=′"&attack_ip&"′"

SQL1,conn,1,3

ifnotthen

callstopit()

endif

setrs1=nothing'从系统防范设置中查出email地址和运行的访问次数

setrs2=("")

SQL2="select*fromD_setup"

SQL2,conn,1,3

ifnotthen

session("email")=rs2("email")

session("ok_count")=rs2("ok_count")

endif

setrs2=nothing

url=("Query_String")

callchk(url)'从Attack_count表中获取A_count的次数,假设是A_count次数不小于默许的访问次数那么禁止

ifchk(url)then

setrs3=("")

SQL3="selectA_countfromattack_count"

SQL3,conn,1,3

ifnotthen

ifrs3("A_count")>=session("ok_count")then'插入解决记录信息到attack_record表中

t1_SQL1="insertintoAttack_record(ip,Attacktime,Host,Browser)value(′"&attack_ip&"′,now(),′"&attack_host&"′,′"&attack_browser&"′)"

setrsdel=(t1_SQL1)

callstopit()

ok=Jmail(session("email"),"SQL注入解决告警!

","解决者IP地址:

"&attack_ip)

else

temp_a_count=rs3("a_count")+1'插入解决ip和a_count信息到Attack_count表中

t1_SQL2="insertintoAttack_count(ip,A_count)value(′"&attack_ip&"′,′"&temp_a_count&"′)"

setrsdel=(t1_SQL2)

endif

endif

3.2防范方法

SQL注入解决防范方式目前已经有很多,总结起来有以下方式:

(1)在效劳端正式处置之前对提交数据的合法性进行检查。

假设是一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。

假设是能够同意字母,那就要检查是不是存在不可同意的字符。

确保应用程序要检查以下字符:

分号、等号、破折号、括号和SQL关键字。

另外限制表单或查询字符串输入的长度也是一个好方式。

假设是用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加解决者在SQL命令中插入有害代码的难度。

(2)封装客户端提交信息;

(3)替换或删除灵敏字符/字符串。

利用双引号替换掉所有效户输入的单引号,那个简单的预防方法将在专门大程度上预防SQL注射解决,单引号常常终止掉SQL语句,可能给予输入者没必要要的权利。

用双引号替换掉单引号能够使许多SQL注入解决失败。

如:

“select*fromuserswhereusername=or1=1andpassword=or1=1”显然会取得与“select*fromuserswhereusername=''or'1'='1'andpassword=''or'1'='1'”不同的结果。

(4)屏蔽犯错信息。

解决者有时从客户端提交特殊的代码,依照IIS给出的犯错提示信息来搜集程序及效劳器的信息,从而获取想取得的资料。

假设是把IIS设置成不管出什么样的ASP错误,只给出一种错误提示信息,那么解决者就没方法入侵了。

(5)不要用字串联接成立SQL查询,而利用SQL变量,因为变量不是能够执行的脚本。

动态的SQL语句是一个进行数据库查询的壮大的工具,但把它和用户输入混合在一路就使SQL注入成了可能。

将动态的SQL语句替换成预编译的SQL或存储进程对大多数应用程序是可行的。

预编译的SQL或存储进程能够将用户的输入作为参数而不是SQL命令来接收,如此就限制了入侵者的行动。

固然,它不适用于存储进程中利用用户输入来生成SQL命令的情形。

在这种情形下,用户输入的SQL命令仍可能取得执行,数据库仍然有受SQL注入解决的危险。

(6)目录最小化权限设置,给静态网页目录和动态网页目录别离设置不同权限,尽可能不给写目录权限;

(7)修改或去掉Web效劳器上默许的一些危险命令,例如ftp、cmd、wscript等,需要时再复制到相应目录;

(8)将用户登录名称、密码等数据加密保留,然后再将它与数据库中保留的数据比较,这相当于对用户输入的数据进行了“消毒”处置,用户输入的数据再也不对数据库有任何特殊的意义,从而也就幸免了解决者注入SQL命令。

数据灵敏信息超级规加密,通常在程序中对口令等灵敏信息加密都是采纳md5函数进行加密,即密文=md5(明文),本文推荐在原先的加密的基础上增加一些超级规的方式,即在md5加密的基础上附带一些值,如密文=md5(md5(明文)+123456)。

(9)数据库最小权利法那么。

应用程序利用的连接数据库的账户应该只拥有必需的特权,如此有助于爱惜整个系统尽可能少的受到入侵者的危害。

通过限制用户权限,隔离了不同账户可执行的操作,用不同的用户账户执行查询、插入、更新、删除操作,能够幸免本来用于执行SELECT命令的地址却被用于执行INSERT、UPDATE或DELETE命令。

应用程序不该该用SA或治理员账户去连接数据库。

作为替代,它应该只有访问它要挪用的单个库的权利。

4.终止语

SQL注入解决在网上超级普遍,许多ASP、PHP论坛和文章治理系统、下载系统和新闻系统都存在那个漏洞。

由于SQL注入解决针对的是应用开发进程中的编程不周密,因此关于绝大多数防火墙来讲,这种解决是“合法”的,问题的解决只有依托于完善编程。

另外,也能够利用现有的SQL注入漏洞扫描器对整个网站中的关键代码进行扫描,查找网站页面中存在的SQL注入解决点。

关于有问题的页面,能够及时删除或更新。

本文通过对SQL注入解决的方式、原理和解决实施进程进行了论述和总结,并给出了一些常见的SQL注入解决防范的方式。

参考文献

[1]高永强郭世泽网络平安技术与应用大典人民邮电出版社

[2]李匀等网络渗透测试-爱惜网络平安的技术、工具和进程电子工业出版社

[3]温鹏滕大鹏仲治国七剑黑客入门工具实例演练100山东电辅音像出版社

[4]SQL注入解决及其防范检测技术研究

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1