找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2998|回复: 0
打印 上一主题 下一主题

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:2 A0 ~  x  I. k" T8 D
5 l( O' D+ g/ V, v$ _
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试$ `, [( d& F4 b/ r# t5 Z
详细说明:
: b/ n2 b# }4 I$ W  ^) q/ oIslogin //判断登录的方法8 J! Q& `4 F' f4 }" X
9 p  E0 V; S7 F! w
sub islogin()
6 m( Z5 |0 J( F3 E9 V* @3 q; b * Z8 P$ [. W( b2 i1 |1 s8 H
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
$ W" J# K/ G$ `' H+ e: }1 o
0 U8 o, h4 m" n# H+ F/ Kdim t0,t1,t2 & r4 L+ `0 E# T+ f" |/ t

8 }! {. c7 j9 d" Vt0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie 6 P7 U7 |+ o/ U% _* S. a- k% {

& a- [) T5 b1 r- c  B/ I3 [t1=sdcms.loadcookie("islogin"); M- K5 b3 W( m8 X* F/ k- A1 z

. O5 u  ?/ F- F% L& ft2=sdcms.loadcookie("loginkey")
1 a9 W% a' Q% g# M6 ]
- ^( u7 J/ z: f6 u! bif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
' \6 [! `$ A" \- y& c# ^  [ * i- y3 z8 E- N% w% G: D
//
) f5 t5 m1 F1 Q+ d2 {6 b% [  G& c2 S
& K" P: e% Q$ \5 |- M! msdcms.go "login.asp?act=out"
! D0 u' H* Q% J2 Q  w# _ 9 S% A# R/ x; D8 B# x/ `3 B& y
exit sub2 E6 F( [9 @) {4 @% n! B  s3 e4 g8 r
: i6 r9 \# \: b7 y1 F$ h( f/ d2 ]
else, A' }8 `4 B, H" s
. h3 `7 E1 W- k: ?" C& B, y! X5 q
dim data
: t* C: G6 }6 w; ?' \
; D0 }% k+ S/ L: |& Jdata=sdcms.db.dbload(1,"adminid,adminname,adminpass,islock,groupid,g.pagelever,g.catearray,g.catelever","sd_admin u left join sd_admin_group g on u.groupid=g.id","adminid="&t0&"","") //根据管理员ID查询 ID可控
; y' F  S) x& P% |0 P, ] 6 z0 f3 F/ p! u2 I4 \7 q) x+ P' \
if ubound(data)<0 then
* v' q) V2 E/ |$ I  f$ y/ c3 I ' o6 `" E  K0 A1 v/ g2 e6 Q4 B7 l
sdcms.go "login.asp?act=out"
. B, \: O' _1 N& t
0 J7 w0 l2 l3 }: yexit sub
  f  c4 S$ S5 C9 s- ^, s/ O3 c8 i4 E
! H. W$ q& J" Zelse
& L' a# {8 S. s $ @3 P( J/ Y4 t$ }
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
& A, v. |$ Q+ M& ]) y 9 e9 a$ O8 A6 h; h  D  X7 g
sdcms.go "login.asp?act=out"0 @; C  Y* n% A5 {. \; ~

  e# h6 Z; c" H* Cexit sub' r8 E9 R4 f8 a$ b4 U
7 k* d$ m* p+ b
else
7 u6 R" D$ z) R: y; G5 E $ |5 X6 u  _5 T0 X: ]' ?. b
adminid=data(0,0)4 Q/ i6 V2 V& ]( x
" x% q  F1 q: V$ m
adminname=data(1,0)5 A1 Y1 ^# q2 Y& K: ~- {0 e
  y; z$ q) [" m
admin_page_lever=data(5,0)
& L1 S4 b+ s4 D0 e( N2 n" @  P
1 L1 g7 a7 Z( d5 d; Qadmin_cate_array=data(6,0)
0 w& K! @, x0 D
+ P' T4 Z0 W* U+ H9 Xadmin_cate_lever=data(7,0)
! f& |1 i8 B  v; p - U/ B( _! Q/ k( H& B! o
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
: D) a6 ^9 ^% v3 S
( P2 r: Q2 L- w! I/ W. Tif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
" u* W: t& L. ^ 5 _7 {, F. _7 F6 }. s% g* S) u
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
  t" [5 [8 I. y3 {2 C% R, p
2 M0 V0 O3 w- J- J$ aif clng(admingroupid)<>0 then* F. A6 e# M  s) Q

! R" m% W- G5 u! Q3 tadmin_lever_where=" and menuid in("&admin_page_lever&")"' `' w7 r3 R2 K' |
" ~, e2 A3 N" V- f" _
end if
9 V3 k) Q6 a9 q4 L
2 p' f/ A- M+ D/ Q1 Asdcms.setsession "adminid",adminid
, V$ m& b3 P+ Q( _
5 G6 Y# P1 E& U6 B- a, i" vsdcms.setsession "adminname",adminname
6 p9 H: L9 I1 f+ U " e3 M; M. V. T( Z% ~5 f0 h2 ^0 z
sdcms.setsession "admingroupid",data(4,0)
1 _( D9 g) }6 |5 A7 | : M; R0 x9 Q' L/ e5 l
end if% a: l9 Z  C* v% }  a5 k  [
" }0 o7 G- Y# p: B7 w3 v" j4 W# \
end if( i+ b8 X, l1 O; W0 G5 e! a
" ]  J9 J, A4 U8 G2 m
end if  v( \- d* b1 R' Q/ ~: h) ^0 l

+ b! ^  j% B, v! b+ _* b: i/ melse
3 @! v! X0 U4 l5 A3 ?) j + }9 N$ X, M2 U% t; C
data=sdcms.db.dbload(1,"g.pagelever,g.catearray,g.catelever","sd_admin u left join sd_admin_group g on u.groupid=g.id","adminid="&adminid&"","")$ R7 V- j, p8 ?( ?

. \' f" e! n$ {* Eif ubound(data)<0 then1 A4 ?) j- `( Y. M; e; ]
0 T& ~, y# [8 t  _6 p5 f
sdcms.go "login.asp?act=out"
! l9 e/ O& `7 s* d4 K
6 F# E# i* [; P4 |exit sub
) l; U1 I9 n) ^7 C: T7 e( M, D 3 \9 g( t1 p5 e' \; N/ ]0 j$ M
else$ p+ n) Q3 n+ t, S

- O, _2 F9 H2 A7 Q! R7 |! u% c& Aadmin_page_lever=data(0,0)
* H4 p: O1 Z5 @
( B, l0 x" n  i8 U5 c) s  radmin_cate_array=data(1,0)
; |9 R' D, K6 J6 k+ |" ]; _) w
0 ^% m* v' ], V( U( zadmin_cate_lever=data(2,0)! ]( m. u) Y5 p/ l# n) n6 y- h9 q

1 _, q. b  o4 b1 R3 ]if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0. |% o6 L2 _! P5 `
) @) s5 B; b3 {6 U* o4 g
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
! }$ A) U% l8 {; @5 f3 u7 l& B
$ L: u3 h7 r+ H) _" |if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
4 X' ^9 m& M( r  G4 i& _( F' U6 G# P
  c4 S& D+ N) I' ]) w9 M( ^if clng(admingroupid)<>0 then( h  j/ A/ H) l: g2 R/ p+ @

7 v; Z; l2 U0 ^2 ]3 }( c( E; X! g) ]2 Jadmin_lever_where=" and menuid in("&admin_page_lever&")"% \2 L+ ?  U$ M" h( v; K0 s- R0 F

3 p+ C3 z* V1 Oend if
/ f* d6 r- k8 \" E % ?+ x9 `3 X) x2 B' {5 B
end if* }* w/ a& M/ _( `

; N# A5 B2 S1 ^# X7 L( Uend if
+ `) M( Z  I# c8 l, f
+ b6 k* X0 R! g+ F  gend sub4 x, k/ q7 Y7 q- Y& h) ^  b
漏洞证明:/ u2 c1 C2 O8 [) `9 W& p+ U6 k' E
看看操作COOKIE的函数# R1 m* s. N- p. A
4 V  H; J; d% t* S
public function loadcookie(t0)
' ^, H6 x, i$ s* C* T  |. j' I ! G. y) V. U! Z( [' n( R2 K7 I
loadcookie=request.cookies(prefix&t0)
; D0 Y; z% u8 R
- h9 A- g9 F9 ^1 Yend function
5 e2 u5 P0 m. q6 _ + i8 u) e+ b/ H; p( _  i  _
public sub setcookie(byval t0,byval t1). ~/ X0 d% y" S0 S0 Z* @

2 K/ [( i8 y! p/ _3 l+ F" s: M2 e* Vresponse.cookies(prefix&t0)=t1
' T$ i$ q! S$ p7 X5 T   W1 I& r2 A, g( v+ Y$ x
end sub! J- A8 s5 h" ]' c2 H

) j" W% b1 T$ r" Nprefix+ O: c1 z3 I& e) e8 U" v

7 }( H- m7 d' G! q* }6 W'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值! d( h5 y( X1 B  j# m# d& l; g
6 _- W) l6 I4 O, m' ^! H) F6 k7 S9 H
dim prefix" X( u7 Y: F  ~. z3 r  o
" t. y+ V* l( Z  k+ W' _. E0 b
prefix="1Jb8Ob"
5 F5 ?# E  G' Q) [4 O& t5 p- v
1 b! i7 h$ G! x' [8 J( v2 g4 X$ q% P  T'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
5 x# j/ H, M$ b5 `5 Y . I3 r8 L) S! r$ C
sub out; P0 K( N9 k& ~' l' x( I+ a% B

: M! a% m8 o: y2 U# d$ R3 Y- S% msdcms.setsession "adminid",""
5 O0 m: W- y5 e) b+ A. Y# [/ e, X
/ W* O3 J& a- s* Q3 l  I" vsdcms.setsession "adminname",""
6 s+ r" l; x( x* b" B5 p$ N. m . z0 K% r6 l: D
sdcms.setsession "admingroupid",""
" p: A! e' d! r+ l 1 [- d8 q* k1 u
sdcms.setcookie "adminid",""1 B) e& r4 Y7 x0 c  h

3 E5 W9 P5 c) Q$ r" O' |sdcms.setcookie "loginkey",""  @9 o+ q& d+ l3 d9 ?

0 _" ?3 D( g/ Rsdcms.setcookie "islogin",""9 R6 z* R9 a9 D/ b6 O/ x: V1 d

4 ?6 z5 S6 [/ Y  b% V$ F' jsdcms.go "login.asp"+ S: H/ d! W- e9 K
/ I- D. T/ C) U. ~
end sub' T4 X" e! {) j# @6 X4 W! z8 b

9 L  U7 T- t, a7 e$ m ( a5 ^# k$ B3 U& P
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!! Z( W" g3 r8 F) D6 R
修复方案:
/ Y  H8 J# H4 i" ~2 q  `修改函数!
% D  {- T( B7 Y$ D- ?. k
回复

使用道具 举报

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

本版积分规则

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