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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:
& b4 Y7 X5 v( c; i1 c5 O) c8 |+ m
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试0 _: M9 x7 v3 x  P- u9 L* Y
详细说明:
: [+ r: I) @) oIslogin //判断登录的方法
2 `$ L3 u8 i" \. U
, Q3 _) q% ~+ f- ?# Hsub islogin()
; |4 g( [2 |% @; R- K* U
6 T( E" a5 F) Wif sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
5 w) t& X/ h7 B- i2 _+ a3 N
& T2 F- Q$ p4 l" F$ w' Xdim t0,t1,t2 6 _6 y3 h0 m( ]$ X% }2 ?0 W/ x. ]
' f8 J) f8 N* [" _# l. N* D( c
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
) x8 A- {# s9 t: P) X/ P. S5 M
8 _$ g5 d; C7 T: qt1=sdcms.loadcookie("islogin")
' R8 k/ O, Y; k& A
. E" @( ]; B/ v0 g; `( ~0 |t2=sdcms.loadcookie("loginkey")3 {& A4 ^" O4 G4 j. C" a

: F" l# D* w, L3 A1 vif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
" n& m$ [) j; D; w& k+ a / y& I# |  ]2 J; X- w
//5 N% U, {6 w, Y. {3 z

' `9 L" [5 Y3 x' \5 A5 e. U& k% }sdcms.go "login.asp?act=out"( D$ o& r/ |$ C" @# |
6 ]' ~1 T- M7 L, |" Y% a8 b
exit sub4 N  g: X' o; \; b% O& l
! t/ y5 S5 G1 G6 ]! M4 i9 Q- U
else: \0 Y! I; i! @1 C- E

2 k/ V3 b+ F  B2 _dim data
, Z, J0 P$ ?: A' ]" q
$ r, R" G1 K4 h  p) Rdata=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可控; T6 H  x: z) a" @- F* ]
+ H8 G4 D6 k. @! V3 p- {' L
if ubound(data)<0 then% u1 p0 O: d/ p( I. L

+ h4 }; w3 q, X. n9 i, @4 i' Nsdcms.go "login.asp?act=out"
! i# O4 Y8 M- N* K 5 [3 o2 d# d+ g6 t) Z1 u6 E( \
exit sub
3 _; E0 b* N  b, D0 q4 A , C! u3 J  l: ]
else8 w( N# e4 ?! V. Y5 Y0 t

! Q2 y7 A3 T4 g; O9 e  jif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
9 D" b- {2 K& O4 [
4 J: E3 E9 j; P6 s( z' m1 Asdcms.go "login.asp?act=out"
8 H& m1 Y; C# {3 v : }, T, J  q! a, V. S
exit sub4 {* b# j* G' _$ v- Z$ z* M' K

; ~) u$ \0 ]/ P1 o/ j# x/ g) ?else
6 D6 I7 ~# U2 K3 e
' L2 R; w) \  W4 Z. H' [adminid=data(0,0)# H4 w, `  J) e9 d& p

5 w9 o- @$ A# W2 F: e, M+ G: ^1 Madminname=data(1,0)
7 C+ p6 b/ }: ~- A$ G
" C3 }+ s4 b7 B; y6 _admin_page_lever=data(5,0)
( h& e7 ^# ~( ?2 U
$ ^/ G) N4 K. `+ X+ ]admin_cate_array=data(6,0)
/ f; i" ^, Y1 y3 r2 D ! s. G3 Y& k, o3 ]
admin_cate_lever=data(7,0)
$ m, s5 B" C" l3 P4 J
* Y* ~4 J0 N- N; g8 Uif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0# g5 l3 w6 Q5 L7 x1 C( A: L
; o* b7 C9 E$ T5 V6 J, n! b) M2 X
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0# N/ N* B5 L4 U( }9 d
6 k- A" e' Q0 @: {3 E% h: F* E
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0) p+ T5 \$ Z+ S( a2 h+ ^
. x: ]3 m" Q* l! p9 F- @- @
if clng(admingroupid)<>0 then; J( t, Z! i0 D: u6 F( `9 w8 e
! O& K0 P- u( ]
admin_lever_where=" and menuid in("&admin_page_lever&")"& s. x$ y* O5 G5 k. @2 @

5 r- F: i" C/ tend if
& J  H7 _8 n2 R, R* g- L4 G4 S$ [% l- C " A9 P5 O& i+ X
sdcms.setsession "adminid",adminid" l7 X; P1 e" u& d
# d4 z5 F& g0 |
sdcms.setsession "adminname",adminname: E/ K4 M. u5 W! c$ B
+ S* U% w6 Q. G8 D) S
sdcms.setsession "admingroupid",data(4,0)
% O! `: ?9 Y( ]7 D5 i- p
" J; Q# k  L( ^3 V: k; eend if
1 I+ K: ]) k" _& u, O 2 Z" F. k5 y& S' n7 H6 `0 e
end if
: g3 `2 l" P, Q5 Y9 Y7 l0 c2 I# o 3 l4 E3 v5 q3 x# L* o6 M. s, {0 `
end if3 t( P- v: M6 v- ^4 f, i- a' j
4 ]0 r) x% u: f: I
else8 O3 i: T% q! Z" B8 R: H
( r4 y/ m9 n  d) D
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&"","")
4 B, j' R* W! D4 C$ }9 d, z" X! @
6 U3 {* z( |  T8 Kif ubound(data)<0 then0 r5 a6 Y& C% u7 I4 I# U2 t

9 P5 \1 j% U+ M) ~& N* p4 Ysdcms.go "login.asp?act=out"& D6 C, C; d! O  ^/ v

; O2 j9 s6 r4 `3 E* H2 _8 d7 zexit sub
4 n/ W9 }6 P# N9 |. `9 O
  v6 j  J7 O+ Zelse
& P' n+ u  {+ U! a) R! p6 [
* j9 W3 w" D- Y; Nadmin_page_lever=data(0,0)
7 e: y9 S# o( T* K! @! x
5 `: g) h$ h' N/ fadmin_cate_array=data(1,0)% B- ^7 P! {; R8 ^* x7 }

8 D6 Q' p+ f5 D# K- wadmin_cate_lever=data(2,0)% {: e7 h7 A; u+ A
$ e: B( I7 W: }7 ~* J) x. K8 D7 p
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0# c: H6 S1 b) Y1 B5 b5 s  v

& K& W: S! d- ~if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=07 s/ A, j' ~0 v6 G
2 g3 F7 @9 K0 P; [' \1 D
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
  }6 Z0 a! R+ H2 H : Z; A7 `( _/ x" J# D. R- |; D
if clng(admingroupid)<>0 then
3 S8 V* P9 W* O
4 k) v7 u9 K5 B% D7 eadmin_lever_where=" and menuid in("&admin_page_lever&")"  m: i- A# `$ l5 C
5 P& k5 e  Z* O- q  {* Y
end if
8 Q# W, [9 O, h- c; L - v; ?, e/ F4 W/ S+ W
end if
- G! `# r. ~( P) o' @, G7 ]* c $ }$ W8 P8 M! e5 a5 }* J( c
end if
" U% ^, n, }7 c# x! l. H" d! I- S , Z* R3 a. w& g8 @
end sub
) M4 a  n) o3 a# y0 s( U漏洞证明:
' l3 ~6 F3 j1 u5 l5 b: Y看看操作COOKIE的函数
  }0 Q  W2 e  y: v
8 \3 Z/ v4 n1 y+ i9 s& ^public function loadcookie(t0). k' ~( C; T1 J- v4 O) c" y
+ Z! ?) P4 b6 g& d0 S. a
loadcookie=request.cookies(prefix&t0)
" V: [6 p2 s; B8 B % v* P9 A) O  h6 b1 i# }' B6 Z
end function5 l/ c3 z5 m7 C; W! S

) x' {: ]4 E0 m/ _' Rpublic sub setcookie(byval t0,byval t1)
" _/ `. f( j4 [+ p3 w
% t  @( a' y' D- Y0 m) M0 e- N/ xresponse.cookies(prefix&t0)=t19 U) T' h3 W+ Z; q1 R

6 ~5 d( w( h6 J* \( [end sub+ W, D  \, H, I
7 p2 M& j$ x8 L9 s: d! c
prefix
3 K& u; t7 |; K6 U0 L3 Y. O7 `   q7 q6 J+ ~$ G6 m9 j/ b5 t
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
& Z, R! y& j0 T. x3 ]) {6 ?
/ S9 l* S* {& l) h7 ^9 ?dim prefix/ A" }/ @! R$ I# R' X
/ k8 f$ s5 J; V% C7 E
prefix="1Jb8Ob"6 c  I- N) p& X' W, J
! N# i4 I, g* k
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 " D) C6 x6 I& W5 A4 I" \
: p! Y3 j  ~2 L3 u- L' w, B
sub out# U. B! @# f0 @6 m( j

1 p  Y" h( b" Z9 osdcms.setsession "adminid",""6 F% y$ a% t; x. x- P' B: ]
; ?- [$ E1 o' Z, z9 [; a
sdcms.setsession "adminname",""
5 s) j2 k3 m+ {9 P. P: L- L. Q& a( Y
6 \/ x( ~* v+ ?sdcms.setsession "admingroupid",""7 ^  S5 i5 E  t2 B! Y8 G0 Y
: F6 \( t% \1 z% L  V5 H
sdcms.setcookie "adminid",""# |/ a% I: S* C( P

7 n- r- }  F1 xsdcms.setcookie "loginkey",""
5 f% I4 \1 ~" {# N# t8 R. A # @7 Y  ], A: N& m/ \
sdcms.setcookie "islogin",""4 O; E* }* i$ q: x( a
$ E# L# |  F+ t5 o% O# D
sdcms.go "login.asp"3 b) ~0 e3 h& j) s' ?% j; a
, d1 V$ q' L3 j8 Y( q
end sub: V0 n# Z4 K9 {/ Z& h! s
+ F7 Z* ^* H. n5 @- F- k/ t4 @& O9 o7 g8 Z

2 G( M9 [8 A3 S7 f& f" o6 r利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!- c  [/ ?0 ?$ z/ \
修复方案:) V) A0 @/ n: i/ m" n) I2 y0 i9 H
修改函数!4 y  E/ S8 d4 G2 g, ?8 C
回复

使用道具 举报

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

本版积分规则

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