找回密码
 立即注册
查看: 3795|回复: 0
打印 上一主题 下一主题

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:
$ `( x  {( W% R
. O8 a8 x7 i; S8 g6 T& GSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
9 J: I8 Y2 A" ?0 a, d$ e! M详细说明:6 _8 D" j: }3 D; W5 ]+ F* E
Islogin //判断登录的方法& w; C/ ~: |! m

8 c2 x" O! {1 K- B- ]3 ksub islogin()" a+ M2 P& ?' V7 ^2 H

" p% r0 R( m: G. bif sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
, ^  e; k2 W  \3 ^. D
, ?( H3 q1 `+ Vdim t0,t1,t2
8 Q, e/ `; g  |5 t. T% F
5 n: I; x" u7 W  i+ H! {5 Ct0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
+ q6 e6 _* x3 E2 \' ]3 W% s" A0 c
; H. ^; q7 y5 A$ e$ G! lt1=sdcms.loadcookie("islogin")
" g1 v9 k# e+ d. H( ^) w* M # V6 Y+ [" g% [, Y+ e
t2=sdcms.loadcookie("loginkey")" X6 l/ C+ M4 ?+ n: X$ G0 q' @9 z
8 a% z$ S* w# S3 D+ c9 N
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行: ~' j2 d- X* x% p7 F8 I6 V
3 E7 X+ A7 R6 b' V
//
5 e# T4 G; b; l2 C" k+ Y* H
) c6 C1 ~% F. M7 I! W& s  }sdcms.go "login.asp?act=out". o) g4 |, f( j2 |0 V& o" v
4 Q1 G2 v$ f4 a( S1 w
exit sub$ ~0 N' A5 X$ \, k# S
: S3 H% Y5 T/ ]! n8 V
else
" S% J$ P3 u0 f6 u1 F " E* v  p, r4 @! D$ |' s
dim data+ }8 C/ b5 {! {1 X' D
5 Q5 j: ?. T" O( {
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可控
/ _2 o: I# h+ k7 c1 O' c* k& R ! l' j. @+ o- [7 `3 q. H/ n# z
if ubound(data)<0 then7 z* R7 w: t9 P! R( ]

4 j: G' `0 s- X  [0 e) s1 Jsdcms.go "login.asp?act=out"0 u+ m1 Q* `6 M" k+ |7 S' F

9 v, z$ h3 u" o1 o% ^exit sub, B. c" U4 s0 a
8 c; ]& r, |% U9 Z: j1 L
else
; c. j' ?- ~) I! \
  h  y+ \( C; D4 W% vif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then% e; v, u" p$ Z) b1 o

4 ^2 K( y3 r8 m1 j$ A9 Lsdcms.go "login.asp?act=out"
- C* G* Z0 |# C5 } ; N: |  k0 C* K0 D5 p- p4 ^
exit sub
, S" M( ^+ Y/ e3 F4 A
( Q  `0 K$ p0 |, [; @: T- g# Celse
; o8 a8 \6 Z6 }; g; E. | ; U& g$ \2 I$ {" Y! m
adminid=data(0,0)* `+ {+ l8 p( L# N- @8 x

8 q. v0 f; x" `; badminname=data(1,0)
7 B! a3 q0 q, \, m+ Q0 @ ' e& Y' ~* o* {0 |
admin_page_lever=data(5,0)$ w/ K; d. c/ _3 n9 o" t$ F) z$ v
" ?" z: m0 Y+ ~/ P
admin_cate_array=data(6,0)3 D9 R  e8 ~& a8 [4 z3 v! n% G

( C. e0 Y. n/ U1 b8 vadmin_cate_lever=data(7,0)2 k# r( x* y) P
: ^( k" h) _" d$ B1 }4 P
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
5 P0 A# @9 W) p: [/ A 9 R" X" X( D. ~0 d; |! K
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
; m* P- b; `6 \9 L$ {$ Q4 z 0 h: `5 l0 r. [( L- B0 h, M
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
- ?" f3 ?! t+ d/ I
- T6 @4 [# w5 s) q$ b! bif clng(admingroupid)<>0 then0 z4 [. I. [8 C  y4 p6 ^7 D, }

% _: d4 w4 g- ^+ C! R- `$ M* Nadmin_lever_where=" and menuid in("&admin_page_lever&")"/ E. L. I5 i4 z5 F3 _/ [

7 {2 i5 s2 h- G$ `2 b6 F9 f/ Yend if
0 Y# _+ u  ?5 x- x
; C7 I3 d. d4 ?/ T1 Ysdcms.setsession "adminid",adminid
1 c, K' M: ?+ I: W  L9 ` ; T2 x, I% I5 s8 a' R0 D
sdcms.setsession "adminname",adminname
3 q. V0 P8 _( Y. t7 E
9 J, e# t0 x* usdcms.setsession "admingroupid",data(4,0)
2 Z" w6 S+ r* a4 E- @
7 r+ ^, n3 P6 m* S, S, U8 Rend if* c% e$ r" w  v/ i
9 S- P, T' {1 @8 y+ g
end if! R' M; D3 e# Z4 I5 A: a3 ]* Q
( T" h1 |* G0 M- k4 L$ s1 r6 z
end if
; A) G; @8 z+ k1 i, y, G: V- D ; ]& }& g4 W" v, e
else
0 p5 k" K0 z; V8 N; R1 g
2 `- B% o6 ~. F% q& u, x. ^3 \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&"","")/ }% v. u& g7 g. r! K

  \; P) [9 L, \8 A) rif ubound(data)<0 then8 Z8 e. q9 v$ J& z$ M: R8 ?! v
% D0 U2 B0 A8 `- m
sdcms.go "login.asp?act=out"! i: x$ ]% X2 @+ _! L- E9 c7 @
" q) f- y0 e# W: f3 [
exit sub; Z# s- U6 N  Q  y6 g2 J
# n1 ~; h9 Y" Q8 r9 F
else/ Z" B- ?# P( g% J

9 O# b* O& k$ Q9 G, i! Tadmin_page_lever=data(0,0)3 B7 l: P/ s0 R" G- v  r! ~
) [/ C4 [5 r& A( L5 N9 p
admin_cate_array=data(1,0)
; h+ ^0 g) b. Z' T , ~& q* ?, Z8 A
admin_cate_lever=data(2,0): I4 r+ w0 N" A: }+ n

; ^5 \% p2 r; w( Iif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0; v& [; {0 J7 _  ^/ z3 \
& r. j4 G. c) A! }
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0" S' g2 W+ n% [, G
9 t: V6 }7 {- w8 \8 b
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0; d4 x5 D5 y# u$ s# h: _  b

' q7 D3 G( ~) Q1 Lif clng(admingroupid)<>0 then
8 r: g! e1 \7 ]' P
* c$ v- O2 Z* O/ O8 ]6 `; ladmin_lever_where=" and menuid in("&admin_page_lever&")"# \. W; _0 y/ T3 ~; Q

! s4 F4 F* F: R6 U  u* d/ Qend if5 L: U/ q: d- F; h+ g3 {8 m
) W6 r' H! y  o: A
end if
3 b* Y6 V8 `5 a0 W; @- Q  u% F3 h/ G
' ]3 F2 n; |/ J8 t1 o: l7 oend if
) K/ Q8 c  ^0 E& R' y
9 K) ~8 C$ E6 |0 n3 g  i. Mend sub
% C7 L7 _4 n4 B( \2 u" y+ g漏洞证明:
; \2 V' E: o6 I" [2 F' Z5 Z  \  t) z看看操作COOKIE的函数3 r. @4 ~$ w( p; @5 {9 y4 q
9 r% b$ f- ~! }
public function loadcookie(t0)
5 q; Y+ k4 ?: X2 z# C
* v2 d0 w& r/ Q: ^0 A; @0 Eloadcookie=request.cookies(prefix&t0)5 F# V7 M- f$ a, Z& C7 @* w! Y/ M

; Y# |% w1 |$ F/ G) Pend function
1 O# ^* C9 i1 |4 B) W0 E! J5 m # |$ Q+ x' r$ c6 p& ^# C' e6 ^
public sub setcookie(byval t0,byval t1)& i4 _1 s& Z& ]) |  y( H

/ N4 [' p( K% `2 T3 Vresponse.cookies(prefix&t0)=t1
, e! B1 g* q6 C6 X4 c9 i 4 f% W: Q  X7 J8 s" w! ~
end sub6 ]* ~3 m, r( f$ W4 e

& `  D, M& F2 G! h  Qprefix7 F0 ~) r& }& B( B/ A8 W0 K$ {

- D+ T  K; ~0 p  m5 }'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值0 t% \: B- C& ]; F) j

1 T7 b, J; t5 e# S8 j9 F6 G; tdim prefix5 v2 `/ E0 v: n5 y) P
& g( v; X1 R* ?0 Z) o# Y
prefix="1Jb8Ob"
6 q$ {& H3 ^6 a/ x1 w8 O8 `' }) i
7 M* B. h; B' K; s, q" D'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
5 @" V- ~2 T4 w9 k/ ~ ( j* |" m8 Q+ Y" C& p* {. @5 p, x
sub out
" }# q; e6 p! p8 {/ T1 w8 N3 P
/ s) `3 p3 |& [. I4 y0 |7 a6 Csdcms.setsession "adminid",""
# @: Y/ `$ F  r
. s6 o# F: C1 T# U8 Rsdcms.setsession "adminname",""
3 f( k6 V/ Z6 Z 9 [: C0 h2 j* j1 X
sdcms.setsession "admingroupid",""! V1 J0 G1 s5 @/ {& c
7 w% [8 n5 G( @, r' c* ?9 A$ \1 P
sdcms.setcookie "adminid",""; E9 e6 V# T$ a# ^+ E

- E! M1 y; X* X: l8 M8 ~3 ^- K  msdcms.setcookie "loginkey",""
! V$ V  K& S, D; g) u # T+ g1 z; C; P9 ~
sdcms.setcookie "islogin",""
, x2 V) k: C/ Z) d) _
" [7 c! ?4 }5 V$ I" W; m% i/ i; Qsdcms.go "login.asp"1 X/ Q* W( f8 g# `  a/ Z2 G" J5 l
; n! D3 V. x. n( I0 j
end sub
7 d5 _2 m6 y6 I/ y" q. p
, `$ v# W$ a( l
* T' `& w1 ]; J$ t7 D利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
! B! s+ ^1 q2 `' ?修复方案:2 K4 F5 R. @9 Q, |/ `
修改函数!
( `* {" K; \& S3 z' k/ K
回复

使用道具 举报

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

本版积分规则

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