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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
要描述:7 T9 M1 z; [/ D  s' ~
& g4 F) _% X1 n& q% D
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
$ D% O& b- r/ y6 ~, c& d- n* L1 m; K详细说明:
4 T" V: v% }6 r* H0 y; R7 lIslogin //判断登录的方法
3 M" A% q; x& s* f . L  Y. D/ p& }; |8 l
sub islogin()
: T0 Z0 E  _5 s8 O8 M
/ v8 Q4 A! L( C% y  c/ @2 r3 Lif sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then + w+ [6 D% m* Z" A3 |

5 t9 C5 g8 _$ H( `5 _& r$ \9 xdim t0,t1,t2
1 p# N+ j1 l0 B/ s0 t
9 A4 _! i: r# U, |% y' \% h( Mt0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
/ h$ l& W% b" Q   m% F% \  o0 G1 W1 l5 O% m
t1=sdcms.loadcookie("islogin")  U0 T; s; v& t( g) b. p0 |: y
  z# s" b5 o, Q: e, z+ F9 a
t2=sdcms.loadcookie("loginkey")
" N2 K) e, B1 j- q
% b# a0 `0 Q6 cif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行: B  \/ n* V4 ?% N; J

) h' ^% G0 ]3 v3 ^//
% A9 y  \. L$ k+ h1 Y
' b8 ?( r, k- `+ \; ksdcms.go "login.asp?act=out"1 ~( q/ T  K1 T

- d& K3 E- d) t! B5 wexit sub
8 N5 w9 s7 J* ~, k: y. p- M6 @ ; g8 O$ i8 n, S. @9 }
else+ B! Q. k# n3 e! y( _5 b. w
! J1 \* ?+ C; z) a) p3 \/ v
dim data2 j3 d) Q" S! A- g  d1 m; z, t
8 E5 _, y5 X; m
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可控' ]6 P) T& H" L" O5 H1 i
8 c. S6 b7 u5 N) q2 N5 r
if ubound(data)<0 then  W+ o" T: L1 K7 U* X0 {; [

4 u  m% J# O2 A3 a" d+ b! i( asdcms.go "login.asp?act=out"
! t2 j  Y. k  S- e( ]$ X, l ( g* u$ s6 Y0 g; `5 M1 y' [* `
exit sub$ z  ]2 y) ]9 j3 `9 c
/ w; ~' A0 K! G& w+ F* X
else
5 e3 V( N& q7 |9 ?) |8 W % a3 I  V* o4 a5 @3 ^& a
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then( X( `  p( y9 q& l

3 b# u' A2 i' {# `* H, C6 Ssdcms.go "login.asp?act=out"; g8 Z3 Z1 L% s' ^
$ ~; Q& [4 U$ S
exit sub/ {1 P7 Y6 r% @- m' M6 _$ L" g

  w" |+ O+ K' nelse. T1 c2 _$ y3 a8 v

+ w5 o. Y7 K5 X" G$ A0 J- z+ a0 v) W- ^adminid=data(0,0)
! |: ^$ U! G1 C  W- R0 e. c3 A * ^  u* u6 Q2 [& q& y( s( w
adminname=data(1,0)
" I) \. k5 R4 ^+ h% i# D , y3 X$ A6 u1 ~0 J% U$ H" |
admin_page_lever=data(5,0)
  y/ X9 B$ G. s; H ' h4 T) B; y5 A7 c1 p* P- o
admin_cate_array=data(6,0)7 B' w0 n& O! K7 q) x; j, A# j, f9 q. h
4 q# `' F  q( \6 N
admin_cate_lever=data(7,0)2 e1 E  [2 ~# W; M& E, N; U* n! ~
* A; g% n( i, d$ s
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
' f! R* v4 ]3 \. h7 L/ V& D9 J: [ 7 y7 i# X% q- \
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
' u) O( N$ S8 J; k7 \' v $ I- ~" Q- p  T' m" _# t; Y5 X
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
' R* |/ M8 @2 g! [
5 |. F. ]! I5 x) W, q/ J7 e: Cif clng(admingroupid)<>0 then
& s$ g4 F9 o8 S* p
8 [9 N5 ~  Q' ]3 V8 ~admin_lever_where=" and menuid in("&admin_page_lever&")"+ n) a3 S6 k& o3 j2 U* t! v" e# |& y

$ I$ V: M; s8 R; Dend if
$ z7 k) J4 o- W+ P
+ c" m$ P, ]/ G, j" r6 [4 Msdcms.setsession "adminid",adminid
% y# V( s; M3 r8 w
0 f- x" H/ A# ?" Q. vsdcms.setsession "adminname",adminname3 G6 f+ {+ X. I, Y8 ]. M

% r2 b5 X% p; rsdcms.setsession "admingroupid",data(4,0)8 m! a; Q7 K- f$ ]( W' N& A

# Z& Q4 X4 z+ d. [  Y4 }end if
  w& o' q- \& D" D" H5 c  {- P
" T1 V, }8 o$ `6 qend if
0 _5 c: v: p' y5 e& `0 H2 r0 ^9 f9 d
- ^' [8 N* a4 m$ s. ?: Rend if
0 p- a2 f3 b' a+ T% k  ^ ( V8 ^2 o7 P! ?/ |
else: ]9 Q# p+ o0 H4 m5 Y+ v- Z. `

3 j5 t9 r% x9 T' @* ^  ~+ M+ Vdata=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&"","")' [) U5 x' H9 w7 z; }
" X; ^3 k* g" h. v2 `
if ubound(data)<0 then/ m& V+ ]0 f- [9 I7 d

+ o8 ?  V( L5 _2 a5 ~sdcms.go "login.asp?act=out"
& S7 v: X) G3 c9 n. z, s ' e, j+ q+ O/ {+ p% K  @
exit sub( M% i, k2 p0 f& [" o- K1 ?& u

$ e$ ^" R4 z: E  k9 Eelse
$ E( y+ c! ~0 y( }8 e7 x 4 |4 b! C; p: N: x* L- }
admin_page_lever=data(0,0)
9 y) }. M6 w  V4 x+ z# J# t) L7 M1 D : f: K& D- z! {' E" p; c5 F
admin_cate_array=data(1,0)1 d+ g5 _; ]$ c
, L9 f$ _5 ~" d  `& l0 L
admin_cate_lever=data(2,0)0 G) t, m# }% `+ ?
& e- C; _. b8 U& J
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
* f( l' j% ^8 A. P0 I' e6 q5 u
3 i0 G& I  H7 F* y0 q/ |3 [0 gif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0. Q4 b: C2 P' b

/ s3 ~7 v. {& r) }$ yif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=07 O) d7 L+ ], d; M) m& W8 ]
2 ?) w# i! v! E0 c! D: T. O3 d
if clng(admingroupid)<>0 then
% Q: Q# P; d2 u1 W 7 D5 i- v; ?5 x9 U2 X5 i
admin_lever_where=" and menuid in("&admin_page_lever&")"$ l2 c, M. p8 x

3 m3 l' x4 T; s" T1 F# mend if
% D/ s! \. g! J! H; c
  a2 l0 K% a; O: a+ Wend if7 c: L5 k' a& L- A( ^; I  S
7 F, |- K& l; s0 {# y" x6 I2 D7 _' ]
end if1 m) [# Z' z. |. ?6 q
9 a/ f/ v4 h% }# D# q
end sub
, X" x5 C7 L, A; W1 b* N8 Z漏洞证明:
4 t$ p: \, G: q4 t5 u9 [  ?看看操作COOKIE的函数1 F7 k# v: U7 y) j
* i9 H- ?& W1 p2 E% `# ~
public function loadcookie(t0), t+ [$ W- ^, h+ ], L, `
1 |7 g$ }' ?3 g
loadcookie=request.cookies(prefix&t0)
7 f8 k% E$ A# o2 z8 L/ B* Y% O$ D
# ~3 {& p9 G* ]" k  [end function  g# ?% w: q+ t; `
4 \4 [+ d& V# w, r+ |
public sub setcookie(byval t0,byval t1)  j& U- H  F# h- Z

: K$ e$ T! X! U# T3 m& aresponse.cookies(prefix&t0)=t1
" _! c. X0 l+ y* E% G ; K% N% H$ L8 `: F) P
end sub
) ~+ B" f, ]1 ]' ` " U3 `8 Y+ P$ e& H+ Q
prefix
, |/ [, g9 n& [6 O9 Y1 m : }0 a4 Y) u* n' N; K  L
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
6 d6 Z4 l. i3 J& _. z. q1 x0 G! n ( U6 I7 [4 k* |2 `4 d" O
dim prefix* R; S' a' W9 `0 ~# j; I. ^

* D( n/ {6 {* L9 ~  G+ \prefix="1Jb8Ob"7 p2 ^8 m+ u, B* z" D$ u
; m4 O3 z3 w3 p# C+ U& W
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
5 L; h2 @6 g4 G3 u 6 j: d  q* L- K) w* i$ s
sub out  q  S. p; O( z7 f5 \" r
% D: I% m; C0 S3 @4 j# Y  D* C2 u( z
sdcms.setsession "adminid",""' M# H1 B' B0 {1 }. Z+ c

# M3 ?2 \/ q3 g" \/ n* ]% N) X  l2 Hsdcms.setsession "adminname",""2 `$ a: P& j7 X% Z4 }) x1 S! M7 P
& l- U2 {) p, o: d
sdcms.setsession "admingroupid",""4 L7 p" h2 r! K6 U' I$ s! K

- r' _4 ~* y% T  v) @, R+ d( tsdcms.setcookie "adminid",""
0 i3 j* E  W# {' p. }7 ^" t$ w) N
4 K3 F% l5 L- R0 s! nsdcms.setcookie "loginkey",""
: v  F, B3 I" b. _- b' Z
& h- n- V1 J& M; v$ Z# U  ^' Bsdcms.setcookie "islogin",""7 J2 U% s: T4 ~

) h, J) r' s2 u/ p" P' Wsdcms.go "login.asp"- W; N" ?+ D! c( n$ K
3 l* _9 s& o; D
end sub
; d9 L0 k# Y/ X( D
' }1 V5 X- t2 t6 O" Y' ]" [ + S6 E. E$ O% `. F3 n; X* b
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
. N& @2 |# \: h2 G) O8 j修复方案:
; D7 K) R. O- _& ^, _5 j% l( w/ G# R+ J修改函数!
  v! t+ s$ F$ q! p! g, I& `
回复

使用道具 举报

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

本版积分规则

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