找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2803|回复: 0
打印 上一主题 下一主题

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:
. y# g; T4 w; A& R6 `$ N3 @% h( K$ R
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试% r7 |9 f/ s7 c: P4 A' h
详细说明:
2 L" S6 f2 f. JIslogin //判断登录的方法
. t+ J1 t! ]% @5 y" Y 2 |% ~  n+ X$ z3 C) |9 G1 G
sub islogin()% h, m( E* ?, L% K# ~1 s

5 t, p! q- L1 y1 C, jif sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
" \( n3 l2 \$ J
! H2 Q/ c- h. }5 Q: z- odim t0,t1,t2
4 m5 S2 A/ j% w" z# l 0 ?7 c+ X( s, U& O1 p" I
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
0 o8 d& O) y0 N$ R
. l$ `/ c2 B6 d; R( wt1=sdcms.loadcookie("islogin")
3 f2 d0 @5 s) `; e2 b5 y9 K: I6 d; U
8 W" m+ W0 l7 N' U8 ot2=sdcms.loadcookie("loginkey")/ ^* K: l; z* d' ^, P

6 w5 c+ C$ V" s8 F# c; qif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行! P7 }' k" |0 R
( L2 X# F  Y, Z
//; x) r) g* A4 M* K9 a
. P; ]/ s4 i$ V- H6 c+ g
sdcms.go "login.asp?act=out"# D9 {8 Z0 {3 q; {1 X5 C( P3 u: l

( g# w. E& j9 Sexit sub8 c) t8 _0 `9 B6 z) Y7 \

0 I0 M4 L3 q3 }; Oelse
# ?7 g% f0 [: @+ d9 ?5 W& _
" G& r, b3 _1 Y. Idim data( N8 w4 i0 M# H! Q0 P( I

( Z7 K( [  K5 ^- D( b" ndata=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可控
+ M( |, d% ~/ b. L# V3 [
$ G5 B2 s" t7 o7 s, U- o. M$ T4 Z2 Uif ubound(data)<0 then$ w6 X5 v! I( b  g( q0 O

' I+ v' R$ g8 P( g0 wsdcms.go "login.asp?act=out"
5 J. q. h4 k! k2 _8 V) @
  J" K6 ~8 y1 ]5 t5 S( c' G5 I2 qexit sub
* Y4 Q; a6 ~2 U7 }# c) g5 z  }& K 6 Y- Z5 N$ t- M$ m
else
6 E3 ?8 c1 \1 l. P2 }( b- v
! D6 ?8 d/ a, W- X7 g" a) I- Gif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
. L3 S. V" `  j/ _6 Y4 l% M# }
8 }' G0 Y8 k9 R, B" F0 y* X( isdcms.go "login.asp?act=out"
# e( V# i5 |9 G: n# Z& c
4 m7 i. G; `0 X: `% m: Y6 X# f& iexit sub) Z! p/ ?9 _6 h6 v

9 a" b3 P5 A& x  A/ ^* D: @5 U/ ?else
# k/ D- x: {3 g. w; @' y2 c* e
4 N# _7 m) I2 f1 Sadminid=data(0,0)
$ {' U3 n- W: A3 w  l! {! S/ t( P6 H3 l( [
7 Z* o9 X5 N2 _6 E6 Xadminname=data(1,0)
9 l. u1 T- K, C  `* C+ X; w# j  ^7 @ ) _5 u7 a6 R/ C% y% m1 R
admin_page_lever=data(5,0)5 [# l3 z1 _# Y1 E

9 _- M* z9 P7 t. T* x2 Vadmin_cate_array=data(6,0)* p: M) N2 s. \) `

+ l, k& P2 F# I  ]  Yadmin_cate_lever=data(7,0)6 v7 w; \; R( q6 s
: \5 X7 t0 r) m
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
% ?* n: K; U! P+ P ' q8 o' k  S9 B3 }* E
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
  S6 M" Q- q2 p) W5 \  Y 8 h) X- t' D* i7 h# u) W7 s2 Q
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
, b# F) |4 f8 e7 y1 L, l: j, V1 S, } , H5 v, @. h/ D$ y  [" \
if clng(admingroupid)<>0 then9 V& j  {, \! ]' i2 _$ g( K5 e
8 |# o, C, G+ K4 ^9 ~
admin_lever_where=" and menuid in("&admin_page_lever&")"
1 x; W% b% L8 m9 ^) D . `; O  u, J' C! g8 l# ?
end if
" |' J: U! ?/ e$ C" d
% w5 ?6 ^9 _9 H, o1 n2 Msdcms.setsession "adminid",adminid6 z) Z, z% Z  r( L9 V7 K5 F7 x
) j5 C2 n4 n% c& V+ d1 h! V
sdcms.setsession "adminname",adminname0 m, X' `2 k+ Z! j8 s

% J  n* [) k# O7 @1 A9 Nsdcms.setsession "admingroupid",data(4,0)
6 q& a9 [5 q2 ^
# I4 U2 s0 j6 Wend if
! P6 U/ i5 D  L, o' w . j+ [0 h8 y/ g: N9 n6 }0 ?
end if! W. o" [+ \/ q! c# _  b
6 \+ ]; n& W% z
end if
  _0 {6 @1 ?9 f$ {/ c
$ J8 V5 K. X" a; c0 s  }) Kelse3 ?3 ~# e1 k+ u+ q

9 h2 ?6 w9 m' C& a: u, e! Ydata=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&"","")  I! D0 E+ F& N! n- i3 G

/ b. c! \/ }! l5 Xif ubound(data)<0 then
. Z8 r# a/ S  Q" T9 V! O
" e" o; W2 M. vsdcms.go "login.asp?act=out"
! F: k5 q/ R8 f7 y: X& o: O- p) w$ F
; i& G& p5 b/ Jexit sub
+ q2 R; r3 h: E# E+ i4 [
5 D# G% `! i& l. w' c- Felse
: Y8 x7 P! ^* y$ M % ]0 H' |/ p3 V7 Y. g6 H
admin_page_lever=data(0,0)
7 A+ C) F* N3 p2 ?" K- }" K1 }7 y6 C1 A4 E
0 `$ o3 X7 g# q6 A4 Aadmin_cate_array=data(1,0)- j5 l$ L1 V+ ?- Y# f5 f
% Y9 E5 q: A' R! I4 z
admin_cate_lever=data(2,0)! R7 K6 H' z. J4 O+ K' F8 A' {
6 i4 A9 K( f, `7 K2 [5 i
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
) K! r8 `3 C0 [, |! G! ^) @$ S( e' w
* l$ T+ e7 o# g' l6 kif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
: p! c5 R8 z: ?3 J) h( S+ c5 a . M/ o  a8 A0 W- z
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
/ X1 J6 U& O; p) u) W8 ~+ W& z
0 J; _4 Q$ s6 `if clng(admingroupid)<>0 then) ^# T2 p! G0 u9 ^) t  W2 R
  N; ]% h  Z( a6 L$ W7 F& j, N
admin_lever_where=" and menuid in("&admin_page_lever&")"/ Y" Y. A6 X1 X. L3 U) n' T$ Q6 Z6 o
+ U* D4 N6 d+ t, p; n! Q
end if
- s- X8 j/ s  `, [( g 9 Y- q- l8 E9 w8 M& v/ s7 S
end if' z& J+ L& k. [2 Y2 v( U0 `

% q! A9 T6 b& \) d) D2 [4 X( jend if
' J; V% M" U  Z6 p ) a  H$ m, U2 ], {" U- Z% K
end sub
9 y4 P' [2 e8 {; [2 u  L漏洞证明:
. L9 }# ]+ A# A) d看看操作COOKIE的函数$ X( `' n: J+ }1 a9 R
8 M, k7 h5 t- m5 Q; \0 j& G' o; C
public function loadcookie(t0)
& g! ^' Q* O2 b0 `4 X5 Q & ^& i6 w' e# B; h5 t
loadcookie=request.cookies(prefix&t0)
- u3 o$ S* B+ y3 u+ `5 G
$ x) ]( G, v% Q' f4 pend function; ^& J! C! {4 w5 X, G

8 W* n! i1 v/ V" j  G( _0 |# Epublic sub setcookie(byval t0,byval t1)) t. @' f9 C7 l, ~
; U! ~" l9 z" y4 N. G
response.cookies(prefix&t0)=t1
0 ^8 g; q* E( E
! L5 O: `: j0 v9 i) u+ L, Y# i! Lend sub
8 i  Z" X* w$ a  i# z6 k3 C9 l* ~ # t& Q4 `$ ^1 E3 v  W6 X6 M: S
prefix( R2 ]2 @/ d+ @! r' a$ _( y

% ]) a! w( F6 u. S* ]'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
' S% W0 i, r  i$ z1 |% X$ U; M( _ ) G+ k' V; @+ k! n3 Y
dim prefix2 a& t- {, P3 N2 r' y, ?

& L- b0 Y1 q/ o& s( a- S- O! kprefix="1Jb8Ob"6 d4 {8 L/ y% z8 @  B+ Z) f
  U. S6 v0 z+ {$ i! P6 J' h# K
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 3 W  V" E. Y  |- U. |& F, o. A) W

2 C8 h3 ~2 \; \8 v# Z" Lsub out' a) [1 q6 z) m( J5 Y2 V! B4 K; R
/ s& }; |/ ^9 @1 l0 G* e# P
sdcms.setsession "adminid",""
$ V9 R% ^; [" g4 U' J- |' ~
- |6 V; B3 o* wsdcms.setsession "adminname",""+ ~& K; U: z& n/ p/ k

$ u# M5 y* M3 J5 {, C1 [# Jsdcms.setsession "admingroupid",""+ j; U4 s0 s' v

2 Y# d6 e6 s7 V0 y# Ssdcms.setcookie "adminid",""0 M; T- o; p! f0 J

. ~, \8 r; b; P5 Y/ r' esdcms.setcookie "loginkey",""0 W4 W' C  w3 v! {& K

0 w* n, N& Z6 b- ~) c1 r' T0 bsdcms.setcookie "islogin","") A8 g6 I1 Y. g9 [1 t
3 R' _# q- D9 O) a
sdcms.go "login.asp"
% I# R$ {6 {% T4 q+ Y 0 ]" o# e. n* `- O7 Q3 y
end sub
4 t$ p( y& R/ P. U0 c ! j3 n$ D# ^1 i4 h
, d- o, o9 u  H: E" ~: W' g- H8 S: l
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!$ D5 y1 Q% e" ~1 d9 Z0 c/ {- G
修复方案:
8 j( F. s$ @* R" [$ W, H! |修改函数!/ [/ B, f) Y6 R% ~8 I: a) O# Q
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表