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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:
/ R( @: {) {5 l$ Z/ \8 t- g
4 [' e) S- M9 J2 X+ t4 m1 ISDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
$ ^$ P; ]0 l9 U, P- Y( P! H9 X详细说明:, Y5 D% _7 r  m( |1 w' t+ g8 |
Islogin //判断登录的方法
1 u) z# w. k+ P7 k( d5 q7 n, L
' \0 E# o8 ^8 `  d- }" Dsub islogin()
7 U" p% E  t& r: `   F- h4 r, w) p9 F* I
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
8 M5 C( p& [  r/ k " E8 m- B0 D1 n- C; h
dim t0,t1,t2 7 K) ?5 A( t% R8 a0 e

/ j( s& B) R" F3 \* f% i9 yt0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
5 K+ [& m7 v% v' _1 r5 ]
' r& r( n% M" M$ Et1=sdcms.loadcookie("islogin")
* ?& \9 H2 O. c) Y% F4 X 4 E7 O+ N* q! V& @' G) w3 @0 q
t2=sdcms.loadcookie("loginkey")
% ]6 K! L% ?' x% i: A9 N* q8 |
! M6 T$ ]4 K1 h" n+ T7 Sif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行2 f* C# U7 W$ I

) F/ C1 T# u& G$ B" q//- z  |) p5 [# w
+ s* f  |5 Q& k) [8 P7 J& B
sdcms.go "login.asp?act=out"% z( w& }8 c7 x7 l9 h

) y/ ^* _0 h8 b4 texit sub5 D# q1 `: _$ P  t
# p6 o1 @% X" \& ]( p8 s# C
else/ d' _0 s8 {; m5 O9 r8 z
4 {. J. ]4 \7 K2 u  |$ n
dim data  k8 ?/ i+ {$ l' v6 Y& i- r1 ~! ?
8 F$ S* C7 `3 [& F* z$ ]+ z  x/ W% `
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可控
# `5 X/ _! k& W7 p
4 J/ y% p* g' o6 a. F3 eif ubound(data)<0 then
) i- v8 \- J+ r- e1 D0 S0 ]& ]
3 s! ^' |- z* R# gsdcms.go "login.asp?act=out"' V7 H8 E  `" M$ ^. [/ a; e
. \; }7 p8 z0 O- b3 N, y0 @
exit sub
0 z8 A& y, U- {$ Z9 ?) A# p
& j% \9 }$ F% b# }# melse
. {; c# m: S. a% N
3 P8 l2 A) P' tif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
+ c( a9 ~3 t+ c- F
- s, ~9 K6 v  w! ksdcms.go "login.asp?act=out"7 p- s- W& p0 M
' g: e$ ^2 X: a8 Q; ]& d( B
exit sub
7 O' H) J: F, X5 t0 e
3 U  i5 P$ z6 Y& Aelse
+ f5 q; z+ K! u) Z5 o4 O
; _3 g9 w6 T; d! E! M' Fadminid=data(0,0)* @- C5 _# e6 f/ X

& p3 p* E5 _- r9 s& m, k$ nadminname=data(1,0)
: v# u5 E* \" e. L
" F& o3 N9 }. r! s1 \) yadmin_page_lever=data(5,0)2 n: k; \* W& s+ p1 N1 i
0 i5 ~6 E  M3 ^
admin_cate_array=data(6,0), C/ G2 k8 T- d  b- d
1 R! K" I% v% A7 I9 f! M1 p
admin_cate_lever=data(7,0)
6 J  W6 J! B% v8 L 7 X0 R, d5 q0 @3 [/ V2 [( q2 J
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0% S6 V7 Q& t" l6 x
, ]1 D. z$ N- t! g( o8 w
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
; R; b+ t6 `; @/ g! ~ ! G) W! W. K6 q$ ?0 f  u1 Q. c: X
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
4 y1 l: ~) o, T. \
3 X" ^/ Q1 `; I9 ^' ?+ {if clng(admingroupid)<>0 then
; D! B: F7 S: l9 p
1 B  s5 o3 e) `- O& _admin_lever_where=" and menuid in("&admin_page_lever&")"
+ j: P5 @6 X4 E/ m% N
* ?) q( M5 _% Bend if7 J7 O6 x3 l$ R& h1 ~9 {: K

. S/ E+ n5 d! l$ h8 U# Asdcms.setsession "adminid",adminid/ P$ w7 e" r' |# X

: j! S+ j2 H8 n: w( t+ Ysdcms.setsession "adminname",adminname# l7 H* u5 {% w8 b9 ?; v4 E+ I
' w, ]+ k6 r: t
sdcms.setsession "admingroupid",data(4,0)
2 M) l* A* h* V2 F( D! _) F4 A- C + [, a2 i0 \+ s8 f  m9 C0 g  H9 I8 D
end if
  r0 G6 z1 }9 T& {. c* Y ! q6 p- v5 o* O/ {7 n# h
end if2 f8 M' A: _  s6 y* g7 }! o8 F+ Y
9 n! m& t. R% B# Q# u* T
end if
( ?' e8 |" j. e3 V" G: I4 t
# G2 W; M; j# @  \- M: s6 }. ]# zelse
6 B- _0 P5 e( V / x& v) p, s8 ]. u. W- ~
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&"","")
. B" N& c% n3 V9 Y1 b# B( _# p$ h$ ]
3 g; Z/ q" X. {2 ?4 ]if ubound(data)<0 then' ]2 d# K' Q" P9 x. H! \, g

* `: t, r/ W7 f+ R! ]sdcms.go "login.asp?act=out") P: q  a+ k/ l
- t: [+ U+ e9 m6 K9 w
exit sub
0 c# l7 r# ^' ?2 E8 `7 U) Q2 P 6 F2 S# n; M  I0 r7 H
else
( \7 {; ~' u3 B2 T5 S0 A ( Q  }  X! T4 {' Z6 ]
admin_page_lever=data(0,0); f1 p' m$ M3 y! K8 k
  b0 K8 u* [8 n9 P* \: E* y' H' i
admin_cate_array=data(1,0); L& i! u3 k; u

3 [# Z  Y6 a: i; wadmin_cate_lever=data(2,0)# u5 Y: |5 {: L3 j9 |$ j: X

# x% m& |% f: b1 q, O- zif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=07 v$ r6 i* D1 X, y9 F% r3 ?
" H- t3 d5 }1 m" y9 Q
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
/ W2 t9 G* g1 H7 e
; \9 r9 w' H! i8 O% yif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
# }% [4 K" _* S, [ 9 b, r+ O% ^( \. Y/ K2 s
if clng(admingroupid)<>0 then0 g& O  f$ W+ S* G

6 w" s& g8 j- Nadmin_lever_where=" and menuid in("&admin_page_lever&")"
0 [+ z7 W1 |* R: {3 @
* y0 R1 i' a' X- Mend if
, p  R) n' d/ }! e' n- m
* H) @9 F% {5 u  U+ ~end if6 W1 u8 i" ~3 h: @& f9 y

# I) i9 ?; L- `! l8 q/ N+ yend if
# w9 `2 t3 X  q5 \6 ^
! G( J- e: Y+ N$ f( s) Y$ G: uend sub
2 @& P4 `. L4 x+ ^# V9 ]2 l& X漏洞证明:
. S5 @: f( T8 {看看操作COOKIE的函数
/ p/ [" ?/ H2 O5 `* [/ |& e ; Z& a: F  x, R3 D
public function loadcookie(t0)3 g# S" k0 J3 W7 C* }. ~! k
  Z: o/ E8 y, h) l& S- @6 p! ?7 i2 x
loadcookie=request.cookies(prefix&t0)! p6 l& @0 l+ h: ^1 M7 h7 ?: Z

& b( y% J7 Q" [end function
& l4 x6 ]; [* Q: n0 H
5 c2 f5 F5 l5 _" H4 Bpublic sub setcookie(byval t0,byval t1)
  M3 L1 m* T; H" L7 F' z0 G1 W 1 B+ Y/ |! Q+ [. M$ l4 |5 T9 q7 B
response.cookies(prefix&t0)=t14 J9 k9 A( u- A& ]$ t3 g
+ h3 o7 J9 [: }4 L/ f
end sub
- S" e. Z1 @- w ; N- f6 O8 `3 M; E
prefix# c/ m# o4 ~6 Y' w
' f6 T- L, ?; X$ q1 o9 e
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值4 r% D1 [8 D7 K! Q5 v$ ]; K

2 s: s8 O% j* j/ r, Xdim prefix3 Z+ R# {% j0 ~* f/ D7 p/ X
" W4 s% X9 m8 l0 J% i; Y
prefix="1Jb8Ob"1 w( M9 b3 i/ u7 ~( r7 V* t% d/ T1 G
4 m# U' I$ h) u5 R- [% x# T- u
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
! n6 Y, N1 M' w* g
2 x: [" Y- a: e( ksub out1 d9 o2 Y8 Y" B; B
: Y+ U0 B% y7 c: ]  l8 z- u
sdcms.setsession "adminid",""
5 G/ a. L' a. j4 {9 v$ | # `$ Y$ ^$ S* U$ ~
sdcms.setsession "adminname",""
) z- x: T$ N, K, g  M' i " s/ |, W: v( x9 d
sdcms.setsession "admingroupid","". u+ Y2 s6 L6 U9 A$ g
1 L( N0 ]* s7 C" B- H
sdcms.setcookie "adminid",""1 N9 ~9 Q4 L6 ^' o; m) N  D. V: G

8 W$ u& I# P% H9 Ksdcms.setcookie "loginkey",""
6 g2 R1 k. V0 k7 W* h( F 3 R0 B) @5 f5 G! h: c* F
sdcms.setcookie "islogin",""3 d2 c: J. Z; R+ ^( q  @* @. l$ _; ^

$ S9 d2 C7 w% C5 W& x0 {sdcms.go "login.asp"  E  L$ Y8 V! p2 L% Z) n- n& A" b
* J2 W$ ^, }0 k1 ?# P
end sub
; A: `+ Y  p$ B# W / {+ @1 Z& j$ |$ Y6 l

6 @7 E7 ?& a. B. ?) t利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
# u# G  E8 l: ^7 v& G( }修复方案:
: i4 X9 W' `6 L$ m# d9 l修改函数!8 \, ]- e; b, u7 b9 N
回复

使用道具 举报

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

本版积分规则

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