要描述:% g5 D8 A! J8 G E8 e2 q* `1 N
0 R! ]& \9 ^0 QSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
' z' m, y' X* b# r! L1 }详细说明:
' b. V" f! h( H2 L* I% w& AIslogin //判断登录的方法- O& A: B! a" V: y; ~, e
% C* T/ Q$ c! l) l& x
sub islogin(); Z! B. d& K" h" W/ M8 D! g. y- n
- P C7 M& r7 W/ E+ lif sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
( Q& i% w6 `5 `* g; J6 m 5 J/ m5 d7 y+ r3 k3 t7 I( | o
dim t0,t1,t2 " V/ V: |, \! |% a
0 ^ Q8 j: H% m4 M/ \
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie . j! C7 ^4 z' s
# r4 ]7 O) F" q. j4 `
t1=sdcms.loadcookie("islogin")) Q- y5 G: c% ]* C+ k- @3 c
2 A/ J# U' W+ H0 N" U2 Tt2=sdcms.loadcookie("loginkey")0 x( L0 E' G4 j
: i& T5 u3 B2 E0 V1 i
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行* c2 S- h _7 M, H
& h, V y' t1 r" g2 o$ X8 ]: ?
//
- b6 m" B/ C- C2 G& Z$ F E . a3 i3 \% d: Y" C
sdcms.go "login.asp?act=out" d/ t% Z7 c' y1 ~3 s
6 y; h3 L' o0 Pexit sub) \* C" S! M& s; v3 f7 j
$ j+ @4 a3 U# u+ N8 f
else G5 ]( `1 T2 g7 M
: n7 {/ a9 W$ u8 }) z7 P9 J
dim data! V- l* m+ D" \& C& ]& l
# F3 r" v9 m R5 pdata=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 N9 L2 e8 L5 ]& M! V/ B( V / Z& \0 ~, f& V& H3 I0 [$ H
if ubound(data)<0 then
{5 ]0 d. S6 a- q v4 a( x" B- X$ W
~7 Q3 ?* W3 K$ q8 h6 Vsdcms.go "login.asp?act=out"
9 o* N! {+ _ J; I
+ e4 G3 I* I! M Y* _" x+ J: Gexit sub+ k0 p# J8 J. ^% C( {- P3 q; |3 p4 G
5 l- W" [8 ^& W' b
else* [) z0 m7 T9 V
8 ]( y2 i1 J* \, f: R( C
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then! X3 f1 L" `) o t7 ?$ Z$ A
& K+ e& h# U3 D% a3 i
sdcms.go "login.asp?act=out"
T3 i7 M0 P4 b C3 b' {' h- V# `
$ Q, h( A4 ]0 Y1 K, J& o" h1 k/ Texit sub5 e2 A k/ [" m$ W
: M% \# _# r6 }5 W) e* [7 J% e) i4 I" k
else
1 g5 B( d" A# n/ W# [5 K/ B: x5 I 1 z* [7 L$ { x
adminid=data(0,0)$ b, B: p# U/ u7 k9 i+ c( w
7 \; G) Y! R$ E# x( j* W$ j% y
adminname=data(1,0)4 M, @3 u* B8 c, N
" V2 z0 q+ Q' @) Madmin_page_lever=data(5,0)$ s# ?3 i. Y/ e( P7 b% p
1 A& B% W+ G B \admin_cate_array=data(6,0)
8 x- ]1 A o( W! \ 5 _: ]6 v+ N, w a% j* `
admin_cate_lever=data(7,0)
[7 `6 S! N2 D0 ^# J7 f2 s0 g$ r6 r1 q
) X8 u. w8 b. E. @( G9 j Oif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
5 W) X9 S2 W3 i4 N* [ * p3 _* A. H. Z4 a3 |
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=09 T R7 I1 K( k
% d$ w3 y5 O8 g3 C9 o8 B) C- Pif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0% q% l1 P4 E6 J( U2 K3 |3 a
; j! c. d |2 g" E
if clng(admingroupid)<>0 then
+ Q2 y0 ? ]! V3 h8 y @; d. T H. a, E2 ?2 o$ }
admin_lever_where=" and menuid in("&admin_page_lever&")"
4 Z- m5 R6 x2 L) T: c1 }4 r, @ 0 [) y& ~( l' L/ m6 w0 O
end if
/ }% H+ f) H- r* d& W, _& C , ~: o. \" \! W r" E' H. Z! ~
sdcms.setsession "adminid",adminid
3 {9 K0 v+ x2 k& l" O
0 ?$ G5 J& M) g1 asdcms.setsession "adminname",adminname
1 [' A2 g5 b1 ^" ~3 Z% ` - Y3 g& N8 P; M0 d' ]8 m2 [8 Z
sdcms.setsession "admingroupid",data(4,0)
" s, s7 T( ?0 G9 @7 o
& C1 U, ]: f- Aend if
; Y" W" B- w( m; a2 d% \
7 z. g! d5 D! x. e, Y. kend if
* I' v* C; {0 W( F4 Q
% |- {. u8 s, N% \4 F( rend if
) x, S* |3 y2 e + G& }$ k# S) J8 v( w# ~7 y
else
: c; l* j9 r- `9 |* b 7 t n" k8 I$ H/ h* E" Y) Y5 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&"","")3 C n! R3 W( b' ?
7 B A) |4 }$ jif ubound(data)<0 then
- L% r, b0 s1 o! M+ C) S $ W- k" R$ l8 ?
sdcms.go "login.asp?act=out" U8 J- Y4 d% s* O( J5 f5 @. W/ O5 ~
/ z- k8 W# p; r: V' a" {. J! M9 e
exit sub
2 d% S1 j. k8 ^- Z$ |1 V( V 5 D* Z6 ]( \% `
else' q V0 Q! W1 j: G8 T' ]
% L: T# t! L( R; K( C7 u
admin_page_lever=data(0,0)$ [5 |6 w* V' o) p: i) ~
/ M: s+ w' m$ I6 v! H) z+ dadmin_cate_array=data(1,0)
; z0 Q( ^- ~! m' d2 p. B% i
3 G* k0 ]7 k, ?! x- t" n/ Xadmin_cate_lever=data(2,0)
$ @! c& s2 q6 B4 n! s
7 N4 r+ D4 b7 X9 i9 {5 G; b" ?0 Q& Zif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0' |# W( C# C B( U6 n2 f
' `! d% W! A, w0 Z7 r% Qif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0. h# [4 m: @3 S$ w7 W: V! Y3 o
/ K3 `0 n: [0 r$ u+ f4 q2 qif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0; R$ l; C& A: L( q* j" L0 K, l, y- X
) ^2 w3 _; Z9 ~+ s: D
if clng(admingroupid)<>0 then
- [# ?2 c$ }1 g5 P1 Q+ F9 c
7 Y3 O0 w- b$ O% w) Cadmin_lever_where=" and menuid in("&admin_page_lever&")"
: ]3 B. R+ q& E( T8 H' W
O. H& P; J! U- Hend if
& l, }5 z& x% M7 M6 k) |) u3 [7 F ) J- c; g: Y8 i$ X. b
end if
; L s( W/ ~: {! |
4 l/ T$ D+ b' ~" G# L4 Z# yend if0 W2 `. i! u: d! m% p& @
" d6 {! g9 x$ S2 x
end sub
" I8 S" T6 @% q, N J漏洞证明:5 I* F& y6 E w$ A- A: ?( ~
看看操作COOKIE的函数
3 d. H: a7 D9 y+ Q# N- Y ( I5 R. f# T. V3 k4 i
public function loadcookie(t0)
) p4 @7 W5 e h6 q
2 f1 W$ W0 @! Zloadcookie=request.cookies(prefix&t0)* Y- Q' Y0 f0 m/ K. A
( n7 U# I/ G! w0 a
end function/ I1 ]: L/ y' R, U% w
% C9 a$ {( p/ m( qpublic sub setcookie(byval t0,byval t1)8 { g3 d {' b3 e% {7 ^
2 O6 e/ D/ o c0 W Y& Kresponse.cookies(prefix&t0)=t19 d! [# K- g. W2 r( E$ z
5 E+ y9 T5 Z o
end sub, [1 S S: K d( q C' L1 y' ^
x2 [4 b& i9 y, K0 v/ tprefix
/ O5 G- `1 R5 O+ N( o3 ^. b
e! }* x2 ]8 _3 ]4 r'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值9 H- ?! V- C7 _* }
& T' t# n4 o& @" N0 Udim prefix
2 V5 G* T" u8 |5 o
: S+ w: G9 p0 s: |9 j% nprefix="1Jb8Ob": O) ~( i$ o; E2 c
# v5 j% y# v% S B; S0 w
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 9 X9 U1 F9 u( |: l) b( X
: [) w$ y5 @8 \; f* G* f7 csub out X* ?1 J" M3 u% H& [1 T$ I8 `
5 E* A" s2 A* }& Q# y4 ?sdcms.setsession "adminid",""
9 S7 T0 E) [- ^( w: }
; R, G8 ]1 [0 ^6 {8 ?sdcms.setsession "adminname",""2 { M4 n6 \' s. m; x
4 z4 E( q( q: n7 R/ D
sdcms.setsession "admingroupid",""# Q0 R: C+ G$ \ S( X& {8 a
: r% v# c6 O( c2 {3 Jsdcms.setcookie "adminid",""
~/ y1 r. t A" f. W. d% r/ ]' X
( K C6 R: R( t9 Y/ L- _% A jsdcms.setcookie "loginkey",""
4 g, p1 e5 d, W5 g
: ? D1 ?5 n1 R4 Gsdcms.setcookie "islogin",""& U L! w+ B1 `
6 x% v+ n# O" C
sdcms.go "login.asp"
* L# D: I: S8 f( n, j
! I8 {3 \7 G4 Tend sub
0 n! @$ G* g9 V! {
/ F d" |4 H! h. w. D- d3 p
$ Q- M' O3 g; |5 f( E' N利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
: D( y, Z, m) I0 F0 m修复方案:+ D _" I1 J( [) A
修改函数!8 W1 ?! }5 T; J& K- |' D
|