要描述:
' |; c" B! l6 q/ }, ~: i1 Y! c7 X* w! V3 Z0 m, M9 J
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试4 K6 f/ J- e* ~, c, _5 w' c' B
详细说明:
+ e1 M& K" K/ F5 e8 E3 }4 BIslogin //判断登录的方法5 |" A# `2 P' D! @2 n8 L/ }: P: j
1 ?$ v. {$ b; P# @
sub islogin()" ~' u6 t) ^2 F7 N
3 H8 c3 T6 Q# |5 T$ x$ J, i
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
# y5 m3 ]! `4 c, N" ?
# m( m/ {+ v) f/ idim t0,t1,t2
+ L3 m6 Y. b' E2 R
% A6 k. {, L' V1 |( U+ [t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
; i7 a2 B( G m5 _- w2 l) c % v+ @; \5 z3 Y( v! p9 ?" I
t1=sdcms.loadcookie("islogin") @3 E" X0 r C# G' }1 \
, K5 U) M" {# e' h+ X' p5 F' n- Yt2=sdcms.loadcookie("loginkey")
; K+ p2 z: @# l" Y / q( p# C7 t+ v( {
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
0 {0 N+ ?& j/ l- t2 V * t6 r8 j8 a% L1 d% d+ {: I$ }
//: o6 _, ?8 W' T4 t; u0 J3 d
7 ~. a: y1 A4 W$ e n
sdcms.go "login.asp?act=out": {& y9 o8 V2 ] B( l' }: t
) D% ~5 s V+ |0 P
exit sub
0 K" I5 G1 Y' B% V" u3 |
; u. |+ ?7 a5 B1 o( melse
9 g; Q3 o. y" u- {9 V) } 6 g$ G0 [2 J5 C$ w+ y6 K( G
dim data
$ O1 @; d8 g5 u( r/ v/ ]5 d' c* r. k * ?$ P9 [2 q" U' a8 G( z
data=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可控0 Q2 z; ^2 E9 {% Y" A
. t% ^) {' b. [" s7 _if ubound(data)<0 then9 q( @, W# M t6 H
# Z. ~0 j- _1 g( Fsdcms.go "login.asp?act=out"
0 @1 X, S* J& W% g4 I
% K7 g2 U) r/ ^8 d2 ^) p: C! a9 vexit sub( L/ k8 `5 ~" {, g
, A+ c) ^8 _7 G5 C- Jelse
- Q1 v$ A0 w+ ]1 x$ I3 Q, b . d- p+ g- Z; v9 `+ s9 h. H
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
. h. N& |8 X, j) I# t0 V1 x) C# Q
% s! ^- T1 C# g; _2 `* V0 msdcms.go "login.asp?act=out"% i' k8 G* ]8 H8 m$ K! P
! V/ e( M4 y4 a0 }; _exit sub; ^) A1 ]' T0 ?5 D8 H) e3 T
& l$ l& F4 h9 g5 D6 y8 d
else/ L. m% C! e; R, B# ]
. b5 f6 o4 r5 {6 A0 x W
adminid=data(0,0)
1 Y @0 y& L" w 5 \2 a' n( h+ A
adminname=data(1,0)
h+ _; r+ |1 x, u, d; G; g2 f6 |
6 a0 f- N) w! w# x* D- aadmin_page_lever=data(5,0)
: X; g+ r2 m% V$ \
7 a% J, Y* d5 n! {- m. ^& N: V* N2 Kadmin_cate_array=data(6,0)4 q+ c( o7 K5 M! D( [9 ~/ R. Z
! I; W1 Q6 D0 j
admin_cate_lever=data(7,0)& _ O0 |- R" x; C
5 ~' i9 y* \$ N' d( G. {; M; d
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0# S' q/ a, A" {
6 M7 `% x8 T; O* n* ]4 qif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
/ \" x3 X! p0 b 9 a6 X9 ]- h& L% Q8 y; y' _
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
+ \& P7 R9 o+ Y1 y2 ^ , I e' l. n& y
if clng(admingroupid)<>0 then1 |' F& ^' }9 |6 \
4 R' S' ]9 C: f. i
admin_lever_where=" and menuid in("&admin_page_lever&")"
% A+ r! C/ X' }* J) h( G* i' d
1 D1 g! D. J5 send if
$ q" ?! q! E. `+ d7 M
; B1 [9 Z$ b: Usdcms.setsession "adminid",adminid
& B$ q6 u* a* L/ ` ( m& O( `. i. `7 p. d7 d* b8 w) E9 r
sdcms.setsession "adminname",adminname
6 r" \( r7 y, l: p0 R * D2 t& _3 e" K5 _8 g- U5 P0 `- j
sdcms.setsession "admingroupid",data(4,0)
& b+ W8 A* h, D 5 T; ~) T: M2 Q2 r I& H
end if
/ M4 y) Y" O- M/ R7 { ! L2 M* G' A; G" H' c: K
end if+ w4 `5 }+ x" H5 B. y+ K
5 t4 h% T" V# n+ Fend if
6 [) H+ i) R" g7 _' A4 N # R% r# _1 k9 H9 |; c& E4 H
else
" ~& _; P& y- E! }8 b + I. J6 D! N$ G* h. k# B0 V! n
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&"","")# J: D5 N4 N3 `- M
^$ q. N* ^0 t% x3 }! f
if ubound(data)<0 then: E7 N5 b I% r9 V
6 Y; `5 J3 I/ G( r7 F
sdcms.go "login.asp?act=out"
, z/ G" K$ B6 {# v% e' H6 P
' s/ N+ l( l- W2 W' d9 L; Y0 i3 Q& Lexit sub
6 d4 K- w6 H/ N0 T! a & w9 E/ c; |8 @1 M4 c3 A6 h a* k
else
) E& T: x; Y7 ^0 J* J
- T3 |2 o, A. t& n5 qadmin_page_lever=data(0,0)1 g. Q3 c. [# I8 i t) Z
; m8 J# m) L/ I% f4 m6 Oadmin_cate_array=data(1,0)
( u* w/ t' j0 r ; c9 l4 ~/ q( k! m
admin_cate_lever=data(2,0)
1 P1 m/ Z2 f6 }+ g1 q 5 P" K$ ~) N- n/ ^# G
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=08 ?* z: [5 j1 f- h8 U, v9 K; g( c
: y4 l4 S' [; D/ P# q. `
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
3 I! @( w* x9 p- f8 c0 D: p4 l
f. r) ~5 o. }$ ]$ H% k, |if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0/ g% x8 _8 r8 B
6 i9 ^) {; D9 G5 d z
if clng(admingroupid)<>0 then8 \2 M* I) a$ C7 F: @' B9 A4 T
# j0 E. f# t, ~2 ~. Dadmin_lever_where=" and menuid in("&admin_page_lever&")"
5 z) S7 d6 H; Y- i. d
) q+ @! \" q. T' V' S6 Q& S( h! uend if( F" X5 D* y- Z" i9 Z& B
- x! V) [" @- ^ N% H$ C
end if7 U$ a' t, E) r. j+ M3 W
1 S S. a- R1 U' c7 |8 W
end if
* N" T% O- j! K. N; ?; W o0 m* H ) x! O: ?3 ?- V& |! Y
end sub1 M. d! q/ C( Q- I+ Y( D6 R
漏洞证明:
9 {) F1 d. D7 ]# K; x- A) S看看操作COOKIE的函数/ j5 L" E+ Q# {6 d, h8 g
$ x1 m; M, r" _% [# A% ^' |public function loadcookie(t0)
) a- _" M7 Y/ D4 P+ U9 ?' R% s & o. Z0 q$ r& ?) }9 V+ ~
loadcookie=request.cookies(prefix&t0)6 K6 g% p% q4 R+ t+ S9 J
& b! f$ p0 n4 v( K. @* u1 Kend function2 ]& h: I7 \; P7 z: N( ?8 C- g/ T
) S( ^& G7 w# r4 q0 Npublic sub setcookie(byval t0,byval t1)
6 I; p! T( u, u2 W' S ) L$ {6 X7 ~0 X+ }& H* A; N' t
response.cookies(prefix&t0)=t1
% N4 X }6 O# c9 V X: C + t7 n+ z" L$ J" l) A; B+ _! s
end sub
5 I0 C1 C" i+ b! G3 [
/ e& a0 Q1 C. A% a) yprefix- H9 [ ~7 T5 y! ?
7 i# h& {7 y8 t2 a$ h'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值. I% a# l$ I l$ ^# u/ Q
2 R. ]! I; G1 E: e* d2 X! idim prefix5 k/ W; X/ B; f3 d- |0 U! \: F
. @2 S* j9 u P ~4 [6 b- oprefix="1Jb8Ob"
. r4 ?8 _* ~3 ^ g . M. m& X; x6 _$ l; a5 p
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
; D5 E& A3 R% g' V$ t - ^: |9 s" u) j! v' ?
sub out) |# s' X/ F# }& P2 H
6 v9 N+ K% }& _ c# lsdcms.setsession "adminid","". F- D/ y/ Y7 O3 f9 e+ P
$ E N1 ` p3 k$ [. S* Tsdcms.setsession "adminname",""
+ D2 o# W) e9 h# V1 E2 ^/ I. H& g
" T! O; @6 r, |! v+ }sdcms.setsession "admingroupid",""" l6 o: Z# H' C; D
1 `3 I( @3 [4 T6 Ysdcms.setcookie "adminid",""/ A. y6 I: r1 ?6 {# P
: @7 t5 b) W9 @, B; Y5 l M6 Y8 wsdcms.setcookie "loginkey",""+ \/ L' t/ o+ [! ] j) }
; K: k# `0 ^3 R C! s; psdcms.setcookie "islogin",""% e0 o6 N- Y) c' j9 d" E
5 r0 Q3 U% o, _* n9 w9 m) _6 A. h X
sdcms.go "login.asp"% L5 o9 \. {) p' ^, u# l* @, N2 @
$ I8 J# u0 D; }) Tend sub/ }9 i6 i6 }2 s( n. S( W$ s- G% {% u
0 c* h( q9 X1 m8 K; ^" d
2 s' q! _% |+ H% |6 a
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
! V5 _$ e% k! l- F, `修复方案:, s3 |! W6 ?* t- _
修改函数!+ F W, {+ D* M, A8 }
|