要描述:
6 \* I+ S2 P( a3 B( f$ ~# ^( _3 L" M, H8 u& w; l
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
5 u3 Z+ W* t8 E Z( N. ~' L详细说明:
+ a7 z q, M; b! S4 `Islogin //判断登录的方法
; \3 L7 d' d( P3 W
- B" w+ m3 d0 S* Fsub islogin()2 }1 W; m {) b$ N+ `/ P y
$ ^ @$ n/ `9 `
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
) M# g7 W+ h6 b$ \7 N 7 w# Q) ?% s, c+ m9 `$ z/ ]& ^
dim t0,t1,t2 9 s# b! l: G- T% D# L0 f; C( Y6 d }
6 n P+ U) l$ O7 ?1 }
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie 0 t1 v6 L2 X: j. t9 \$ f
% k0 _9 c. `- t4 X j5 i
t1=sdcms.loadcookie("islogin")
/ M* o- @0 {$ M; f) H
; l2 G8 m! \( }5 H; _9 V: gt2=sdcms.loadcookie("loginkey")
$ g2 T, p3 s) W' o$ a1 U" G$ B
7 D# ~" [) v# d2 _* Q) `if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行8 d6 b" [6 N" G0 D" r
8 x# `$ X: f' N5 b0 l//$ X& M+ P) b, K' l! v
0 l2 b( v2 h( ^% I
sdcms.go "login.asp?act=out"
. }5 `2 C# p) ]4 d. T3 X4 b ! Y. n6 M$ ~ }. M, W+ _
exit sub
' c0 n+ K/ S0 n- X1 ]7 v, A# M * ~( F! x( G+ j5 K
else$ S: U0 x2 C& c9 B$ l& @9 u
1 L, Z0 v% |" m& H& O
dim data
* j2 k9 c* e0 d, P 4 K0 ~+ X T3 P. _+ c
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可控1 @ b0 ?8 ?. U' q! p
# d4 R5 i4 [2 [( J6 G0 v! }if ubound(data)<0 then ]2 D' J: C% U- A/ V4 U3 P$ w
4 R$ l* s* P2 _8 Lsdcms.go "login.asp?act=out"
$ F4 x1 C1 a/ x6 }4 _5 f4 t5 G' {' e! a+ d " l# p# F' O# j! N3 X4 c
exit sub
- ^1 o+ Q( [. ~/ T6 B " H! f0 p# w D# F& b. \: a
else
9 @' u5 |6 F5 _: }
4 F/ [* d, I7 ^5 v8 vif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then2 y2 U" J0 Q; {! C
# l/ R1 l! J: S
sdcms.go "login.asp?act=out"
* K8 g* m! D6 S9 X9 h' G
7 e r/ f+ Y" }$ G5 Mexit sub
, _! T+ @3 T9 b) i( _ & x! U+ E7 i/ i& \1 ~
else
& p% D' f0 X X6 q$ A 8 J) H' F) B9 W2 T8 G3 x* \0 a
adminid=data(0,0); Z" ?$ w" _3 |
* }) N. c+ e% w/ t8 q4 E |6 F$ eadminname=data(1,0)' m! W' t# k2 I" ]& q* I' V' D1 O
2 @2 |7 B1 z, f6 a+ Iadmin_page_lever=data(5,0)
) M; _( R- J* B5 Z
: t$ S9 H [: e: I# Eadmin_cate_array=data(6,0) n( l9 {- [5 w2 b( X
) [: G/ C( l$ _' wadmin_cate_lever=data(7,0)/ {0 U1 h* S4 S
' [/ L; |+ ~# g, D
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
' r) ^. a( D; u" A% n7 }3 m ( w; M; D7 T3 ?
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
+ q2 M" ~6 N3 z. H% z/ c8 Y 6 y y- w0 q- v& }
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0) F3 |9 U+ K# w; V2 K+ @6 f* b
3 k# o6 `1 A9 E+ H8 k( E1 x' Aif clng(admingroupid)<>0 then' k. ~3 [/ h3 S, i
: M6 M0 E. I: v" C5 f- yadmin_lever_where=" and menuid in("&admin_page_lever&")"& K7 H5 A5 X! Z3 Y# o2 h
$ f, r/ S8 k% l8 J% Q8 j$ I2 V& q
end if( _' J$ H2 i4 ]- c8 l6 `
: z2 O T# m7 [sdcms.setsession "adminid",adminid
% w7 a4 K* j, a, [+ B ( r4 [' f2 O; o
sdcms.setsession "adminname",adminname
b3 `3 D, b1 w L+ _# w& t
4 w7 h! ?% S4 W7 b r) s' Osdcms.setsession "admingroupid",data(4,0)
% ~! Q: A/ U* ^# \" b% \/ {+ \0 i, b- [
* P; {- r+ u7 K! @, K& ?end if
4 R% k) J1 r% T9 O# Y. @( }. u B1 ] , o8 p; ~ X8 R, w$ q; B( v
end if: Z! Z$ B$ Q9 Z5 h9 P/ q
6 Q0 B4 U( g' n) b
end if
2 z2 w* Z, _# h' m$ P
6 N8 B+ l% l. N u5 z* Lelse& ^( t7 x1 e3 q! `8 W, b) ^0 t, z1 |
: m* h9 ]6 { }
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&"","")# Z: C/ X7 }% R; `
7 x* u& A3 t. S5 Q3 ~! c! l
if ubound(data)<0 then0 `' p/ }& k/ h) s4 p
h) Q7 K7 ^) A0 f+ psdcms.go "login.asp?act=out"; b# [0 p# W6 N. p5 ]5 p( S
* J5 U0 g3 d/ ^' Z) ]# N e- Fexit sub9 k+ F" N" V1 g: y* t
8 d6 ?' n$ L3 w5 k( ]else
/ a" @' b; t* `) h5 F 9 _; q+ o3 T2 W8 J7 r/ H
admin_page_lever=data(0,0)
# W2 V0 [6 v" p8 g 5 z6 j2 e) M; @0 V$ d
admin_cate_array=data(1,0)
: K/ n/ x+ ?; I$ i& c' g/ p
/ q9 w/ @( }# v. `) O3 J6 f: Wadmin_cate_lever=data(2,0)
j5 t" c6 } a2 f
7 s& ]% C" @3 o6 L8 Dif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
% i+ C$ }3 F7 @5 I5 d
- G+ I) L$ I, G+ j" {# p: N2 Pif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=03 w9 S" o+ g; f# `5 M7 O% @% Q
- j9 t1 R* U& j$ i! I% _" Tif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
& {4 M% R r. b) g* x
' }: q* y# a! `2 H% A' Lif clng(admingroupid)<>0 then4 i6 {2 ~* J1 W \4 v0 G$ A- ^, O
2 T( y7 q, A; F/ H6 |admin_lever_where=" and menuid in("&admin_page_lever&")"
: G# N& o0 X$ v( o" ]( M3 E5 A9 [
3 a9 v: y9 Z3 [end if: r" d" G( C$ n& y6 l7 U
. D- `" H7 F% O) P8 j; B ^' w
end if# g. G; ~+ C: S- Q$ s
$ @ j1 O+ o% D% F
end if# j" G8 s, r% o! @0 J- Z& o4 o- |, y
- ]$ s7 S, w' T8 M Q! X1 yend sub
0 P+ j% ]( N6 Q8 V漏洞证明:
8 M- Y; S0 J; Y5 o) G( Q看看操作COOKIE的函数" J8 s. t, L6 ^
b' j' P1 U/ a1 X# j" ]1 ~
public function loadcookie(t0)1 H# b/ o1 I5 a6 v w: ^" v1 b
) ?9 Q& m, V; ^# ?, T" w
loadcookie=request.cookies(prefix&t0)7 y1 j' S8 K: }9 L, ?+ r
, I. R" G r5 C! \end function
% f( |/ q$ S$ x3 o% v: m+ `: e 2 G& P/ N$ o; d( ]8 E' W
public sub setcookie(byval t0,byval t1)3 f- w; P: W! R! {/ Z
+ c7 n* W. {( X2 p
response.cookies(prefix&t0)=t1
$ ^% V/ c9 t7 o9 H
2 z5 w3 z E- R* _end sub
; W+ R0 [0 e! {2 q( r' d ! g& A0 H4 @0 N
prefix
* m; p; H1 m2 m i0 C
& x5 r0 i. W9 D( z- ?'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
3 t( h+ L( `1 f" }+ U
7 s7 J$ V3 Y7 F6 d/ F( j% B+ u* @: Wdim prefix: y) C. \$ `$ X: l1 e8 Q4 }
( E0 [; x' h: d; V' w; U' b, F
prefix="1Jb8Ob"
; g F3 o; F5 W. k6 k) V$ q2 I ( Y. _; \) F, i' I5 `
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 4 H+ d; _( W: f- |
- a2 p5 @3 f) k( csub out: {1 ~( W6 F$ C9 X9 u( E. A
, z3 X+ E' I: r6 Csdcms.setsession "adminid",""9 p; K% @+ _; S: ]# C Y+ Y
* I& N! S4 z5 Y4 W! o# T2 ?4 o' A5 U. I2 \sdcms.setsession "adminname",""- v; Y. a5 h/ @; J& q
9 t% a' N( [' H: V) Esdcms.setsession "admingroupid",""9 J3 W% ~" G+ ^0 d. g5 d: j
1 D/ _* X- E% V: _& y( k. Nsdcms.setcookie "adminid",""2 M- d, a% E2 N5 d, `9 G
" w% J" n2 Q3 f& V6 v
sdcms.setcookie "loginkey",""
" x7 j3 _( @( ~- ~! Q
: H4 o- I! K- k- q( ?8 `( Jsdcms.setcookie "islogin",""
, ~5 w% q G& \* g$ J2 F% s5 H* A
' n& ]$ y% T* q7 Y/ }6 o' z) Jsdcms.go "login.asp"
6 Y$ q5 ~0 R p/ P0 h
9 C$ R" n* r/ x( Iend sub9 T* a9 k W. ]2 v1 b
: Q9 n J" u0 C8 v- g. \
. U: r( q4 S/ E, {; i0 E# w8 l a利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!8 k6 C( D( T* N j4 }
修复方案:, _8 F, B9 l7 _, g* n
修改函数!1 \8 P g3 u) y2 Y- z ]
|