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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:2 v; e! s  f2 ?# d' n' t# B
" k* X. ~! y" O7 p# q
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试2 e& m5 c# c, P3 V  |& J# j, g' u
详细说明:
  k& _3 U  n; E; i/ o5 ?( ]Islogin //判断登录的方法; i! M9 Y: x. r+ A
7 R" P/ V' Y  |- h% e
sub islogin()
) {+ `2 \: F0 J  ^5 p' y6 e3 z % l& G$ v  }9 m7 A# y% a* y
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
  N" g5 l5 ?4 M ( |' u& j. R/ q0 C- n$ T6 D
dim t0,t1,t2
) h2 _- h/ v& w
" G. H8 ~& F! F/ L0 n' lt0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie   ^' G3 g' h$ B! G
8 `" W! s1 P) v8 R5 W' W2 N4 ]% p
t1=sdcms.loadcookie("islogin")2 z+ I+ E" ^5 v( ~/ r# u% g
7 k9 K& k, y6 r5 z- B* h, F' i
t2=sdcms.loadcookie("loginkey")- Y4 B+ U( {1 G9 U
4 }4 D% k% J) p
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
8 o5 C! [2 a2 x4 H9 n  _# z( Y- r
( b+ s5 o$ X( ^, U# E5 ^7 J//
9 \' B8 B1 S9 ?' F
. S1 J1 c3 P/ X: H: R+ b9 Vsdcms.go "login.asp?act=out"
" ^8 `5 o' A8 d4 P/ _ ! j3 M+ i6 Z- B  G8 c' i/ {
exit sub2 W* `; ?0 |; j1 N+ m8 H! z! \
7 B1 ?/ j" Z" q, a2 N+ a- P( |) ?
else$ _' K6 r5 @4 V8 t" Q( L6 g

* B3 P3 W2 n9 s! U5 m# h) ndim data: Y! V* A0 Y6 r4 Z! Z0 o5 j: B  O

3 G3 I5 l' U- A  o* wdata=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可控7 {6 c. G) y9 ~( E7 Y
9 D7 r; e, }7 y
if ubound(data)<0 then' I0 C( E: p" N9 K$ {6 {) a

2 ]- H" r; I, L( y( xsdcms.go "login.asp?act=out"" j9 y$ l' d7 d

% K( n; R, ], d3 N3 ]' A0 \exit sub- {' H6 j! k6 J9 L; c3 y
- y9 Y1 j& ~6 p, J
else4 V9 Y8 f% O/ _4 p4 f: L# ~

* }# H  W  \, c: p9 n; }if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then8 [$ Z- k1 T; Q5 z. |6 I' Y

9 U2 c9 o9 D  isdcms.go "login.asp?act=out"- M9 L5 d2 K/ x1 F8 I2 H; j& Z0 V! {

$ b+ a" _% ~8 S, Fexit sub" p8 i- z; s3 s% v( ^5 Y" F. {

0 }" v; k$ r2 ?2 ~) {/ Helse5 u& U  k6 [. B# \

( Y! l. R% T5 a8 f. v3 Gadminid=data(0,0)
( [9 C% A6 q! J* m) Y% `8 F
. M& X5 m1 t! x0 N9 padminname=data(1,0)4 o$ w. g3 Z0 ?% q% M4 x" G
: z3 c% ]8 E; n* V9 r& V$ b
admin_page_lever=data(5,0)
4 E" n. D: P6 s8 x  `  h& s 9 a% ~2 j$ n& T: M
admin_cate_array=data(6,0)
" y& i. I2 z( ]$ @- Z" K 4 i' m! g, M" L- f! @( r* \8 b
admin_cate_lever=data(7,0)
/ d8 z8 I) H; L0 C/ G/ j0 x3 T 4 P6 C3 n( H( ~2 I$ |/ r
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
; h3 f0 p. u& f0 Y# W* W4 z
) ~. F' n, O- F0 Mif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0+ y6 [/ n2 b* a# h: n, g/ M/ p

7 ], P  g6 a3 n! kif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
$ k( o' Q+ S( Q' [! d7 }: Z . |' f% l9 i% O4 F. D5 x/ w! M
if clng(admingroupid)<>0 then
2 M. Z2 w' w6 i- ]/ @
6 ]' C& Y/ Z5 }7 nadmin_lever_where=" and menuid in("&admin_page_lever&")"
+ `8 t0 g, g0 N1 U* Q3 [& @: y% o; r) J
7 Y9 T3 j9 o4 i2 `- r9 mend if4 E( C/ g& E; y: K- _

7 o1 G5 Y8 B# c, i8 `& D! Esdcms.setsession "adminid",adminid
& s8 F$ j& K, A' Z$ H% S 3 Y% J7 Q. Z  y5 C( ?1 X: {( Z
sdcms.setsession "adminname",adminname
2 b  ^. P* ]1 m. n; W0 X4 o& \8 W
$ \5 {2 x4 L6 [) e: v! v  psdcms.setsession "admingroupid",data(4,0)
5 q4 h: \. x* m& D 3 F1 M4 z  r: D4 w
end if
# I' o# m2 o) J
1 f1 B% ~. T" b: u% i+ L& q+ Rend if; g7 }5 i1 J& r) {

0 z( L  s4 W  \# lend if
. |+ t# f: \. O: b" P" T
" I- b5 J; ^7 ?4 _. v& n/ x8 gelse5 ^- M" T. @7 d# l. }
, t7 ~0 {# `+ V. U% m% A. t$ y$ ?
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&"","")7 r- I5 Q/ G1 J# z+ a- Z- s

3 @/ R6 D3 H8 q! w9 mif ubound(data)<0 then1 ~& w4 y3 A1 w5 \, N/ i) d# |

0 T* T8 G/ p& r# Y- z8 Usdcms.go "login.asp?act=out"* ]0 M  N# ^" a9 z, g5 N
. ^. y, `3 s& e1 C/ |- t
exit sub
. @; C, f! ^* S# \6 ^! b; z
8 v  q% B/ ]4 u( ^7 J4 [else
+ x' Q& ]2 q4 ^- S5 t 2 k6 y3 V; g2 T- @. |, ^
admin_page_lever=data(0,0)
6 r9 @+ N( o$ g3 G. }* H . s, q+ `2 n2 u; [* B. @
admin_cate_array=data(1,0)- g8 I* {" B8 C) G2 c
1 S2 F9 H: N& M3 r6 I- p( S# P4 j
admin_cate_lever=data(2,0)1 m  I5 V2 {" L2 R3 h
9 v8 I4 D% V  B* B
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0' X( S- |( G  @
) t1 y3 O2 ]; S
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
1 y1 W- @$ e+ _" G
9 u' E9 K5 A% Y( |9 R* mif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=03 v* @9 d5 N& u! }" k
  c; z! r, W8 }, s
if clng(admingroupid)<>0 then
* ^5 \0 F" y) |* A$ a4 U6 v' d3 r7 n * x7 }; B+ I6 B/ ]& V+ M
admin_lever_where=" and menuid in("&admin_page_lever&")") j9 w8 P: `4 \, |- ~

# g! L' w0 C/ Z- Zend if
" c  ?6 F# D2 A" {1 B, D, b- A 3 X% F7 }2 r% K: @- ]
end if
+ |$ B3 m% z% O7 C' t+ x- O4 V+ f
  J9 V! G3 R. H1 Qend if
  e- F* G9 @" y* i% Z/ Z0 [4 v
6 k7 u# i  H4 R0 r1 b- V' ]$ ?end sub& f% n- O" \# n4 o0 @+ l& [0 k& w
漏洞证明:  ~3 i) f( q% _. h/ t: [3 e
看看操作COOKIE的函数
# a" H8 l% p3 M5 {, ?" _
: b% Q& g7 S$ n5 B! Opublic function loadcookie(t0); z! _% x# t3 F3 q. l6 P

: t9 d# n/ F+ W2 p' Q7 tloadcookie=request.cookies(prefix&t0)
1 z/ N9 S: o$ d/ T5 r: h1 E
2 T. n, ^# a( W3 S6 G1 V2 g- wend function0 C/ l, U* B, k9 D7 I/ b

3 F5 }" t1 V9 y* R( ?# o, a* h* O; ypublic sub setcookie(byval t0,byval t1)
+ Z+ T. W4 j- q/ P# ?8 X
1 L( J+ s5 M( y4 bresponse.cookies(prefix&t0)=t1
4 ]: S1 i/ l$ t
& I( L# D0 ?# k; W* J  mend sub
/ s& }3 {& D* U4 u4 h2 z; J- @
  \5 `0 P  q! {: v; C# {prefix  x: C2 C" x4 G

* b" y1 U8 ?" j7 U) ^1 v9 T) J'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值& G, X( M$ r$ R. `6 I! w
8 V7 [& x8 K' h- G
dim prefix& k1 Z, {# a. J* D2 i, [
2 R% G/ H. B: X. @, ^4 ]. _( F
prefix="1Jb8Ob"
- s! j* q2 s. }5 L
9 ]: K0 {- D8 {/ y, P'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 ; C9 C1 m: L" j3 }: c9 x+ v0 [
8 ?  s3 y/ Z4 C
sub out
1 _# ~) ^+ C! }# v- e* o0 P7 u- E
9 _+ A  ~/ [5 bsdcms.setsession "adminid",""
# o9 Z- c) f0 V7 z3 s# U5 O8 b * B# x! L9 ?6 b: V" x3 \3 o8 A
sdcms.setsession "adminname",""3 O1 U( w9 q) E- ?! R5 j: C( C

- M# T  A! |" n- nsdcms.setsession "admingroupid",""6 _+ b! ]6 A/ O0 ?4 `$ a
3 V" b+ }7 l, P
sdcms.setcookie "adminid",""7 n  R/ z" @5 l  s

9 n4 a# p1 {: ~7 vsdcms.setcookie "loginkey",""1 a1 E( D, c6 ^1 c
4 G! J9 l- K" ^' v0 U
sdcms.setcookie "islogin",""" C3 j! }( L( u
5 R5 X& j% C6 x' v! q! m5 b
sdcms.go "login.asp": J4 c8 f6 P# @- C1 g# v+ p
# k! T# T: i# I5 B
end sub
+ f( s% E  `; t9 p( B8 B/ m ! M6 [' P6 g1 L& h! _, |7 Y; X

' d  }1 y+ X% G2 u& j利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
; S: I, X5 j8 p  W+ B& F修复方案:
3 j( D' v, `& h) _/ f6 m修改函数!
) G3 |1 }/ l3 s% i" V2 \
回复

使用道具 举报

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

本版积分规则

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