Web 攻防无限制.docx
- 文档编号:3461633
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:26
- 大小:33.18KB
Web 攻防无限制.docx
《Web 攻防无限制.docx》由会员分享,可在线阅读,更多相关《Web 攻防无限制.docx(26页珍藏版)》请在冰豆网上搜索。
Web攻防无限制
Web攻防无限制
第三章Web攻防无限制
Web就是我们常说的“网页”,在进行网页浏览的时候大家是否考虑过安全方面的问题?
是否遇见过一些网页访问后系统就出现问题?
是否发现自己的首页被强行设置为XXX网站的
地址?
是否被迫观看一些无聊的广告……我们将这些现象统称为“Web攻击”。
既然被攻击,
那就应该知道攻击的原理及如何去防范这些攻击。
3.1常见ASP脚本攻击
由于ASP的方便易用,越来越多网站的后台程序使用ASP脚本语言。
但是,由于ASP
本身存在一些安全漏洞,稍不留心就会给黑客留下可乘之机。
事实上,安全不仅是网管的事,
编程人员也必须在某些安全细节上注意,养成良好的安全习惯,否则会给自己的网站带来巨
大的安全隐患。
目前,大多数网站上的ASP程序有这样那样的安全漏洞,但如果写程序的时
候注意的话,还是可以避免的。
1.用户名与口令被破解
■攻击原理
用户名与口令,往往是黑客们最感兴趣的东西,如果被通过某种方式看到源代码,后果
是严重的。
■防范技巧
涉及用户名与口令的程序最好封装在服务器端,尽量少在ASP文件里出现,涉及与数据
库连接的用户名与口令应给予最小的权限。
出现次数多的用户名与口令可以写在一个位置比
较隐蔽的包含文件中。
如果涉及与数据库连接,理想状态下只给它以执行存储过程的权限,
千万不要直接给予该用户以修改、插入、删除记录的权限。
2.验证被绕过
■攻击原理
现在需要经过验证的ASP程序多是在页面头部加一个判断语句,但这还不够,有可能被
黑客绕过验证直接进入。
98
曝光黑客曝光黑客
■防范技巧
需要经过验证的ASP页面,可跟踪上一个页面的文件名,只有从上一页面转进来的会话
才能读取这个页面。
3.INC文件泄露问题
■攻击原理
当存在ASP的主页正在制作并没有进行最后调试完成以前,可以被某些搜索引擎机动追
加为搜索对象,如果这时候有人利用搜索引擎对这些网页进行查找,会得到有关文件的定位,
并能在浏览器中察看到数据库地点和结构的细节揭示完整的源代码。
■防范技巧
程序员应该在网页发布前对其进行彻底的调试;安全专家需要固定ASP包含文件以便外
部的用户不能看它们。
首先对.inc文件内容进行加密,其次也可以使用.asp文件代替.inc文
件使用户无法从浏览器直接观看文件的源代码。
.inc文件的文件名不用使用系统默认的或者
有特殊含义容易被用户猜测到的,尽量使用无规则的英文字母。
4.自动备份被下载
■攻击原理
在有些编辑ASP程序的工具,当创建或者修改一个ASP文件时,编辑器自动创建一个备
份文件,比如:
UltraEdit就会备份一个.bak文件,如你创建或者修改了some.asp,编辑器
自动生成一个叫some.asp.bak文件,如果你没有删除这个.bak文件,攻击者有可以直接下
载some.asp.bak文件,这样some.asp的源程序就会被下载。
■防范技巧
上传程序之前仔细检查,删除不必要的文档。
对以BAK为后缀的文件要特别小心。
5.特殊字符
■攻击原理
输入框是黑客利用的一个目标,他们可以通过输入脚本语言等对用户客户端造成损坏;
如果该输入框涉及数据查询,他们会利用特殊查询输入得到更多的数据库数据,甚至是表的
全部。
因此必须对输入框进行过滤。
但如果为了提高效率仅在客户端进行输入合法性检查,
仍有可能被绕过。
99
CChhaapptteerr33WWeebb攻攻防防无无限限制制
■防范技巧
在处理类似留言板、BBS等输入框的ASP程序中,最好屏蔽掉HTML、JavaScript、
VBScript语句,如无特殊要求,可以限定只允许输入字母与数字,屏蔽掉特殊字符。
同时对
输入字符的长度进行限制。
而且不但在客户端进行输入合法性检查,同时要在服务器端程序
中进行类似检查。
6.数据库下载漏洞
■攻击原理
在用ACCESS做后台数据库时,如果有人通过各种方法知道或者猜到了服务器的
ACCESS数据库的路径和数据库名称,那么他就能够下载这个ACCESS数据库文件,这是非
常危险的。
■防范技巧
(1)为数据库文件名称起个复杂的非常规的名字,并把它放在几目录下。
所谓“非常规”,
比如有个数据库要保存的是有关书籍的信息,可不要把它取个“book.mdb”的名字,取个怪
怪的名称,比如d34ksfslf.mdb,再把它放在如/kdslf/i44/studi/的几层目录下,这样黑客要
想通过猜的方式得到你的ACCESS数据库文件就难上加难了。
(2)不要把数据库名写在程序中。
有些人喜欢把DSN写在程序中,比如:
DBPath=
Server.MapPath(“cmddb.mdb”)conn.Open“driver={MicrosoftAccessDriver(*.mdb)};
dbq=”&DBPath
假如万一给人拿到了源程序,你的ACCESS数据库的名字就一览无余。
因此建议你在
ODBC里设置数据源,再在程序中写下:
conn.open“shujiyuan”
(3)使用ACCESS来为数据库文件编码及加密。
首先,执行“工具→安全\加密→解密
数据库”命令,选取数据库(如:
employer.mdb),确定后会出现“数据库加密后另存为”
的窗口,存为:
employer1.mdb。
接着employer.mdb就会被编码,然后存为employer1.mdb。
要注意的是,以上的操作并不是对数据库设置密码,而只是对数据库文件加以编码,目
的是为了防止他人使用别的工具来查看数据库文件的内容。
接下来我们为数据库加密,首先以打开经过编码了的employer1.mdb,在打开时,选择
“独占”方式。
然后,选取功能表的“工具→安全→设置数据库密码”命令,输入密码即可。
这样即使他人得到了employer1.mdb文件,没有密码也是无法看到employer1.mdb的。
100
曝光黑客曝光黑客
3.2防不胜防——跨站Script攻击
人们往往这样给黑客画像:
一个孤独的人,悄悄进入别人的服务器中,进行破坏或者窃
取别人的秘密资料。
黑客还会攻击访问网站的客户,服务器也成了他的帮凶。
微软称这种攻
击为“跨站Script”攻击。
而这种攻击大多数都发生在网站动态产生网页的时候,黑客的目标
并不是网站,而是浏览网站的客户。
3.2.1攻击原理
如果服务器对客户的输入不进行有效验证,黑客就会输入一些恶意的HTML代码,如插
入一些令人厌恶的图片或声音等。
同时,也能干扰客户正常浏览网页。
恶意的标签和Script不是单纯的恶作剧,它们可以窃取资料和捣毁系统。
黑客能够使用
Script干扰或者改变服务器数据的输入。
利用Script代码还能攻击客户系统,破坏硬盘数据。
在客户使用服务器的时候,黑客的Script也正在服务器里运行着。
如果客户对自己的服
务器非常信任,同样他们也会信任那些恶意的Script代码。
甚至这个代码是以〈Script〉或者
〈Object〉的形式来自黑客的服务器。
1.跨站Script攻击示例
动态输入大致有这几种形式:
URL参数、表格元素、Cookies以及数据请求。
让我们来
分析MyNiceS这个只有两个页面的网站。
第一页使用一张表格或Cookie来获取用户
名:
<%@Language=VBScript%>
<%IfRequest.Cookies("userName")<>""Then
DimstrRedirectUrl
strRedirectUrl="page2.asp?
userName="
strRedirectUrl=strRedirectUrl&Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else%>
101
CChhaapptteerr33WWeebb攻攻防防无无限限制制
MyNiceS
EnteryourMyNiceSusername:
<%EndIf%>
第二页返回用户名以示欢迎:
<%@Language=VBScript%>
<%DimstrUsername
IfRequest.QueryString("username")<>""Then
strUsername=Request.QueryString("username")
Else
Response.Cookies("username")=Request.Form("username")
strUserName=Request.Form("userName")
EndIf%>
<%=strUsername%>
102
曝光黑客曝光黑客
如果输入Script代码:
,JavaScript警告标签就会弹
出来。
下一次访问时,这个警示标签同样会出现。
这是因为Script代码在第一次访问的时候就
已经留在Cookie中了。
2.用E-mail进行跨站Script攻击
下面还是以MyNiceS网站为例进行说明。
由于你经常浏览这个网站,在不知不觉
中就会把浏览器设置为“总是信任这个动态网站内容”。
3.ActiveX攻击说明
ActiveX对系统的操作就没有严格地被限制。
如果一旦被下载,就可以像装的可执行程序
一样做自己想干的事情。
针对这一特点,IE浏览器也作了某些限制,如对于那些不安全的站
点,在它的默认设置中就会不允许进行下载或者出现警告提示。
但是,对于那些没有多少经验的用户来说,他们往往不自觉地对原来的设置进行了修改,
使控件在没有任何提示的情况下就下载了。
另外,对一个新手来说,即使在有提示的情况下
也会不假思索地下载那些没作任何标记的控件。
在所举的例子中,由于你对该站点的信任,
改了浏览器的设置,这样,ActiveX控件在不经过任何提示的情况下就下载,并在你的机器上
不知不觉地开始运行。
4.进制编码的ActiveXScript攻击
要把用心不良的标签和Script区分出来是一件非常困难的事。
Script还可以16进制的形
式把自己藏起来。
看看下面这个E-mail范例吧,它是以16进制的形式被发送出去的:
这几乎是一封完整的邮件,里面包含了以16进制伪造的URL参数:
sender=
。
当用户点击链接时,用户的浏览器就会直接开始第一例所说的处理过程而
弹出警告窗口。
3.2.2防范技巧
防止跨站Script攻击的技术正趋于完善,目前可采取以下几种方式来防止跨站Script的
攻击。
103
CChhaapptteerr33WWeebb攻攻防防无无限限制制
1.对动态生成页面的字符进行编码
首先,必须对动态生成页面的字符进行编码,否则黑客很有可能更改字符设置而轻易地
通过你的防线。
如果是个英文网站,只要把字符编码设成拉丁字符ISO-8859-1就行了:
2.过滤和限制所有输入的数据
在进行登录的时候,不要将那些特殊的字符输入进去。
因此,可在ONSUBMIT方法中加
入JavaScript程序来完成这个功能。
在本例中限制最多只能输入15个字符,这样可以阻止那
些较长的Script输入。
3.使用HTML和URL编码
尽管使用上面所说的过滤和限制输入的办法是一种非常重要的防御手段,但它对于采用
邮件方式的攻击还是无能为力。
针对这种情况,不得不采取一种更有力的安全措施。
如果用
的是ASP,只要对动态生成的网页进行HTML和URL编码就行了。
根据范例的情况,在第一
输入页中对redirectURL做出如下改动:
strRedirectUrl=strRedirectUrl&_server.URLEncode(Response.Cookies("userName"))
在执行页中加入:
strUserName=server.HTMLEncode(Request.QueryString("userName"))和strUser
Name=server.HTMLEncode(Request.Form("userName"))
微软推荐对所有动态页面的输入和输出都进行编码。
甚至在对数据库数据的存入和取出
也应如此。
这样,就能在很大程度上避免跨站Script的攻击。
也可增加一个IIS组件用于过滤所有从动态输入中的特殊字符。
对于那些已经做好的网站,
采用这种办法来防止跨站Script的攻击非常容易。
这个控件能拦截来自ASP页面的REQUEST
目标,可对表格、Cookie、请求字串和程序的内容进行检测;也可以通过编写log文件的方
法把统计数据加入这个组件中。
每当一个客户输入一个非法字符时,这个组件会记下它的IP
地址和时间。
只需要采取一些简单的步骤就能有效地阻止跨站Script的攻击。
除了以上所说的三种方
法外,微软还强烈推荐使用一种称之为“SanityCheck”的方法。
假设有个输入窗口只允许
输入数字,就给它做个限定,只允许0~9数字的输入。
微软所采用的这种对输入的字符进行
限定的办法要比单独采用过滤特殊字符的效果好。
采用了这些措施后,就能让那些浏览网站
的客户在访问网站时受到保护。
104
曝光黑客曝光黑客
3.3脚本攻击入侵Leadbbs
Leadbbs是国内最流行的免费共享论坛源码之一。
国内许多个人网站都使用该源码搭建
自己的网站论坛。
但是,Leadbbs本身存在一些致命的漏洞,黑客只需要稍加利用,便会进
入论坛的核心,实施破坏。
3.3.1攻击原理
以http:
//www.16163W为例,黑客常用的攻击步骤如下:
1.先注册一个用户。
2.查看管理员ID。
在http:
//www.16163W
处查看管理人员名单,点击就可看管理员ID了。
这里假设管理员账号为16163,ID
为2。
3.进入用户修改资料页面。
先随便注册一个名字进入论坛,比如:
cnwill,然后进入用户
修改资料页面:
http:
//www.16163W
该网页全部打开后,执行“文件→另存为”命令,选择“Web页,全部”项。
4.修改代码。
用写字板打开所下载页面的代码,找到修改用户资料处,把“value=2”
中的2修改为我们刚才查看的管理员ID,然后保存修改后的页面。
5.欺骗Leadbbs。
打开我们刚才保存的页面,把地址栏中的地址修改为http:
//www.16163W后按下回车。
这时,
就可以发现用户ID“cnwill”已经变成16163了。
点击“重登录”,输入管理员名字
16163,密码不更改。
登录成功后,黑客就完全拥有管理员权限了。
3.3.2防范技巧
1.定期修改管理员密码。
2.在管理界面中限定个人签名。
3.禁止修改个人资料。
4.修改数据库原目录和数据库名字,尽量将名字设置得复杂些,让黑客猜不到。
5.修改后台管理路径,这样即使获取了管理员密码,也不能直接用默认的管理路径进入。
105
CChhaapptteerr33WWeebb攻攻防防无无限限制制
6.修改USERMODIFY.ASP。
(1)在DEF_BBS_HomeUrl="../"之上再加一行DimSuperEditID,server_v1,server_v2。
(2)去掉DimSuperEditID
(3)在FunctionsaveFormData下面加上如下语句:
if
instr(Request.ServerVariables("http_referer"),""&Request.ServerVariables("server_
name")&"")
=0then
response.write“非法闯入!
影子鹰安全网”
response.end
endif
3.4DCPPortal系统的严重漏洞
DCP-Portal是一款基于Web的内容管理系统,能使管理员远程管理整个站点。
由于DCP-
Portal所有文件没有过滤用户提交的变量,导致任意用户可轻易利用SQL注入技术来攻击
DCPPortal。
3.4.1攻击原理
如果服务器的php.ini里有magic_quotes_gpc=off,那么DCPPortal是相当危险的。
如
果php.ini里有register_globals=off,那么DCPPortal将不能正常运行。
所有的文件里,没
有检查用户提交的变量。
例如,可以通过advertiser.php文件获取所有用户名/口令,提交如
下语句:
http:
//localhost/dcp/advertiser.php?
adv_logged=1&username=1&password=qwe'
or1=1UNIONselectuid,name,password,surname,job,emailfromdcp5_membersintooutfile'
c:
/apache2/htdocs/dcpad.txt
如果是Windows服务器,就会在c:
/apache2/htdocs/目录下创建dcpad.txt文件。
并
记录了所有用户的一切敏感信息。
但是UNIX下却不能这样提交,只有在:
106
曝光黑客曝光黑客
http:
//localhost/dcp/advertiser.php?
adv_logged=1&username=1&password=qwe'
or1=1UNIONselectuid,name,password,surname,job,emailfromdcp5_members
intooutfile'/var/www/html/dcpad.txt
这种情况下,需要知道程序的绝对路径。
当php.ini里有display_errors=on时,提交以
下语句,就可以返回绝对路径。
http:
//localhost/dcp/advertiser.php?
adv_logged=1&username=1&password='
在查询里使用UNION函数的前提是服务器必须运行着MySQL4.x,因为只有MySQL4.x
才支持子查询。
如果服务器运行MySQL3.x,我们还可以利用lostpassword.php文件,提交
以下语句:
http:
//localhost/dcp/lostpassword.php?
action=lost&email=fake'
or1=1--'
这对DCPPortal来说是非常严重的。
因为这样会重置所有用户的密码,所有用户将收到
和用户数一样多的邮件,并且所有用户的密码将是在最后电子邮件里提供的那个。
3.4.2防范技巧
只要把magic_quotes_gpc设置为on,就可以解决这些问题。
另外,可以随时关注官方
的补丁。
3.5Discuz论坛短消息未限发送次数漏洞
Discuz论坛是由Crossday工作室()开发的PHP论坛系统。
由于
pm.php发送消息那部分代码缺乏对时间间隔的限制,导致用户间可以发送消息炸弹。
这样,
就会出现服务器空间、资源被消耗,导致拒绝服务的情况。
3.5.1攻击原理
通过对pm.php文件的分析,大家可以看到pm.php文件第86行以下的代码如下:
86}elseif($action=='send'){
87
88if(!
$pmsubmit){
107
CChhaapptteerr33WWeebb攻攻防防无无限限制制
……
179showmessage('pm_send_succeed','pm.php');
180}
这部分代码没有检测用户发送短信的时间间隔限制代码,这就是漏洞所在。
我们只要注册任意用户登录后,提交:
http:
//127.0.0.1/discuz/pm.php?
action=send&pmsubmit=submit&msgto=angel&
subject=test&message=test
就可以轰炸angel这个用户了
3.5.2防范技巧
可以利用PHP的Session或者Cookie来限制用户每次发信的间隔。
处理用户发送短信
时,可以选择以下两种方式区别用户是否在规定的时间内连续发送短信。
假设管理员设置两
次发帖时间的间隔为2分钟,看看下面两个例子:
1.Cookie方式
if($beforepmid)die("对不起,你两次发信的时间间隔还不到2分钟");//
$beforepmid前一次发信的ID
else
setcookie("beforepmid",$pmid,time()+60*2,"/","",0);
//$pmid
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web 攻防无限制 攻防 无限制