ASP网站制作之ASP毛病全打仗-进阶篇
因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQLServer还有更多的扩展,可以用存储过程,数据库大小无极限限制。 在进门篇,我们学会了SQL注进的判别办法,但真正要拿到网站的保密内容,是远远不敷的。接上去,我们就持续进修怎样从数据库中猎取想要取得的内容,起首,我们先看看SQL注进的一样平常步骤:第一节、SQL注进的一样平常步骤
起首,判别情况,寻觅注进点,判别数据库范例,这在进门篇已讲过了。
其次,依据注进参数范例,在脑海中重构SQL语句的原貌,按参数范例次要分为上面三种:
(A)ID=49这类注进的参数是数字型,SQL语句原貌大抵以下:
Select*from表名where字段=49
注进的参数为ID=49And[查询前提],便是天生语句:
Select*from表名where字段=49And[查询前提]
(B)Class=一连剧这类注进的参数是字符型,SQL语句原貌大抵概以下:
Select*from表名where字段=’一连剧’
注进的参数为Class=一连剧’and[查询前提]and‘’=’,便是天生语句:
Select*from表名where字段=’一连剧’and[查询前提]and‘’=’’
(C)搜刮时没过滤参数的,如keyword=关头字,SQL语句原貌大抵以下:
Select*from表名where字段like’%关头字%’
注进的参数为keyword=’and[查询前提]and‘%25’=’,便是天生语句:
Select*from表名where字段like’%’and[查询前提]and‘%’=’%’
接着,将查询前提交换成SQL语句,猜解表名,比方:
ID=49And(SelectCount(*)fromAdmin)>=0
假如页面就与ID=49的不异,申明附加前提建立,即表Admin存在,反之,即不存在(请切记这类办法)。云云轮回,直至猜到表名为止。
表名猜出来后,将Count(*)交换成Count(字段名),用一样的道理猜解字段名。
有人会说:这里有一些偶尔的成份,假如表名起得很庞大没纪律的,那基本就没得玩下往了。说得很对,这天下基本就不存在100%乐成的黑客手艺,苍蝇不叮无缝的蛋,不管多手艺多深邃的黑客,都是由于他人的程序写得不周密或利用者保深情识不敷,才有得动手。
有点跑题了,话说返来,关于SQLServer的库,仍是有举措让程序告知我们表名及字段名的,我们在初级篇中会做先容。
最初,在表名和列名猜解乐成后,再利用SQL语句,得出字段的值,上面先容一种最经常使用的办法-Ascii逐字解码法,固然这类办法速率很慢,但一定是可行的办法。
我们举个例子,已知表Admin中存在username字段,起首,我们取第一笔记录,测试长度:
http://www.19cn.com/showdetail.asp?id=49;;and(selecttop1len(username)fromAdmin)>0
先申明道理:假如top1的username长度年夜于0,则前提建立;接着就是>1、>2、>3如许测试下往,一向到前提不建立为止,好比>7建立,>8不建立,就是len(username)=8
固然没人会笨得从0,1,2,3一个个测试,怎样才对照快就看各自觉挥了。在失掉username的长度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))失掉ASCII码,好比:
id=49and(selecttop1asc(mid(username,1,1))fromAdmin)>0
一样也是用慢慢减少局限的办法失掉第1位字符的ASCII码,注重的是英文和数字的ASCII码在1-128之间,能够用折半法减速猜解,假如写成程序测试,效力会有极年夜的进步。
第二节、SQL注进经常使用函数
有SQL言语基本的人,在SQL注进的时分乐成率比不熟习的人高良多。我们有需要进步一下本人的SQL程度,出格是一些经常使用的函数及命令。
Access:asc(字符)SQLServer:unicode(字符)
感化:前往某字符的ASCII码
Access:chr(数字)SQLServer:nchar(数字)
感化:与asc相反,依据ASCII码前往字符
Access:mid(字符串,N,L)SQLServer:substring(字符串,N,L)
感化:前往字符串从N个字符起长度为L的子字符串,即N到N+L之间的字符串
Access:abc(数字)SQLServer:abc(数字)
感化:前往数字的相对值(在猜解汉字的时分会用到)
Access:AbetweenBAndCSQLServer:AbetweenBAndC
感化:判别A是不是界于B与C之间
第三节、中文处置办法
在注进中碰着中笔墨符是常有的事,有些人一碰着中笔墨符就想打退堂鼓了。实在只需对中文的编码有所懂得,“中文害怕症”很快能够克制。
先说一点知识:
Access中,中文的ASCII码大概会呈现正数,掏出该正数后用abs()取相对值,汉字字符稳定。
SQLServer中,中文的ASCII为负数,但因为是UNICODE的双位编码,不克不及用函数ascii()获得ASCII码,必需用函数unicode()前往unicode值,再用nchar函数获得对应的中笔墨符。
懂得了下面的两点后,是否是以为中文猜解实在也跟英文差未几呢?除利用的函数要注重、猜解局限年夜一点外,办法是没甚么两样的。ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊! 我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
页:
[1]