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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:9 e/ X" i% m/ W# p# Q' x' l

# N  _  i! k* r' Y, J* {* Z+ T- KSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试8 M1 V7 n4 M5 R
详细说明:2 k' I- R& Q) N* B: @  S3 d
Islogin //判断登录的方法" {& i$ Z, J' O' C. Y/ C

3 @4 `6 c. n" E" @% x' a) I0 nsub islogin()
/ V/ y' Y6 X% o, j   z& H+ R) ~( l* Q
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then 1 ?8 e, L2 Q  |4 n8 Q; u* x  V- O

# I1 H: h8 G) G6 ~dim t0,t1,t2 . ~  \9 B: i' A* ^! a6 K5 f
+ I1 ]" y! g3 a! G
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
2 N: `5 s3 N7 C7 D3 ]1 D  g
2 C! o* Z0 ^% t# wt1=sdcms.loadcookie("islogin")8 D# j4 D+ w0 t  M
! z' t, Q6 l$ w1 G: f
t2=sdcms.loadcookie("loginkey")4 y1 D) h* c/ ^- ?" O, H

. E9 [. z# k; s" {: B4 z3 pif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
% e9 `/ R3 @2 \# p# a- f
4 Y, B6 l# B8 z. v) C  }9 \//
! b2 V; b1 H0 E$ V ' C% }) e' H& R/ R) S6 @2 V6 d
sdcms.go "login.asp?act=out"0 Q5 o! x4 i  }3 d) ^2 Q& |8 X

# x5 P: q2 N, }, E! c3 Jexit sub/ c5 q/ ]( B% ?. p/ g
, Z. G9 P) D. d9 P, v1 @# r
else, w. w& d4 y! u2 ^* |
$ N: I, q/ l) i- e
dim data
3 x) \3 {2 h! }) b% M ! I. \8 V$ h: f9 J7 m6 @3 {* Q- t- ]
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可控
8 \8 e  ~8 o: v1 [
4 A/ j3 j0 Q- T- K- {% I& Hif ubound(data)<0 then
  L& I) x. J6 Z: {
* o' `3 d3 v9 ]; c$ h! [5 d0 c/ Fsdcms.go "login.asp?act=out"
" D' r$ V) R+ y: K& F. z* ]7 |. k / _, d9 o6 i3 T5 H0 N
exit sub
: C9 M1 \- t; U* v
- p9 {& _6 }: U8 _4 y9 relse6 g0 @+ Y" @( N$ Z; G4 k

2 K- D0 X9 w0 v6 [8 X/ ^, M; Dif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then' t8 f5 D! K: k5 y8 p
5 F, Y6 T0 g+ U0 t4 r+ [9 o3 M8 ]
sdcms.go "login.asp?act=out"
. q& w+ Q0 f2 F: L
/ g1 d  K9 G  y# ~5 R% I, Aexit sub. }0 D; V$ M2 z6 @! y
- Y6 @: `. \& L$ O
else
/ P% H8 q9 H9 ~4 c+ r, Q
- k' d& K0 V  O' r0 `' ]: Y8 kadminid=data(0,0)1 B8 i. r' n  s3 P: }7 m- G) n; Q
' s4 B, }% R8 w( w/ ^& G
adminname=data(1,0)
  k) M. W0 g8 ]2 M  j$ t; |* m . ~, a8 {/ L* w" S
admin_page_lever=data(5,0)6 ?! |! M" |) s+ d. }& B$ ]
% [& Y& I* h" f" K& g; H% V
admin_cate_array=data(6,0)
; W9 W/ k0 a' g$ h* y$ @
+ \' W& S* {* L% madmin_cate_lever=data(7,0)
! X0 y. o3 D5 J% Z2 W
6 D* L6 w; b6 N; mif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
) V( C) z3 [+ o/ v3 ~% U4 ?! @ 1 Y& m( j3 r4 h! W' v
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
  q) q" z+ X" f' b, b& k, W) Z2 P
. ]1 R9 y8 ^  v  l; Xif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0) A' w& D' E8 r9 o- Y- J0 _4 o

+ O2 d2 G7 z+ M' D+ y! U3 wif clng(admingroupid)<>0 then6 y  S. \3 G6 c* L. t
# b7 O1 y8 y, E+ @+ @
admin_lever_where=" and menuid in("&admin_page_lever&")"
! W# z+ [, j8 Y# d
7 N( D2 S. R$ mend if
  M, @1 n' S3 R . K" H% x0 z$ g! H6 e5 b* \
sdcms.setsession "adminid",adminid
1 A0 {) k. ]; b3 ~, P% ^3 \
; V( _) R9 w3 G' p# ysdcms.setsession "adminname",adminname
. M/ Z* Y2 V, K5 P   s3 G: d8 j, i# Y
sdcms.setsession "admingroupid",data(4,0)
5 z$ u& B% ?% ~: B; f+ s. ] 0 [# b" y& j- V$ P, i
end if
8 _3 |7 i" y- L' q: s  ^# d/ e( ~ ; ]8 |" y5 _9 F
end if
1 ]" U# v+ p8 @  w: |+ p1 o" G . i5 Q/ E2 V: r- b+ K
end if
" g. n2 T2 Y  I # z5 s. e& G: s4 P
else0 q" Q5 D7 h& @
4 _1 P) t( [, ?& C
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&"",""). S/ F: H- R8 D! |
7 @' }. `6 U. o: h4 r4 T
if ubound(data)<0 then
8 Q) H4 S% ~+ t( f" G: i
" y9 N8 f/ {6 A$ h% {8 e" E; @sdcms.go "login.asp?act=out"' z% j4 o! H8 I, X; ?& i
, `5 u" n, g1 n% ?/ O- z! _
exit sub
) I, I0 q) R6 |, e6 U
& d! s1 A1 \+ R; ?% o, R. delse1 ~6 v9 e* S8 h( n9 b1 U5 y

; O, d9 W" Z8 A* p  \admin_page_lever=data(0,0)
8 ^& d. e& S: `' ~ 9 K/ V8 U# E) g7 E6 B" V
admin_cate_array=data(1,0)
2 _6 A  s& b/ \# o ( J- o) q3 N1 g- `; N- B* M
admin_cate_lever=data(2,0); i" W+ |0 W- `  k# t( l' {

! j; n: L: O3 R% Wif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0" k- z: L! B# D2 ^; j
+ V& y; U# v  }  G' r6 z( P: w5 w
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
$ d8 o; K- x9 e3 M- }+ t* e ! I$ Q6 N4 p# d1 V
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0* C+ l. p' g" L5 d4 ~) A9 I

! w' e& t" `  c8 k  y1 B! xif clng(admingroupid)<>0 then( s3 _& W$ B% |* @4 k# Z8 R; Q

. ]! O  Q6 r0 j$ o& Z3 madmin_lever_where=" and menuid in("&admin_page_lever&")"' M& i: [" b$ Y+ f

4 Z5 D# P7 t: X" t8 ]+ F$ d# Y  o# n4 {$ iend if7 T) b: D$ J" K4 N- V

* u+ y! T- t1 X7 e) f, Qend if8 L& D" q' h* l! B

. w4 m0 ?5 X" o  a3 V( b4 C! nend if
, x1 L  f8 L( `; n # [" M6 ?# Q; j+ D% ?. F5 ~1 P0 I
end sub$ ^& k0 {0 s- P9 N# g
漏洞证明:/ U6 R5 S8 {  ?# e& l1 o
看看操作COOKIE的函数
4 ~1 ?; t# F" W8 [) N ! }( W' z) G- I" ^
public function loadcookie(t0)
/ H7 A6 O7 P1 Z. r, ]) j
' ^0 M9 g3 ~) m- ~6 Yloadcookie=request.cookies(prefix&t0)/ b; Q" F( J4 P6 Q. {! a

/ k; w; D# \3 Oend function
* w" k7 q4 |5 `
( S7 c2 H' ]' B/ {% L: q( t5 {" ]7 }public sub setcookie(byval t0,byval t1)
9 B; ?7 D# w3 C$ Q: f( v% P/ o6 e
* r6 \/ U" ?7 ^3 g; V" Z$ }response.cookies(prefix&t0)=t1. C- \8 z& |5 q- U
3 v# F: b6 p; \" L
end sub' `# b+ A0 o! K) e* |
2 ?. ]7 |3 g1 a
prefix- A- {, ]5 y: z! P$ }8 T8 {; M
+ ^2 y" ]1 L" p6 z0 f0 a% Q
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值" G+ }: J7 L- o$ @8 \( n7 G8 U
" O; T( b1 J3 j6 ?1 e- t
dim prefix
8 K7 _; v, v: o * m, ]/ k+ N8 n# |, ]8 z
prefix="1Jb8Ob"4 i( u" c: U( _  l/ U) L4 _

/ T" Z/ R" E# p* _'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 7 Y3 E- ~( w8 N( r* y) L2 ]* c/ a' X" Y
# D; g' ?5 d* P- I3 \4 I
sub out
% q7 B; w, ^2 ~0 B, I9 \1 z, p
- p! q3 \  e8 j% k8 z& Bsdcms.setsession "adminid",""+ K- U* A7 W9 H$ B4 R8 h1 R
* r( z# Z9 u$ p# f! H' u* c6 {+ G/ \
sdcms.setsession "adminname",""0 d: y# J! P: L0 A) M3 |
  E6 L4 L1 m8 X% `0 E' P
sdcms.setsession "admingroupid",""
; N5 S' t! l! K. R) H( W8 d 2 {2 |8 M  B1 W$ E& B
sdcms.setcookie "adminid",""0 D  @% }# V# l
1 V' x; ^, l/ l& d
sdcms.setcookie "loginkey",""
" ]5 I! Z9 z: ]  Z. ^0 M # p- M/ d# v. k* V
sdcms.setcookie "islogin",""
. b3 C$ }' T4 Y0 E7 l8 U
* ~# j' a9 `$ h) u) _7 p8 isdcms.go "login.asp"
$ h8 _# ~6 M) }8 t/ G
- y* u$ `: o, wend sub5 M0 |* c" k% ~( c1 W
$ z2 |- u6 C3 g: M$ g0 N) s. P

4 k. n  b( F0 ?3 C# Z# E4 R利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
1 b4 K$ s+ ], H5 i* x) v+ D3 h# ?修复方案:! R5 ?, B: ]+ a& l
修改函数!
/ K  ]2 p% q" F  Z6 U
回复

使用道具 举报

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

本版积分规则

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