黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客安全 >> 正文
·完美空间提供500M免费AS04-10·企业安全之YY内网准入以04-09
·企业安全之意识与策略04-09·剑走偏锋:IIS漏洞利用04-09
·我来免费网提供100M免费04-09·1122mb.com提供20G超大免04-08
·映像劫持与反劫持技术04-07·让所有"暴力删除工具"无04-07
·入侵88red系统的详细过程04-07·Sql Injection脚本注入终04-07
·vbs+delphi 反弹后门生成04-07·飞讯网提供100MB免费PHP04-07
·突破SQL注入攻击时输入框04-04·结合内核和病毒技术的最04-04
·Real Player rmoc3260.d04-04·亿万网络今月最后为您提04-04
·php+mysql 5 sql inject04-03·Real Player rmoc3260.d04-03
·oblog文件下载漏洞04-03·免费啦提供1G-2G免费全能04-03
·完全解析网页后门和挂马04-02·一句话开3389(只测试过04-02
·萧萧免费空间网提供100M04-02·谷道免费空间网提供1G免04-01
·从本地入手解决双线路由03-31·sablog 1.6 多个跨站漏洞03-31
·富文本编辑器的跨站脚本03-31·Cookie注入是怎样产生的03-31
[推荐]脚本攻击防范策略完全篇
      ★★★★★

脚本攻击防范策略完全篇

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-10-28 9:12:51

程序体(5) 

我要做点声明的是:以上的程序只是对GET方式提交的数据进行的过滤,千万不要盲目套用。 

像其他一些来自 ASP request 对象 (Reques、Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables) 的用户输入的攻击方法的方法,大致都集中在脚本期望的输入变量是数字变量 (ID) 上,当然我们不能只看数字变量,比如: 

http://127.0.0.1/systembbs/showtopic.asp?tid=99&name=abc' and left(userpasswor 

d,1)='a 

http://127.0.0.1/systembbs/addtopic.asp?tid=99&name=abc' and userpasswor 

d='or''=' 

另外,如何单一的防止类似这样的注入错误? 

http://127.0.0.1/systembbs/addtopic.asp?tid=99' ;delete forum_forum;--&page=33 

防范程序: 程序体(6) 

......addtopic.asp?action=add...... 

......addtopic.asp?action=delect...... 

Action1=trim(Request.QueryString()) 

if left(action1,7)<>"action=" then '限定querystring必须为 action= 

error(err01)'错误处理 

else 

action=Request.querystring("action")'取得querystring的值 

end if 

select case action'对querystring进行处理 

case "add" 

..... 

case "delete" 

...... 

case else '如果querystring没有这个值则进行错误处理 

error(err02) 

end select 

程序体(6) 

出现这样的攻击,使我们的站长们不得不又再次头痛,这里我可以给出大家一个解决最好办法,一般的来说,用户名长度字符数不会超过15个字符,大都为14字符。那么我们从长度出发,来进行过滤:如程序体(7) 

Name=replace(name,"'","") 

If len(name)>16 then 

Response.write " 你要做什么?" 

Response.end 

End if 

程序体(7) 

为什么我们这里以及过滤了单引号,怎么还要再次取一个长度限制呢?不多说了,看看4ngel的文章先<<饶过'限制继续射入>> .别问我怎么转数字格式,我不会,嘿嘿...^_^! 

还继续回到我们的主题," 脚本期望的输入变量是数字变量 (ID)".怎样进行注入防范,天呐,方法太多了,最直接的就是判断是否是数字整型,还有一些比较个性的验证办法,我们一一介绍一下 如:程序体(8) 

一,判断数字是否是整型 

p_lngID = CLng(Request("ID")) 

二 取字长 这一点我相信一般的数据长度不会大于8位所以: 

If len(ID)>8 then 

response.write "bedpost" 

response end 

end if 

三 我认为这是一种比较冒险的办法,就是再进行一次数据库的查询,如果数据库表内没有相同的值与之相同那么返回错误. 

sql = "Select NAME FROM Category where ID="&ID 

set temp=conn.Execute(SQL) 

if temp.bof or temp.eof then 

response.Redirect("index.asp") 

else 

cat_name=temp("name") 

end if 

set temp=nothing 

‘上面的是数据ID 的检测,下面则是正式的查询 

sql = "Select ID T_ID, NAME FROM Category where ID="&ID&" orDER BY xh asc" 

rs.open sql,conn,1,1 

四,我自己常用的数据过滤脚本,专利,呵~ 

id=replace(id,"'","") 

If len( request("id"))>8 then ‘ 为什么取长度上面程序中已经说明 

response.write "<script language=""****"">" 

response.write "parent.alert('老大,你说吧,你想干什么?..');" 

response.write "history.back();" 

response.write "</script>" 

response.end 

else 

If request("id")<>"" then ‘取不为空则是为了防止一些程序页中会出现空值情况,如果不在这里做判断,程序会校验出错. 

If IsNumeric(request("id"))=False then ' 风清扬修改 ID数据监控程式 

response.write "<script language=""****"">" 

response.write "parent.alert('错误的数据编号类型\n\n请返回校验');" 

response.write "history.back();" 

response.write "</script>" 

response.end 

end if 

end if 

end if 

程序体(8) 


由于我个人的编程习惯,我喜欢将所有的数据检验程序全部保留到整站的公用程序中,比如:conn.asp啦,只需要写一次就可以修复全站的问题. 

说到这里,我提一点关于攻击的问题,就是跑用户密码或者是用户名,一般常用的就是 

....../show.asp?id=1 and 0<>(select count(*) from admin where id=3 and left(username,1)='a') 

这样去一个一个尝试,当然我们不能在这里提什么Perl程序去跑密码,程序是别人写,要自己知道原理.这里我只是想给个比较方便的办法就是取ASC码范围.这个要比单独跑要快很多.不论是是字母,数字,汉字,特殊字符,他们总会有对应的ASC码,用以下办法: 

....../show.asp?id=1 and 0<>(select count(*) from admin where id=3 and asc(right(left(username 

e,3),1)) between 1 and 10000) 剩下的就随你了,一般的从97到122就可以啦,字母嘛,很快D.呵呵,有人想用mid 函数当然也是不错 asc(mid(username,2,1)) between 1 and 10000 也成. 

上一页  [1] [2] [3] [4] 下一页

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886