
以我个人学习ASP的学习过程来看,SQL注入其实是使用一定的技巧,构造查询语句,改变了编程者最初的查询目的,最终可能导致入侵者获得网站的WEBSHEll.我们下边来探讨一下SQL注入产生的原因.
我们来回想一下ASP中的查询语句是怎样产生的.我们看一下以下三种见的查询语句及其注入语句.前边的是原来的查询语句,后边的是注入时使用的查询语句.看有什么不同.
(A) ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:
Select * from 表名 where 字段=49
注入的参数为ID=49 And [查询条件],即是生成语句:
Select * from 表名 where 字段=49 And [查询条件]
(B) Class=连续剧 这类注入的参数是字符型,SQL语句原貌大致概如下:
Select * from 表名 where 字段=’连续剧’
注入的参数为Class=连续剧’ and [查询条件] and ‘’=’ ,即是生成语句:
Select * from 表名 where 字段=’连续剧’ and [查询条件] and ‘’=’’
(C) 搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下:
Select * from 表名 where 字段like ’%关键字%’
注入的参数为keyword=’ and [查询条件] and ‘%25’=’, 即是生成语句:
Select * from 表名 where字段like ’%’ and [查询条件] and ‘%’=’%’
我们在这里只说用get方法注入的,也就是直接在网址里加入查询条件.以A为例,当我们在一个网站中输入比如http://www.youwin.net.cn/show.asp?id=2 网址后,显示了一个文章页面,我们在后边加上一个 and 1=1 形成http://www.youwin.net.cn/show.asp?id=2 and 1=1 的网址,提交后会发现网页还和原来的一样,加入一个 and 1=2 后,网页报错,说明这个网页上可能存在注入漏洞.这就是经典的1=1、1=2测试法.返回的数据有多种多样的,大家可以想一下在做查询时代码出错都会返回什么信息.从返回的信息我们又可以分析出哪里有问题.其实SQL注入的原理,就是从客户端提交特殊的代码,也就是让程序出错.从而收集程序及服务器返回的信息,从而获取到我们想到得到的资料。下边我们讲一下如何注入.
我们从第一个看起,数字型的,比如传入的参数是ID,那么就可以构造ID的值为49 And [查询条件],那么我们可以这样做来得到表名,因为我们大多数时是不知道的,如果知道了某个程序有问题,有人多会批量挂马的.看下边
ID=49 And (Select Count(*) from Admin)>=0 选择数据库里表名为admin里边字段数,如果有页面就与ID=49的相同,说明附加条件成立,即表Admin存在,反之,即不存在(请牢记这种方法)。如此循环,直至猜到表名为止。
表名猜出来后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名,就是如果有admin表,就ID=49 And (Select Count(字段名) from Admin)>=0 看有没有该字段存在.
入侵者要得到后台相关的密码才可能获得webshell.如果表名字段名得到了,那怎么得到密码或其它的信息呢?还是同样的办法,一个个试,看出什么错.
我们举个例子,已知表Admin中存在username字段,首先,我们取第一条记录,测试长度:
http://www.youwin.net.cn/show.asp?id=49 and (select top 1 len(username) from Admin)>0
先说明原理:如果top 1的username长度大于0,则条件成立;接着就是>1、>2、>3这样测试下去,一直到条件不成立为止,比如>7成立,>8不成立,就是len(username)=8
当然没人会笨得从0,1,2,3一个个测试,怎么样才比较快就看各自发挥了。在得到username的长度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码,比如:
id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0
同样也是用逐步缩小范围的方法得到第1位字符的ASCII码,注意的是英文和数字的ASCII码在1-128之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。如果是英文或字符,可以查ASC码对应的值得到其结果,如果是汉字,也是这办法.不过我现在也不太清楚具体怎么做.
到这里,一个差不多完整的注入过程就结束了.大家看看有什么错的话,请留言指正.谢谢.
其它的post还有cookies注入的原理也和这一样,我也没仔细看过,就不说了..
网页吧·中国站长第一门户