随笔 - 303  文章 - 883  trackbacks - 0
<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

欢迎光临! 
闲聊 QQ:1074961813

随笔分类(357)

我管理的群

公共blog

  • n维空间
  • Email : java3d@126.com 群 : 12999758

参与管理的论坛

好友的blog

我的其他blog

朋友的网站

搜索

  •  

最新评论

信息来源:酷客天堂
文章作者:lake2
Author: lake2 ( http://lake2.0x54.org )
  注:本文发表于《黑客防线》2006年第2期
  继WebShell、FTPShell之后,让我们再来玩玩SQLShell 吧。 
 
使用数据库考虑最多的就是速度和效率,所以呢,数据库系统就使用了存储过程这种机制来提高速度和效率。SQL Server 2000 支持5种类型的存储过程,这里我们主要说说SQL Server的扩展存储过程,因为我们要利用它做后门。 

 看看书上对扩展存储过程的定义:

 在SQL Server 2000环境之外的动态链接库称为扩展存储过程,其前缀是xp_。虽然这些动态链接库在SQL Server环境之外,但是它们可以被加载到SQL Server系统中,并按照使用存储过程的方式执行。 

 呵呵,最典型的扩展存储就是SQL Serve自带那个xp_cmdshell,真是杀人灭口居家旅行必备良药啊。那个扩展存储需要sysadmin权限才能执行,一旦执行了CMD,那可是MSSQL的权限哦,而MSSQL是以服务启动的,也就是System权限,嘿嘿,比管理员大叔的权力还大!
 为了安全起见,一般管理员大叔都是删除了xp_cmdshell过程的,更有甚者直接删掉带有xp_cmdshell的文件xplog70.dll。这样多不好啊,我们没得玩了。 

 我的后门思路就放在扩展存储过程上面,因为扩展存储是以dll方式存在,而且那个dll是用C++编写且可以任意调用API函数。这样我们就可以写一个执行CMD的扩展存储(最初我是想直接修改xplog70.dll中xp_cmdshell的名字,不过失败了,在此略过略过)。
  扩展存储过程可在VC里创建。创建扩展存储过程的工程之后,VC会自动生成一个扩展存储过程模板,稍稍看看,你就很容易上手了(MS真是想得周到啊)。 

 这里我主要是去掉了返回值,增加了一个ShellExecute函数用于执行cmd。ShellExecute函数可是一个比较有用的函数,它可以根据后缀自动选择相关联的程序打开文件。 

  以下是其用法:

  HINSTANCE ShellExecute(
  HWND hwnd,
  LPCTSTR lpOperation,
  LPCTSTR lpFile,
  LPCTSTR lpParameters,
  LPCTSTR lpDirectory,
  INT nShowCmd
);
 

  第一个参数是句柄,在这里不用;第二个参数是对文件的动作,这里选“open”;第三个参数是执行的文件,这里自然是cmd.exe了;第四个参数是命令行参数,这个填程序接收到的参数;第五个参数是默认目录,把它空着;最后一个参数是程序运行时的显示方式,MSSQL都是以服务启动的,这里即使是最大化显示管理员大叔也是看不到的。
  好了,所以我们的函数使用为:

ShellExecute(0,"open","cmd.exe",spParam,NULL,SW_SHOW); 

 spParam是从扩展存储过程得到的参数,具体的实现请看源代码;扩展存储的编写请参阅MSDN。
 ShellExecute有个坏处就是看不到回显,不过这里把权限拿到了,不要回显也无所谓。当然你也可以自己写个显示回显的扩展存储过程。
 Ok,扩展存储命名为xp_lake2,dll文件名为xplake2.dll,现在让我们把它注册到SQL Server:

USE master
EXEC sp_addextendedproc 'xp_lake2', 'xplake2.dll' 

 注意,添加扩展存储过程要求连接SQL Server的帐户有sysadmin权限;使用相对路径的话得把dll文件放到SQL Server目录的binn之下。
 好啦,我们可以试试效果了,调用的参数跟xp_cmdshell一样,只是没有回显。在查询分析器里调用它:
USE master
EXEC xp_lake2 'net user > c:\lake2.txt'
  赶快去C盘看看有没有生成lake2.txt吧!至于权限嘛,呵呵,当然是system啦。
  SQL Server的扩展存储都要求sysadmin才能执行,不爽,让我们给它改改,让public也可以玩。
  如果拿到图形界面用企业管理器就可以轻松搞定,只需把xp_lake2的Exec权限赋给public就ok了。在查询分析器里就用GRANT:

GRANT exec
On xp_lake2
TO public 
 
然后换一个普通的SQL Server用户调用xp_lake2试试,执行命令还是system权限哦。呵呵,在webshell里试试吧,结果也一样的。以下是利用海洋2006调用这个扩展存储过程的截图:


  因为返回的值是空,所以显示出错,但是命令是执行了的,现在命令行下用net user看看吧: 

 
好啦,文章到此结束,大家赶紧去留自己的SQLShell吧^_^
  dll可以在这里下载到: http://www.0x54.org/lake2/program/xplake2.dll


地震让大伙知道:居安思危,才是生存之道。
posted on 2007-02-22 10:15 小寻 阅读(1543) 评论(0)  编辑  收藏 所属分类: database入侵反入侵

只有注册用户登录后才能发表评论。


网站导航: