要描述:
/ R( @: {) {5 l$ Z/ \8 t- g
4 [' e) S- M9 J2 X+ t4 m1 ISDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
$ ^$ P; ]0 l9 U, P- Y( P! H9 X详细说明:, Y5 D% _7 r m( |1 w' t+ g8 |
Islogin //判断登录的方法
1 u) z# w. k+ P7 k( d5 q7 n, L
' \0 E# o8 ^8 ` d- }" Dsub islogin()
7 U" p% E t& r: ` F- h4 r, w) p9 F* I
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
8 M5 C( p& [ r/ k " E8 m- B0 D1 n- C; h
dim t0,t1,t2 7 K) ?5 A( t% R8 a0 e
/ j( s& B) R" F3 \* f% i9 yt0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
5 K+ [& m7 v% v' _1 r5 ]
' r& r( n% M" M$ Et1=sdcms.loadcookie("islogin")
* ?& \9 H2 O. c) Y% F4 X 4 E7 O+ N* q! V& @' G) w3 @0 q
t2=sdcms.loadcookie("loginkey")
% ]6 K! L% ?' x% i: A9 N* q8 |
! M6 T$ ]4 K1 h" n+ T7 Sif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行2 f* C# U7 W$ I
) F/ C1 T# u& G$ B" q//- z |) p5 [# w
+ s* f |5 Q& k) [8 P7 J& B
sdcms.go "login.asp?act=out"% z( w& }8 c7 x7 l9 h
) y/ ^* _0 h8 b4 texit sub5 D# q1 `: _$ P t
# p6 o1 @% X" \& ]( p8 s# C
else/ d' _0 s8 {; m5 O9 r8 z
4 {. J. ]4 \7 K2 u |$ n
dim data k8 ?/ i+ {$ l' v6 Y& i- r1 ~! ?
8 F$ S* C7 `3 [& F* z$ ]+ z x/ W% `
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可控
# `5 X/ _! k& W7 p
4 J/ y% p* g' o6 a. F3 eif ubound(data)<0 then
) i- v8 \- J+ r- e1 D0 S0 ]& ]
3 s! ^' |- z* R# gsdcms.go "login.asp?act=out"' V7 H8 E `" M$ ^. [/ a; e
. \; }7 p8 z0 O- b3 N, y0 @
exit sub
0 z8 A& y, U- {$ Z9 ?) A# p
& j% \9 }$ F% b# }# melse
. {; c# m: S. a% N
3 P8 l2 A) P' tif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
+ c( a9 ~3 t+ c- F
- s, ~9 K6 v w! ksdcms.go "login.asp?act=out"7 p- s- W& p0 M
' g: e$ ^2 X: a8 Q; ]& d( B
exit sub
7 O' H) J: F, X5 t0 e
3 U i5 P$ z6 Y& Aelse
+ f5 q; z+ K! u) Z5 o4 O
; _3 g9 w6 T; d! E! M' Fadminid=data(0,0)* @- C5 _# e6 f/ X
& p3 p* E5 _- r9 s& m, k$ nadminname=data(1,0)
: v# u5 E* \" e. L
" F& o3 N9 }. r! s1 \) yadmin_page_lever=data(5,0)2 n: k; \* W& s+ p1 N1 i
0 i5 ~6 E M3 ^
admin_cate_array=data(6,0), C/ G2 k8 T- d b- d
1 R! K" I% v% A7 I9 f! M1 p
admin_cate_lever=data(7,0)
6 J W6 J! B% v8 L 7 X0 R, d5 q0 @3 [/ V2 [( q2 J
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0% S6 V7 Q& t" l6 x
, ]1 D. z$ N- t! g( o8 w
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
; R; b+ t6 `; @/ g! ~ ! G) W! W. K6 q$ ?0 f u1 Q. c: X
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
4 y1 l: ~) o, T. \
3 X" ^/ Q1 `; I9 ^' ?+ {if clng(admingroupid)<>0 then
; D! B: F7 S: l9 p
1 B s5 o3 e) `- O& _admin_lever_where=" and menuid in("&admin_page_lever&")"
+ j: P5 @6 X4 E/ m% N
* ?) q( M5 _% Bend if7 J7 O6 x3 l$ R& h1 ~9 {: K
. S/ E+ n5 d! l$ h8 U# Asdcms.setsession "adminid",adminid/ P$ w7 e" r' |# X
: j! S+ j2 H8 n: w( t+ Ysdcms.setsession "adminname",adminname# l7 H* u5 {% w8 b9 ?; v4 E+ I
' w, ]+ k6 r: t
sdcms.setsession "admingroupid",data(4,0)
2 M) l* A* h* V2 F( D! _) F4 A- C + [, a2 i0 \+ s8 f m9 C0 g H9 I8 D
end if
r0 G6 z1 }9 T& {. c* Y ! q6 p- v5 o* O/ {7 n# h
end if2 f8 M' A: _ s6 y* g7 }! o8 F+ Y
9 n! m& t. R% B# Q# u* T
end if
( ?' e8 |" j. e3 V" G: I4 t
# G2 W; M; j# @ \- M: s6 }. ]# zelse
6 B- _0 P5 e( V / x& v) p, s8 ]. u. W- ~
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&"","")
. B" N& c% n3 V9 Y1 b# B( _# p$ h$ ]
3 g; Z/ q" X. {2 ?4 ]if ubound(data)<0 then' ]2 d# K' Q" P9 x. H! \, g
* `: t, r/ W7 f+ R! ]sdcms.go "login.asp?act=out") P: q a+ k/ l
- t: [+ U+ e9 m6 K9 w
exit sub
0 c# l7 r# ^' ?2 E8 `7 U) Q2 P 6 F2 S# n; M I0 r7 H
else
( \7 {; ~' u3 B2 T5 S0 A ( Q } X! T4 {' Z6 ]
admin_page_lever=data(0,0); f1 p' m$ M3 y! K8 k
b0 K8 u* [8 n9 P* \: E* y' H' i
admin_cate_array=data(1,0); L& i! u3 k; u
3 [# Z Y6 a: i; wadmin_cate_lever=data(2,0)# u5 Y: |5 {: L3 j9 |$ j: X
# x% m& |% f: b1 q, O- zif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=07 v$ r6 i* D1 X, y9 F% r3 ?
" H- t3 d5 }1 m" y9 Q
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
/ W2 t9 G* g1 H7 e
; \9 r9 w' H! i8 O% yif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
# }% [4 K" _* S, [ 9 b, r+ O% ^( \. Y/ K2 s
if clng(admingroupid)<>0 then0 g& O f$ W+ S* G
6 w" s& g8 j- Nadmin_lever_where=" and menuid in("&admin_page_lever&")"
0 [+ z7 W1 |* R: {3 @
* y0 R1 i' a' X- Mend if
, p R) n' d/ }! e' n- m
* H) @9 F% {5 u U+ ~end if6 W1 u8 i" ~3 h: @& f9 y
# I) i9 ?; L- `! l8 q/ N+ yend if
# w9 `2 t3 X q5 \6 ^
! G( J- e: Y+ N$ f( s) Y$ G: uend sub
2 @& P4 `. L4 x+ ^# V9 ]2 l& X漏洞证明:
. S5 @: f( T8 {看看操作COOKIE的函数
/ p/ [" ?/ H2 O5 `* [/ |& e ; Z& a: F x, R3 D
public function loadcookie(t0)3 g# S" k0 J3 W7 C* }. ~! k
Z: o/ E8 y, h) l& S- @6 p! ?7 i2 x
loadcookie=request.cookies(prefix&t0)! p6 l& @0 l+ h: ^1 M7 h7 ?: Z
& b( y% J7 Q" [end function
& l4 x6 ]; [* Q: n0 H
5 c2 f5 F5 l5 _" H4 Bpublic sub setcookie(byval t0,byval t1)
M3 L1 m* T; H" L7 F' z0 G1 W 1 B+ Y/ |! Q+ [. M$ l4 |5 T9 q7 B
response.cookies(prefix&t0)=t14 J9 k9 A( u- A& ]$ t3 g
+ h3 o7 J9 [: }4 L/ f
end sub
- S" e. Z1 @- w ; N- f6 O8 `3 M; E
prefix# c/ m# o4 ~6 Y' w
' f6 T- L, ?; X$ q1 o9 e
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值4 r% D1 [8 D7 K! Q5 v$ ]; K
2 s: s8 O% j* j/ r, Xdim prefix3 Z+ R# {% j0 ~* f/ D7 p/ X
" W4 s% X9 m8 l0 J% i; Y
prefix="1Jb8Ob"1 w( M9 b3 i/ u7 ~( r7 V* t% d/ T1 G
4 m# U' I$ h) u5 R- [% x# T- u
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
! n6 Y, N1 M' w* g
2 x: [" Y- a: e( ksub out1 d9 o2 Y8 Y" B; B
: Y+ U0 B% y7 c: ] l8 z- u
sdcms.setsession "adminid",""
5 G/ a. L' a. j4 {9 v$ | # `$ Y$ ^$ S* U$ ~
sdcms.setsession "adminname",""
) z- x: T$ N, K, g M' i " s/ |, W: v( x9 d
sdcms.setsession "admingroupid","". u+ Y2 s6 L6 U9 A$ g
1 L( N0 ]* s7 C" B- H
sdcms.setcookie "adminid",""1 N9 ~9 Q4 L6 ^' o; m) N D. V: G
8 W$ u& I# P% H9 Ksdcms.setcookie "loginkey",""
6 g2 R1 k. V0 k7 W* h( F 3 R0 B) @5 f5 G! h: c* F
sdcms.setcookie "islogin",""3 d2 c: J. Z; R+ ^( q @* @. l$ _; ^
$ S9 d2 C7 w% C5 W& x0 {sdcms.go "login.asp" E L$ Y8 V! p2 L% Z) n- n& A" b
* J2 W$ ^, }0 k1 ?# P
end sub
; A: `+ Y p$ B# W / {+ @1 Z& j$ |$ Y6 l
6 @7 E7 ?& a. B. ?) t利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
# u# G E8 l: ^7 v& G( }修复方案:
: i4 X9 W' `6 L$ m# d9 l修改函数!8 \, ]- e; b, u7 b9 N
|