【转】xp_dirtree储存过程漏洞

sql server
2000漏洞一直很多
前段时间我自己的服务器就出现了一个sql的临时储存过程漏洞
漏洞扩展:xp_dirtree储存过程

事前:最近发现一个漏洞是sql服务器造成的
前几天正好没有什么事情,就用阿d的sql注入工具对自己服务器的网站进行注入,偶然发现了使用mssql的网站浸染可以利用sql注入的形式得到整个服务器上所有目录(我的服务器作了安全设置的)依然可以看见,然后在服务器上安装了一个抓包工具对sql
server进行抓包发现,使用工具连接sql漏洞xp_dirtree读取目录,可获得整个服务器目录,如列出c盘目录他会把你c盘下的所有目录列出来,这样是很不安全的,目前是只可以查处目录上穿东西,大家可以设想一下,如果我随意修改一个boot.ini覆盖了c盘的boot.ini是一个什么概念,呵呵首先可以导致服务其瘫痪,无法读取系统
解决方案:删除xp_dirtree,命令是sp_dropextendedproc
‘xp_dirtree‘
删除了以上的那个组建您在使用阿d或者任何的sql注入工具都是白搭

在这里也给大家提供一些其他sql危险的储存过程
建议删除

[注意:所有删除sql储存过程的操作必须在mssql查询分析器里操作,下面哪些前面的是储存过程的名字后面是删除储存过程的命令]

希望能给大家带来帮助,如果有什么问题可以直接和我联系。

先来列出危险的内置存储过程:

xp_cmdshell sp_dropextendedproc ‘xp_cmdshell‘ xp_regaddmultistring
sp_dropextendedproc ‘xp_regaddmultistring‘ xp_regdeletekey sp_dropextendedproc
‘xp_regdeletekey‘ xp_regdeletevalue sp_dropextendedproc ‘xp_regdeletevalue‘
xp_regenumkeys sp_dropextendedproc ‘xp_regenumkeys‘ xp_regenumvalues
sp_dropextendedproc ‘xp_regenumvalues‘ xp_regread sp_dropextendedproc
‘xp_regread‘ xp_regremovemultistring sp_dropextendedproc
‘xp_regremovemultistring‘ xp_regwrite sp_dropextendedproc ‘xp_regwrite‘

ActiveX脚本:

sp_OACreate sp_dropextendedproc ‘sp_OACreate‘ sp_OADestroy
sp_dropextendedproc ‘sp_OADestroy‘ sp_OAMethod sp_dropextendedproc ‘sp_OAMethod‘
sp_OAGetProperty sp_dropextendedproc ‘sp_OAGetProperty‘ sp_OAGetErrorInfo
sp_dropextendedproc ‘sp_OAGetErrorInfo‘ sp_OAStop sp_dropextendedproc
‘sp_OAStop‘

大家可以去baidu下载一个阿d的sql注入查一下
现在大部分都有这个漏洞
这个是新出的
此方法是本人研究出来的,在服务器上测试过成功。如果哪位朋友有更好的方法,欢迎交流。

【转】xp_dirtree储存过程漏洞,布布扣,bubuko.com

时间: 2024-10-12 12:37:15

【转】xp_dirtree储存过程漏洞的相关文章

常用的系统储存过程

--1.sp_databas:列出服务器上的所有数据库信息,包括数据库名称和数据库大小 exec sp_databases --2.sp_helpdb:报告有关指定数据库或所有数据库的信息 exec sp_helpdb --3.sp_renamedb:更改数据库的名称 exec sp_renamedb '张总','何老大' --4.sp_tables:还回当前环境下可查询的表或视图的信息 exec sp_tables --5.sp_columns:还回某个表或视图的列信息,包括列的类型和长度 e

mysql的储存过程

储存过程可以简单理解为一条或多条SQL语句的集合. 储存过程的操作包括创建储存过程,查看储存过程,更新储存过程和删除储存过程. 1. 创建储存过程 1.1 储存过程语法结构 在MySQL中创建存储过程通过SQL语句CREATE PROCEDURE来实现,其语法形式如下: CREATE PROCEDURE procedure_name([procedure_paramter[,…]]) [characteristic…] routine_body procedure_name参数表示所要创建的储存

SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数

-- SQL SERVER 判断是否存在某个触发器.储存过程 -- 判断储存过程,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE name='procedurename' AND type='P')) DROP PROCEDURE procedurename -- 判断触发器,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE id=object_id(N'[dbo].[triggername]')

Mysql储存过程4:mysql变量设置

默认全局变量是两个@@开头, 可用show variables查看所有默认变量: @@user #declare定义变量只能用在储存过程中 #declare 变量名 数据类型 可选类型 declare num int: declare age int defalut 100; #定义全局变量, 可以用 set声明: #@变量名 #有两种写法, @name := value / @name = value set @age=18; set @age:=18; select @name:=user(

Mysql储存过程1: 设置结束符与储存过程创建

#显示储存过程 show procedure status; #设置结束符 delimiter $; #创建储存过程 create procedure procedure_name() begin --sql语句 end$ create procedure myshow() begin select user(),database(); end$ #调用储存过程 call procedure() call procedure #没有对数时括号可省 mysql> use test$ Databas

Mysql储存过程2:变量定义与参数传递

#储存过程 中的变量定义 declare 变量名 类型 可选类型 -- 跟建表差不多 create procedure p() begin declare age int default(18); declare number int default 1; select age+number; end$ /* mysql> create procedure p() -> begin -> declare age int default(18); -> declare number

储存过程

存储过程:就像函数一样的会保存在数据库中-->可编程性 --> 存储过程-----------------------------------------------------创建存储过程:create proc JiaFa--需要的参数@a int,@b intas --存储过程的内容 declare @c int; set @c = @a + @b; return @c;go public int JiaFa(int a, int b){ int c = a+b; return c;}-

【转】oracle查询用户表,函数,储存过程,

◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所有用户:select * from all_users.select * from dba_users ◆Oracle查看当前用户连接:select * from v$Session ◆Oracle查看当前用户权限:select * from session_privs ◆Oracle查看用户表空间

[SQL Server]储存过程中使用临时表循环操作数据

本文为原创文章,转载请注明出处!我的博客地址:http://www.cnblogs.com/txwd 由于工作原因,到目前为此已有一年多没有写SQL Server的储存过程了,已有些生疏.日前工作中有个表的数据需要定时更新,翻了一下以前写的储存过程,在此记录一下. 需求是这样的: 有两张表     1.博主表: Blogger ,2.博主对应的文章表: BlogForBlogger 文章表的数据由服务端定时获取,博主表有个字段保存博主文章的总数量,所以这个字段要定时去更新. 实现:创建一个储存过