要描述:% s5 U0 }3 t4 }, J- D9 |
6 |3 N5 r; r" ?! n/ t; \% cSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试 T% _, H, T7 |& A& s! N! D
详细说明:6 \0 {% Y% e% J( `* I: k
Islogin //判断登录的方法2 l% W y# Q/ `( ~5 Y
. `8 m/ B* \0 q7 n' G4 Nsub islogin()
; G0 ^2 v- ^% T. p
' G* B7 s" j- D- ^. ?if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then 6 c+ u! n, s( L$ h6 i
, O; u$ D; f% q# k8 C& g
dim t0,t1,t2
& n; F; E0 F b# u# N3 @3 D/ \ # O, x# y0 e0 M2 P: e1 l0 p2 ^& S
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie / y3 p+ ^0 D+ v% {2 P
) J B4 _! k' U" y5 R7 ^
t1=sdcms.loadcookie("islogin")
" U* g3 T# y1 M7 {+ l! w/ f2 b : F' M# v3 e' t6 z
t2=sdcms.loadcookie("loginkey")
% n' w. c$ t' _7 C0 m! D2 Q4 T , H1 N! e5 u; L$ t! ^
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
; y; P- W2 L: Y# V& U ( Y7 g# b" b# \( V
//% z4 E* b# A- x/ P; }- x; m1 a
8 P7 Q* r1 g. f8 I4 Ssdcms.go "login.asp?act=out": |! |# F ^) R
6 h. k' l6 ]4 Dexit sub
+ q3 _% i4 e2 k2 R
% I$ h, ^5 g# U* {else
! o( ]' ]: |) U% ~' e! l' O. f# Y + q% G- l0 W& `' Y1 ?% x0 B4 ^: c
dim data. I! s3 s/ j2 N6 [1 O5 I) A
( ?+ ]& K# B7 j1 m) ^3 j
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可控: r* g4 g* q" \
# ?, J' g1 O7 I) w: Nif ubound(data)<0 then
8 k$ H$ R9 i/ n R9 k
: \$ e) e- e. G2 L9 {/ asdcms.go "login.asp?act=out"
+ g& n/ G: [3 o* G4 T+ G : r: H% I) V( ?% T1 l+ {
exit sub' l/ b! v+ O" Z8 |% L
1 c/ H6 S4 @+ p+ }0 c0 y; _# u& F
else
+ @6 l! F; J: \0 X; P% l
0 w3 ?5 D* w" K9 s, |if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
: X; o" S, c9 S7 b / F/ J5 X8 i+ T: D7 v% C+ i$ O
sdcms.go "login.asp?act=out"( S ~6 Z' D& t4 U, V( x' i) g
1 I5 P8 `0 B) G* ~7 y8 nexit sub' A" k0 Z& h& W. a5 }% m7 p7 j
: g) ?% Z1 X, L
else
& s$ E7 @3 R; w% o
: H5 s+ n, S; _% Cadminid=data(0,0)4 K! `$ _9 z) O/ R( q8 ~ @- T0 n: l
( B4 A( d' f( E9 K4 D
adminname=data(1,0), G7 F/ J4 v& ?5 ]$ t1 s
1 E5 s+ |. M L. E* Badmin_page_lever=data(5,0)8 i7 [$ H- ]0 O- }% u
8 i6 A) I( e* v! Y4 P) L
admin_cate_array=data(6,0)% n% J |0 I* Y" ?; ?8 Q
: Z# D4 B( C% B! x( K- h# a) ~6 B8 o
admin_cate_lever=data(7,0)
4 M8 | z+ T7 P$ s. z5 s / M# M+ b/ Z0 i7 V' a5 w9 c
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
& _; @# s/ E: `8 \* Z! | U7 `$ ]1 M
( }; n* X2 j% G7 Iif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0/ i7 a& i% C4 ]( p4 w
8 v$ s( o9 G( l
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
4 i1 k% a I% E/ l 7 \$ j5 e& ^6 P" O! h6 G. g
if clng(admingroupid)<>0 then' b, t5 u$ I- I3 @( N% `
4 }. w* y" E) d4 q( J6 k4 L7 m5 `
admin_lever_where=" and menuid in("&admin_page_lever&")"3 o9 E! v- U) J$ ~/ }
3 h; |) `* B* T) A3 B" {9 y! u& xend if
9 |9 _1 y0 `2 y2 Z
0 I* ~( z& x& _9 Z/ [sdcms.setsession "adminid",adminid
' l5 Y& a4 Q: \3 G) ?+ W
; _5 y" k0 I8 p* n! l4 a6 rsdcms.setsession "adminname",adminname9 x1 J2 F1 [6 E- h9 O1 ]
4 r4 D7 }8 V' L8 q0 U9 x3 U9 wsdcms.setsession "admingroupid",data(4,0)
2 c- R- o0 R" L6 u$ o0 a
3 n# b4 N6 Y% Z& lend if3 T- D4 ]1 i; C
) n6 Q1 ~+ a6 V& O% l' q$ Fend if
! W+ u5 }/ X& k) N2 t
( S. N7 X" c2 I5 c8 t7 fend if
, c, i9 p% M6 T A5 t2 L 8 r9 C+ S K8 Z2 `2 m* j
else
# x5 w8 n" b5 [4 c: v 1 z4 f% i- ^8 E9 \8 [# z* s
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&"","")# `5 N' X( \. `
& c# l! J4 w) V& Z* t& o6 I5 lif ubound(data)<0 then
4 T2 U8 n, U9 [0 Z1 {
. Q3 Y% ?" q/ R8 T6 m* I; |sdcms.go "login.asp?act=out"" J2 [7 N+ m6 @
1 g' F+ I- ` l6 C* Q
exit sub$ d t `5 ~0 o1 }1 t8 C
- b7 u0 W5 P" k+ i' w& S5 U
else
: H$ C; L. u* R. B % f* [, x+ j' E u1 W+ ^" }% ~
admin_page_lever=data(0,0)
) d5 ~% A. h W' ^7 b9 t* J8 s 5 P* n) \$ P% I
admin_cate_array=data(1,0)2 }' L5 ?; A: O: o" I6 N5 _
, k/ ]! `( l' q4 ? ^admin_cate_lever=data(2,0)
+ F4 [3 ^# _3 J" w" j
; L# V6 k: w3 Qif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
r: E, v& E* }* E0 V4 G5 _ 3 V1 S* p) ~5 B/ V6 \
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
2 ^0 M. ^5 ~' }
- d) _5 ]; y2 @. N/ Gif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
9 U- J) I+ V1 b" v9 [; s% t. Q 4 F& C3 J( f) v2 k; T' x0 N' M
if clng(admingroupid)<>0 then# k! n8 s l0 q7 r4 f {5 @
4 s" A6 s6 y" P
admin_lever_where=" and menuid in("&admin_page_lever&")"
8 l8 `% {& W! E% d9 X - K6 F: {( _! ^6 e @
end if
2 A1 Y; T! O/ Z, G% g$ m ( r0 }3 D l" G/ Y- w3 _
end if
$ c% T3 \- A6 j) A
3 N$ g+ W: [$ @! V' gend if
1 N: L: d/ ?! ^ 6 _' A* ]& a2 W
end sub- f! {- J `* r! }; g
漏洞证明:
3 W4 S) }0 U# r) c看看操作COOKIE的函数
; o* @) _) |1 _! u; M b7 f, d
0 i0 |" T1 R4 [% I/ x: Jpublic function loadcookie(t0)
9 }4 F" s5 V5 ?8 Y - Y& ~% p- H/ R p$ i% X2 m5 f
loadcookie=request.cookies(prefix&t0)/ s& {, W4 _% d; T
( _4 y, x: ^* v( S& |( q" n
end function
8 A9 V1 a0 x+ i5 R) b1 D
8 ]! o0 H5 S' s! q& B9 ypublic sub setcookie(byval t0,byval t1)
; Y+ p& w( _8 x5 X' ?; k! ` ( k1 k1 d3 R$ C* [4 d4 {% L
response.cookies(prefix&t0)=t1 z5 C j' X2 x: v4 R
" @+ p b( }3 _4 F, _. n0 }% y0 rend sub0 f/ d6 `* t/ B8 U1 a$ W
- D3 D$ j3 b. Q: I" o3 M1 ?+ [prefix- l: f) c! b5 w4 i, l9 I; G; @5 X6 N
! ~" R; p9 x# D+ `& y9 W'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
7 z& L- i- U8 u$ z! _5 Y! d 6 Z' T+ G, r2 p
dim prefix) q& _+ b7 f8 I2 L; A
0 [2 ?: }6 d {' p7 T) ]
prefix="1Jb8Ob"
8 V& `3 u4 a& C( e# `$ e# m l' g. m ) E: M$ g2 _: e+ p2 q& S) V& ~
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 $ J! ~. L% ^4 I% }
) A& n3 k2 O, ^
sub out
; q4 L4 d9 X) d0 E! b! i& U 9 Z* J! b: l! g! Y, ^
sdcms.setsession "adminid",""4 F f+ c& J4 X; h ]: H' v
5 e2 x! U' i# q n/ G E) R1 j
sdcms.setsession "adminname",""( n8 B8 X; [2 E* d' k/ G
# J' C8 \; X: I; Nsdcms.setsession "admingroupid",""( G% b, ]$ o5 I) Q0 G8 W
+ N) [. i7 @3 b1 a5 X+ }
sdcms.setcookie "adminid","") M- O! ?5 |% q7 P, m% l
+ l% [* n5 d% e8 _) D( a6 Osdcms.setcookie "loginkey",""
( p$ S8 k: w2 Y/ b+ N, B/ |0 m
) @* ]$ ]8 x- D1 r" \; fsdcms.setcookie "islogin",""
$ d2 b: O8 R. G7 H* }' g) e0 e! s
& V8 T C! l% q0 M; ysdcms.go "login.asp"
9 J0 P6 H) O' T* T# n" W4 x( L
5 X3 }5 e1 V/ c! s% Iend sub
7 l# B; G( y: i }' c) Q( e6 G - \ b6 J7 k! q* o
# ^7 e9 U! J6 b$ ~
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!7 Q1 x5 O! Y. ]0 K! f4 X& Y
修复方案:
+ h- q8 ?" C7 ^( v! N! J& f) H' N修改函数!
! [' v+ i: N" V- q* z, N0 i* n. d7 G5 y |