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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
要描述:
8 Z6 L% G* I5 y! r3 g  U
9 @  G+ i* r# b& W- p) P+ YSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
% s  W! P. H6 z8 j详细说明:. E% X. l5 z' ?' {- c0 m* z2 u
Islogin //判断登录的方法
" e  ]8 r+ K6 t$ P # l$ R0 j- s4 M' u) A5 F6 ]; T
sub islogin()
9 k; L3 s2 L# M5 b: K8 U" ~ , q* Q! Y+ }' ]% _( ?
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
1 o$ P- \+ {. C* }- f6 T/ y + l6 |; B  D) u/ R+ E
dim t0,t1,t2
- ^6 }7 \1 t7 x, S
8 R& A$ y% p- v6 yt0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie , q& e- h2 y6 M* T7 v/ I

( u+ Y  }: k0 \- z5 G4 gt1=sdcms.loadcookie("islogin")
, p/ B; B( y6 l/ h$ u# ]$ A/ S9 f3 [ . h: M- \! C' N
t2=sdcms.loadcookie("loginkey")
; [/ U. P) ]% B5 p4 w2 o+ {7 ?8 ? 2 C# t0 |! }2 x# H, p8 Q
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
8 z1 ~' n# X% v' O8 s/ U   U3 J8 Z! J" u! L
//
9 C1 Q3 x7 }6 B
$ G+ N5 p7 V$ Y2 O+ P/ c" Rsdcms.go "login.asp?act=out"
  ?3 d9 B8 s& I6 J/ u/ |. L, d! K% I
# h0 F3 R  T; `6 M8 l9 ^9 c0 [exit sub
- P+ M3 M! r  [ 3 o  c7 R9 P- B3 `8 @4 R+ K7 E) [( a
else  y" g7 V6 k1 }2 q

: E5 j& v5 M4 q. Z, u  Ydim data4 I1 Q  a  O. R/ j& A7 @) T
9 q1 T. a! c1 V  g$ q5 Y- c
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可控
" E  a6 l' A4 r# a, |& d7 ^- U/ t 5 f1 |( ~1 V' V& Z, R" H$ X
if ubound(data)<0 then  X  G$ \! }7 P

4 i# W7 _; `/ Z, }sdcms.go "login.asp?act=out"
  R# d1 A6 w2 o8 x; v9 b
! G$ p$ N: ~0 G; W4 Z/ [% {& q* Texit sub
4 w" {3 K  w# o: T/ ~9 q' H0 M1 P0 H
% X- P: j7 o3 o+ helse) O: ^) R' L" S" O$ `
8 S: u1 f/ D4 o: k
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then: h! V+ d6 d* z' Z

9 Q6 B4 c; m! ssdcms.go "login.asp?act=out"9 Y. |. E0 A6 \4 F2 c
! w9 G* B2 |* U) U1 M9 x, G) \
exit sub( Q5 V: H$ ^; J8 p6 t9 ]1 x
( M3 g9 Q, h/ @" u2 ^' ?
else
5 l) x  [7 j' I0 C/ z; a - H3 Z$ d/ L2 G/ k$ P
adminid=data(0,0)) @- D4 W2 V& f8 f  U$ v$ l

! r4 I* s: K' d8 o, h8 {adminname=data(1,0)
6 M3 B9 k) o/ n# q" c4 O9 X/ ? , `' ~$ c- v# L5 p0 v
admin_page_lever=data(5,0)
' I! B9 Z. t- H. ^; n- M- ]
/ F1 f) r8 W: B: P# a. fadmin_cate_array=data(6,0)7 x, Z' i5 S6 v

/ e. U& |4 ]  T4 a  o, O  {3 Jadmin_cate_lever=data(7,0)7 g" B1 v$ ~/ V8 F" D* e/ L

" p9 |( U2 N4 Lif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=02 T- Q: w' t+ u

2 E  R7 w! `1 ^0 c9 v& o# y) ]if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=04 Z7 {# ~  q' e! K+ i3 J7 M7 G& z

7 r0 Z- Z6 Y* `0 `  uif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0. I4 n* R5 J6 W$ g7 v) c
: k1 w7 I) B! k, }+ w
if clng(admingroupid)<>0 then+ p& g! y  e0 e4 @
% r, m$ E9 V4 c( a3 X% B
admin_lever_where=" and menuid in("&admin_page_lever&")"
4 n' G% M9 B3 A" X& L, w $ P3 v7 |' ^+ f! m7 }& C6 K2 s
end if0 O) R1 \6 u! b
) O  `, i5 I# U' i! H. s: k
sdcms.setsession "adminid",adminid7 |7 C3 M0 h- z3 i, w( J% |$ W

  ?. x1 x$ r7 l0 Nsdcms.setsession "adminname",adminname
$ J! M/ _( U7 N; V 6 e  `  j3 n: ?1 b' U
sdcms.setsession "admingroupid",data(4,0)$ a- N# N% ]) B, s
" y: V( X' q5 e  V) u/ Q, Y; }
end if5 t% _  R* x) S+ z

0 k1 `/ W  w' M% _* k: K: hend if# g2 T! ?% @& X, }
% N$ E4 g* W$ G# w: Z
end if
& e2 u' h9 @+ N  F
" c5 j8 t$ ~; ?" z3 d* x- h6 \$ relse
0 b" e# W( r2 h( |- j  a
6 U# o  V$ p3 Ddata=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&"","")2 J6 M  }: P! e! h& M0 L
: T& n6 T! _! @# {) i
if ubound(data)<0 then
& }  _, ~( U; }- u$ U* t/ o0 M
! ^; g/ j$ `0 n, _& Ysdcms.go "login.asp?act=out") f& I' x0 e* l9 S$ F; L& [

3 z7 G) p* I3 D/ V+ o$ vexit sub
/ G% y4 Q; t$ q: t' K
, i7 h/ W) i0 f- u9 p- g' y/ Celse
8 W7 M1 F" `2 w. Q; | 7 ?6 D2 p/ h/ |5 q# V
admin_page_lever=data(0,0)) ~9 Y0 L+ S+ P5 ]0 v
' \. F7 _+ S+ G  k" `( U( H0 U
admin_cate_array=data(1,0)
! p5 U2 d# {/ g; I) a$ p, ]
: q  [- z$ V2 s, I) l2 Q& xadmin_cate_lever=data(2,0): R5 r. }9 u! j
* P" v+ n' U' [" `
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
7 V5 n+ x' S; K- g  z. G% \$ ~, L: Q 7 T& q+ d. y4 G" }  \0 K. i/ H
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
1 R7 o# [' J5 i% i- R1 q
2 `( a, B) Z3 P0 V2 x5 sif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
% g, |# `9 q' z) }* y! I & D& g6 ?8 ?& _
if clng(admingroupid)<>0 then
8 v% ]0 Q4 N  {! N3 x" W1 T* g# O
2 X/ g+ E/ h* Q  ~admin_lever_where=" and menuid in("&admin_page_lever&")"
% X" B" F% q" c  O0 `
5 r" u/ c+ Q3 e( Eend if4 b, T3 W, }1 Q% x# e  n8 b
9 O$ u  ^5 M9 k' M/ |7 q
end if
6 v' K0 X7 V+ \, m, y- J! ?: t & A( ^) E9 V! Y
end if7 @/ o5 W% U! g" v  N* O: Q) }

  S; `3 Z) {* t$ V2 I& F  yend sub3 r9 _& M4 k. `8 D! }- {
漏洞证明:
4 S, I  V% j3 f6 `1 y看看操作COOKIE的函数
8 C: [. m0 q; R/ `" o0 W1 w7 d # L$ p6 F3 p5 W8 {
public function loadcookie(t0)
+ O; V: h" Y5 h# g8 `
1 E; P! z/ T: ?+ O) Lloadcookie=request.cookies(prefix&t0)
" z: k) p3 ^3 h9 p5 L
3 L* m( _. o$ B3 }end function' F. V$ i* L) C5 n& h+ x0 }
9 k# D- ]( W6 }9 t5 j
public sub setcookie(byval t0,byval t1)/ W8 H: U; l6 a. Y: A
8 y6 E$ P0 J6 X
response.cookies(prefix&t0)=t1
3 J  q5 |; @: I7 l; W# Q4 C: _ - j7 a+ Y" L- d2 D
end sub" v/ b( e, O- y! {
. R1 w5 x) w' g) O
prefix: E8 H8 W- u! ?2 S$ ]( l' z

" b2 T2 E4 o3 y7 D! j/ r& }'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值9 H3 O1 l9 G! j  n# D
& e; n  O- y* a( F# @0 H
dim prefix
2 ]! U! L6 ^3 W  B6 L* T# _) t) P
2 u! v0 V6 q% ]; k5 a. y' }prefix="1Jb8Ob"
# B' u, N2 j! T" M6 K: a) P
; ~- ]) V3 ]& d/ \0 D6 V1 m'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 & F3 ]5 o/ x1 p/ [, P
9 d6 [& w+ \; a* p
sub out
$ v" Z9 r5 d, B
" c+ l6 d! b3 L+ tsdcms.setsession "adminid",""
. s( @5 D1 n! L5 L! L* U/ J1 r
) M; E  [- E- qsdcms.setsession "adminname",""
$ A' M! q0 Y, B; H) {/ |7 t " x- t; D  }: I6 J8 M6 w& T" u7 ?4 E" Q
sdcms.setsession "admingroupid",""
2 q; w3 v5 ~! W, y# [! ?
3 q3 o% f( k9 @- Csdcms.setcookie "adminid",""
2 g  c( v5 E* L+ |* Y$ c9 Z
, l+ C  B3 j0 x0 P: K' Osdcms.setcookie "loginkey",""
' F- b; @4 h8 _ 8 A; F! d; b4 r+ Z. b- f5 @
sdcms.setcookie "islogin",""
: [3 c* q) z% G& Z / x0 Y' `' C% [+ f( X0 E0 f( U: ^
sdcms.go "login.asp": n* q0 [3 l! I5 ~8 A  a3 n
, R: Q  U  U6 t2 C( j/ D! h
end sub# c+ h+ Q3 U+ y0 ~* d  A9 ~; ?6 T) [( u

+ z( `; ~2 w  q) _0 B$ q ; S. w9 s# W& C- o1 L2 I" W6 X0 d
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
6 \3 o" ]2 d# l$ X修复方案:# I: m; e( H7 A# \2 B7 L3 l) [) O
修改函数!+ y7 y& `* z7 l- p2 i
回复

使用道具 举报

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

本版积分规则

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