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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:0 K, f; s0 Z$ A) q) }

, b3 _( w: ~7 D$ U; E* pSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
, r% ~5 Q7 c# W: E详细说明:; c5 @6 O; t& E4 k) {+ ?
Islogin //判断登录的方法
$ [) S& _& B) O
* c+ T1 v% g: ^2 ^8 gsub islogin()4 W* W* p8 ?$ R/ e2 D' d& a# M

5 L: F3 \# l+ f; W( Yif sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
6 z8 S- d% s0 E$ @- A9 l 2 w# ~) W" t) k: E$ [( q
dim t0,t1,t2
4 F2 ^3 |, P5 Q " n% }/ Y9 L! y. y
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie " Z6 J- L: t5 j- N$ X2 z& D' J# T

" }+ [& ]  m' dt1=sdcms.loadcookie("islogin"), `( C9 @- j+ g6 B5 R4 g
: d9 F: o0 U( ^, _& X+ a8 ^# b
t2=sdcms.loadcookie("loginkey"). k' B# t4 [  q+ u. X$ Y3 v* K

! A' p5 s4 d- j" ^* J5 x4 }0 o) ]if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行' e+ s' l5 \; N# x. a3 S0 c* D

3 k& K$ s7 `; C1 j; W. d//  \0 |4 \" W" W- k. U) {
" d9 j5 [3 D. U, H
sdcms.go "login.asp?act=out"
6 `( P( m* G! e. D
: y9 v& v) F+ [6 v+ L$ e2 R, O, Nexit sub
8 F: N- U" d' b3 N" n 2 _2 c* T, `" b( e4 h: ~! [7 n9 y0 N2 o
else
: @' E& t  N/ Y5 `: S/ d
& [1 x: D0 O% O2 ndim data
- r2 f" j: T! x* [- a) b8 K
6 x' }2 L: ?* X2 ^/ Zdata=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可控
' n1 W5 V; P3 ^3 @ : H* [2 J/ P* Y* b# ]
if ubound(data)<0 then
  u) l* w. c- o; C 4 w' `6 }% k0 x- F8 @4 B' M. g) X1 s
sdcms.go "login.asp?act=out"* q! o3 a: e0 W6 x6 n  D& h
8 E- u0 c! x# u$ o! a8 H% F
exit sub$ A- U5 @$ e4 O$ {% c3 y; `

: n: }5 {6 j: W. `- n& Q. ]else7 i0 k- i, T* Z0 V- G
. D) F0 d0 }6 S
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
/ Z6 q. n: U1 U1 s) o
# ?; y# t# i+ t, n6 O9 s; xsdcms.go "login.asp?act=out"8 w8 c7 q% ^4 ~) v+ P3 p
# G- A2 k# @& a6 |
exit sub
# ~+ O2 Z. |; d3 B& _; A+ O# }6 w $ w0 W% {( Z$ F
else* D9 r, D4 B# t
5 f+ `5 o* Y# Y8 k: j( O2 e1 r
adminid=data(0,0)/ s' T1 d9 D# _) ?+ J" Q$ x& L# e

) I' {. y% w3 l# _# o( o  Yadminname=data(1,0)
& L  o8 G9 N% u) A6 [4 |
( T6 b4 l$ v% y$ v/ f# A+ l% hadmin_page_lever=data(5,0)
( n, |& P. Q" G
2 v* ^! g  f9 x: T' P/ kadmin_cate_array=data(6,0)
5 t- v$ l! S# ~" |8 F7 m6 E 0 u% T: o$ W0 Q: W! B
admin_cate_lever=data(7,0)" }% R2 u( y4 b+ f9 B. d7 V
5 w' J0 }. q6 j6 B1 ^
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
( j- ~& Z. o3 |. N( G. x" `
0 T9 ~( e7 X; G7 r. |if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=08 r. @# D2 z, N" D
# N+ [2 d3 |5 d; f5 N
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
2 u1 T1 ?* z  }
3 M. N$ \& D8 D$ Iif clng(admingroupid)<>0 then
0 P5 M& d2 n- N3 {- e% \3 @2 I 1 ^8 @% d/ ~: s, i9 Z- f2 t
admin_lever_where=" and menuid in("&admin_page_lever&")"5 }4 E/ a* l$ F. u* J  j
9 o6 K# u- W8 v* i
end if; s; x9 }# H7 b# o/ `: Q
& k5 j9 X: E* Y
sdcms.setsession "adminid",adminid
, `; W- s$ \/ Z  }5 f, K
- O$ a) Y2 |6 _; E9 D3 ]& Dsdcms.setsession "adminname",adminname
# `4 _' f+ }& w) r) i % \, F/ Y6 k9 s; ?- D, I5 p6 E
sdcms.setsession "admingroupid",data(4,0)
: k3 L7 m1 V& F; c( ^
. r* R. |! K/ T! }end if
2 C) `; J' J3 R' Y7 E  I' g, ]" F. v 0 {# K4 u/ O! W. q
end if
2 s3 b7 V/ W5 i5 L1 O, i- t
* ?( w# q. t4 C" Oend if" F; c7 l' B2 g# d0 i0 j7 |2 u5 F1 B; A

  _7 P5 ^2 I1 B' B( }( m6 v5 celse+ d0 x# |' C- J8 @1 X  h/ _
7 @4 x% @/ G4 p' g5 q
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&"","")
& U- i9 J, {' K! K
0 m9 j7 i5 P$ X& e% h/ Bif ubound(data)<0 then4 ~& C( ^6 h4 I3 f3 I

! d4 }0 \& [  v. z* B. I9 bsdcms.go "login.asp?act=out". }0 [, H7 W0 x) P& r% ^4 O

3 U( L( A* B5 v  v9 Uexit sub
% E, k: u9 b. w# `; R7 Y  P$ i- Q: L # M; l9 }" m2 O9 T+ V
else9 I+ B% ^$ @6 b: B
/ x7 b( F& S" ~9 r! Z! l) O' ]$ K
admin_page_lever=data(0,0)
0 y/ Y4 P2 I' ~; B- d7 t8 C6 m7 Y6 W
, c8 C' y% B: H2 t4 ~admin_cate_array=data(1,0)7 L+ k, ]  k# ]7 l4 E9 O
+ o- o, W, l$ D: X" {2 ~
admin_cate_lever=data(2,0)
9 v% q7 D6 D# L# O/ l / c! o0 |% J. y' ]  }
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
+ f3 P) X9 |) R. V' h& P
: ^! p9 J" x0 ~' b- O+ {' g; ^" Iif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
, P+ ^) u6 I2 E" N% e& S
, ]2 x! _. G9 c* j( Yif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
% [  q8 M4 U2 c+ E" y+ g& z ' z5 u1 _4 U2 H( K$ G1 j
if clng(admingroupid)<>0 then) N/ {4 t3 B7 B" E, M: ?( l3 A

4 n5 ^" U; T$ T6 o0 m* `6 Yadmin_lever_where=" and menuid in("&admin_page_lever&")"
! Y0 |" X; T7 x/ r& e# D8 j
) S3 U% s+ f' e* L0 `end if
% z7 P# A# F# W: O* ~8 b4 q ; u  Q& n8 a9 {' _) @1 U9 P
end if. h! h3 j/ \3 c* R8 H) Q0 r
( L5 R5 S% {) B& c
end if! v+ R+ f3 u' ?/ ]

' V# M0 {5 K8 ?' \1 U* Z( m& t' Mend sub
$ M* S: J& V$ t6 g8 {& N! H' d漏洞证明:
8 x: P8 c3 Z/ B) w看看操作COOKIE的函数
& Q' A4 R8 C: \7 y: f" z* v- h # o. |; E& p6 @* V
public function loadcookie(t0)+ U6 ]9 w9 g  n% ?4 y4 o
" Z) A' W5 k7 \# s9 u
loadcookie=request.cookies(prefix&t0)
" M6 n( c/ g  J1 I 0 @" j) ]- i3 A! x9 H+ q# q
end function
) O- {, d% }" t; k
' S: r3 k7 p7 R2 W6 b. jpublic sub setcookie(byval t0,byval t1)6 [' S6 \; Q: m( R9 \

% y8 ^1 X8 J# e/ ]( i- B8 Hresponse.cookies(prefix&t0)=t1/ U% r( p% p: V  y( p% k! f
4 l" x4 D2 ?- c+ @4 C
end sub
0 B9 Q7 Y  v% s9 {* `7 }# k
$ R# `' b" B" D3 j3 |prefix
- J- z) ^/ H- I& w' p1 X 2 ], b3 }( J# o' ?3 [  b2 k& N$ y: A
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
; \7 y$ i1 [7 N; x( u  F* g; z
; n' N6 Q' t+ r3 Ndim prefix- l, f) \- m$ K5 w
. l/ I, ~% r  A: z
prefix="1Jb8Ob"
% G1 a+ j# C( k1 }7 p+ w( ]/ U 6 j. G+ O$ E+ {2 a* c5 o
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 & J& f' U+ J- t

1 ]' w3 w9 T% U% Rsub out' ~" r4 g& V& X9 y3 w8 ^

5 j* C" O; {3 z6 E' asdcms.setsession "adminid",""2 b' i% R( d4 Y/ N1 u# x8 [  z0 n
! n# q: b0 O8 c& F1 ^
sdcms.setsession "adminname","", ]; a% h8 p0 A
& F2 m# Z. f; h$ U' I9 K# f; H9 }
sdcms.setsession "admingroupid",""
$ N9 U% q7 @+ w6 k$ |3 X. [& m# M 0 R3 E% ~; i: s
sdcms.setcookie "adminid",""' H7 ]) r: }9 f1 u4 _" P

9 K+ R" h& [5 ysdcms.setcookie "loginkey",""
# C8 l' j# V' Y( \0 Q9 `! }# v" g / S( ~" Z* K* w' C
sdcms.setcookie "islogin",""
6 I" _! ]0 n7 v5 w2 }1 Y
- ~, O9 W2 a; Wsdcms.go "login.asp"7 s, W. n" K' A% U  ^! y" U

" }7 y) L8 c# J! I) }. aend sub
/ x. k" S) Q3 Q . I8 ~% h7 I- z- B7 Z- y

4 ]8 m4 R9 m% R5 u6 _9 I0 G利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!* r$ P' r( V" H8 q- l  n. P
修复方案:
, M7 h- b/ w, r% E# {  j, s修改函数!/ s" B( ]1 t' H1 `
回复

使用道具 举报

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

本版积分规则

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