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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:
% }. X  k: C. H$ {% G
9 S0 `) b6 u( x2 Z! y2 P. {SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试, Q/ a$ f) Z8 o9 j( m  _
详细说明:
' I" A8 q# g% H8 k6 ?Islogin //判断登录的方法3 w' ]- g" ^! f3 c1 N7 z. {) Q' w) o7 E- m  X

+ d! t" a0 M& h7 H+ D/ Lsub islogin()
! p4 p9 P; e- [$ M' v: K7 J9 z6 z3 K ) u5 L8 B" L# w2 H, T- Z
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then % o- P1 A: ?; s1 H+ X/ x9 ]% d

8 o! d" d, f5 \/ G5 b5 \dim t0,t1,t2
% H1 ]. j0 {0 [# q  f) w5 ^ ' G; [5 T: Z9 w# n# k, q3 @6 l
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
' R1 e/ ]) _1 _, k' t   E" \2 S2 g3 @6 z1 V3 y8 _
t1=sdcms.loadcookie("islogin")4 V! M. l$ r6 H: F7 R4 x+ ~  Y: J
) G# u3 P; b  J* p9 V
t2=sdcms.loadcookie("loginkey")
, g( V4 b* r, d: G, }7 P
' O( s; K2 j8 ^. @; f  jif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
- M3 M& k, [. G 7 b8 ?/ q- @* E
//
* x% q6 t0 W1 U% P* u9 [$ Q
% \# W# y: X* hsdcms.go "login.asp?act=out": i% g  E7 ]7 o

4 r: }9 y. w, y) O' U1 }exit sub
# |- ^7 Q7 Y. ?6 G4 Z8 g 5 |! ^+ R1 I8 m5 x0 k: \3 l
else
' f  P  p" q* |8 u+ C3 L $ P( v1 |# \. G( a* v: l
dim data8 d# P- _$ n8 G; w' D5 u/ A
: h: I7 `6 R! f0 A
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可控) [  x- G6 R, C  X3 C# b3 }/ C% {

$ Y  m& o0 \$ e  lif ubound(data)<0 then( ~9 u2 i6 P. d& L! ]0 A& t7 ?8 q  z2 |6 o
$ d9 E( G* s! s% `5 r+ ]
sdcms.go "login.asp?act=out"
* n5 Q* W( @) P6 g9 ~  `7 P; U , X/ W4 e- k$ Q; H
exit sub
& b& `: L) [7 I2 _ ( ]9 O. V" x5 b
else
& O( E. r0 m7 h9 E) W1 V - I6 h1 K# |2 D: x  ~
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
. }' Y, h1 ]+ v5 @  q: a - b  T$ O* F& I9 O" g
sdcms.go "login.asp?act=out"
8 ^- G5 K9 F6 O: S6 k2 y 8 `: m; O/ z1 i, H
exit sub
" k, M" P. I  X4 Y / N3 ?8 p) j8 U) {5 L
else1 H- _5 E% }- T2 t1 S! M, U
1 W4 ~& R/ k, ?( A/ t4 W/ w
adminid=data(0,0)
2 z0 Z6 K& C: b) X& x2 S; ]
* k1 e9 S. d3 ^" Jadminname=data(1,0)% H5 L) ^5 N8 o, c. g2 @! A
6 G( [' z* A- i$ [# z9 u* n) p
admin_page_lever=data(5,0)
$ P( E$ D  F+ |* M0 J1 Q0 F / {, [* r0 L# x) H3 ?& a
admin_cate_array=data(6,0), `+ ?! F- Y8 T" ~5 G5 u
( C# B0 a" M, U  V! n4 O
admin_cate_lever=data(7,0)8 X) i; {& A( b
0 C! I0 O% w! d8 X+ w
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0* J' u, Z3 p6 r6 S& \9 i; N% G

) B1 @! {7 g' Z" U+ u  _$ _if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
& c0 P4 o# f- k3 U' Q$ r5 o
' j+ k! O, W" ]$ }1 J% Wif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
# l! ]% k' I5 A3 N
' z* t4 K& L3 \; u* k+ mif clng(admingroupid)<>0 then
& Y6 F% R2 T( h$ B  Z6 W+ x % \6 a0 M; z4 N+ S4 o
admin_lever_where=" and menuid in("&admin_page_lever&")"9 l) s+ o3 D- F6 P# w; C) m" c9 u

9 a+ T8 r- k) e3 L/ ]( ^6 ~3 qend if
" d! J) y7 P6 m4 @5 B4 n3 v1 y 8 h" N( g/ D' j2 t+ o
sdcms.setsession "adminid",adminid
, N1 @4 k' a3 r7 w  w
( l" m6 _3 R( W( J6 e  B7 jsdcms.setsession "adminname",adminname- M: m- [( u  Y, s! r# M, n6 g* Q
/ l7 _$ I* m4 x
sdcms.setsession "admingroupid",data(4,0)4 |8 a1 D( Y* J2 v- G+ _$ G* ]

5 F. e/ l! E% r3 l0 s" Uend if! |4 w) Q! N4 b7 l. t% m; O
& ~. D* @+ O0 T6 h: Q
end if/ U1 J) K/ ?* s7 q# E5 y+ [: ^( x- M7 n. Q
% A8 v2 E; ^- E4 Y  W
end if+ c" s6 S+ S% L) @5 \

7 K6 Y9 C- c6 a/ m: s# c( W: F0 pelse& P/ V1 b3 B1 R9 O" b) h* V! _; S

; D& `5 k  n9 n  n0 J  jdata=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&"","")
/ t' A" K9 b$ B' D7 C. \- O7 i
$ C  X3 Q! M- B6 h# m- n0 kif ubound(data)<0 then
& H6 z& X' a+ E$ c . T7 t( @. W2 C8 g% E2 H8 R8 l0 v
sdcms.go "login.asp?act=out"' f3 f. z6 p7 d# H' ]

4 T1 l1 X$ m' {+ w$ Wexit sub2 R% r/ O: F. D/ W0 E3 [8 p7 [
5 ~' k6 f4 G, S/ Z% h
else
7 ?5 B1 o' c% }+ ~. X
: Y; Y+ n6 q/ m1 T6 x$ w1 eadmin_page_lever=data(0,0)6 X) Q* B* _7 w" s, V7 e: L! Y
4 C3 a' W+ \) t- b
admin_cate_array=data(1,0)
7 Q" M5 q: }+ C# L8 c! O$ c- `
+ V0 }7 l9 U# q) @) ]admin_cate_lever=data(2,0): r1 a( U7 P1 _* a3 z

; @" C, O2 D$ _4 Lif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0; J* a8 \7 @+ b" z; I3 g" k
3 q6 \9 d" s5 v/ p9 o7 W
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0) f, O3 C0 p1 z" D+ R7 z

. ~) d9 u$ f. [* F3 ~' }5 R0 |if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
# S7 z8 x2 U0 W1 j4 U  F
9 b* H- z) o& G7 @9 R+ H3 eif clng(admingroupid)<>0 then4 F# o- ~+ C8 @/ a- j( a
. G* f' W% h% _8 K# g. _
admin_lever_where=" and menuid in("&admin_page_lever&")"
- G+ F9 @3 d* C2 x$ O ( k5 g) A, K; r
end if
, l9 ]4 l2 K3 G4 H, D- `, [ % k( [8 r$ B0 _9 G
end if" W# J3 M1 d7 n8 T

1 o$ r$ P: M! Y5 T+ u/ wend if& [4 q3 z6 I! `( W, u" D

! {5 ^& n7 c- q: ~" D" Uend sub
( ]+ f6 y0 _  }+ M% e. p! y漏洞证明:
  t0 E! H! `/ v  x' J3 a看看操作COOKIE的函数
7 }3 Y9 V+ S+ ^2 G# ]9 t 2 U0 Q9 G; ]1 ?0 L* V3 H
public function loadcookie(t0)% }5 |- t8 S$ \2 O3 P- Y. M
0 x( ?( b: y' R, Q; H* I. r
loadcookie=request.cookies(prefix&t0)
/ B* O. d. t3 t) h) S
+ Z5 d4 D" n, U# fend function
6 H+ |0 ^7 M# }1 S & F$ Q/ B5 E4 @7 D& C  [; [
public sub setcookie(byval t0,byval t1)
0 o  j. V+ y" Q " P- m( e2 Q$ K$ M" Y$ r4 u  R. n
response.cookies(prefix&t0)=t1# n/ E5 Y8 F2 V1 l; G  L8 N( y

9 |0 m' ^. {: O, F/ Hend sub! p: I0 P8 r1 }1 w
) a7 a( S9 ]; }( ~/ Z; F9 I
prefix  [" {% j, K' |6 ~' Q/ J% Z

- k$ p) D4 X! I0 s7 S$ m3 P( h% W'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
. K5 F1 |* T8 w, @ : `1 `1 W; ?5 U% G8 [
dim prefix* o. o1 }8 c. e( ^! E
/ o0 V7 a! I% w4 J! [( V* Q
prefix="1Jb8Ob"% p# W) P0 q9 m( [3 i
. m: B+ Q; K. B5 Y* G
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 ' `0 R3 h. h# o# H

/ L# v- A& n' O$ g) c+ `' osub out
( D) d: G3 B1 B4 o! a- f8 H$ b / b% U9 `; r4 S1 N  @1 E; Q$ r
sdcms.setsession "adminid",""! X- A7 Y! ^+ R" \3 b
. f+ S; n* k& h- B: e
sdcms.setsession "adminname",""
0 s5 @& `( v0 _6 E $ h. a/ r# f( }- w, [
sdcms.setsession "admingroupid",""
/ ?6 K' I, w) g7 g# ^
& f2 S3 u7 B) I" n2 r4 f2 B' esdcms.setcookie "adminid",""
% t. b% g- m% A" c  T% N
" L/ k  E$ s. B  Dsdcms.setcookie "loginkey",""
. A9 d& N/ a/ L# \0 [: G
9 o8 [) v% V/ e' dsdcms.setcookie "islogin",""
0 g0 j- n7 A. e6 n1 \ . P: u& |2 x( u4 F1 e/ w! }
sdcms.go "login.asp"
3 o" k! L* s" h
7 k7 {/ `' O3 [" X% Yend sub: t9 @  j* n3 P5 h

$ _& B9 p* e; C7 K 8 Q* X4 \6 P# z9 }! \" \
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
9 W- `" ~2 d2 s7 C修复方案:
9 m( a8 k( _" e修改函数!* b5 h2 W( j; Q+ f1 W' {; \1 P+ L7 c
回复

使用道具 举报

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

本版积分规则

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