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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
要描述:
' K# d7 g  t# l/ S9 ~- f9 h9 Q& e
6 U7 B. `3 |4 X& M, kSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
$ O0 m- M' f3 a详细说明:+ F( J2 M7 V! H  S& m
Islogin //判断登录的方法
, G+ \* K" C& M6 W- ?( p ; }% L- D1 v4 ~& t  e
sub islogin()
4 {" y9 `. X4 k. u2 C * [9 t$ Z7 v1 i- \+ Q
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then : n' Y$ a8 A5 V; Z
% J5 T3 J0 r- @( t* ^1 t
dim t0,t1,t2
& S5 U9 E  S/ h) A: q
& n; U* Q/ P! Et0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie 2 N$ R! w* x  A( p% E. l

/ [4 r6 `( k. St1=sdcms.loadcookie("islogin")* J8 ]5 g# k' r1 {
" h8 I+ [; c" M6 I
t2=sdcms.loadcookie("loginkey")0 w" r, |8 X6 I
5 d: `/ R) E) u0 R% Y
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
: L5 r$ r( q) Q; V0 J6 P " l0 e" \8 W2 ?* s
//
) o' C# S! S# V4 {* H
! \- C9 |7 u0 L3 E- t- W; nsdcms.go "login.asp?act=out"
$ G+ P) j5 ]9 ?% e. h4 l 2 ~6 ?8 _4 I; [
exit sub
' S0 r- ^# q; k5 y 4 J. ^' W+ `( g# W7 Q0 f7 S
else
% `$ H7 F1 V' {! P: j/ \+ d: A6 I : V( I7 C( H" T- U$ _: J
dim data* Y; z% g7 H/ G% C4 _+ T

# x  A! ^" `- _$ J% r+ r- Hdata=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可控
! m, z5 N: }3 v* | 8 L/ W, t* @  B5 f
if ubound(data)<0 then2 u/ }6 I3 P0 I7 b0 h
' x9 b0 r% |& M; o7 K7 w
sdcms.go "login.asp?act=out"5 Q1 z! ]0 E0 q- O4 m% o

: B4 P0 b2 K- R& E, z$ I3 iexit sub
) ~  H) [- n# i2 O- _$ A4 a . e6 z7 D! N1 g! c: F5 `$ L
else
+ ^7 {; H5 {! [1 n) m7 D  J. D
1 e6 }/ Y8 }! S7 V8 m, n3 r6 i" cif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then( G$ C0 W  z9 c) T% a" z, M

- E$ B1 u: h2 v" u' [9 Dsdcms.go "login.asp?act=out"8 p( u& ~2 {; l% u
" R. B( o! O: G: N
exit sub: }! w. ^9 k1 k6 w, Q4 ?( S

8 C/ c! w1 S6 F% e5 a' p  qelse
$ a2 A7 j+ n* a' ?3 t8 C 8 c# s* s  z7 @( G5 Z9 L
adminid=data(0,0), }0 n8 G9 d- h1 U) l8 @. L; }
  n! h8 `0 {0 d8 Y' h/ v/ P( G
adminname=data(1,0)
# u1 \- k2 `; }: C
- t% q: z0 l) g' s5 x) t5 x, Vadmin_page_lever=data(5,0)
1 p+ z3 J5 a$ ^/ U
1 X9 J- |( B9 W  T; {& ^$ D" l! zadmin_cate_array=data(6,0): \* V' {% \2 k' d7 J: ^) z3 `9 _
3 M3 |/ s# ^; [' X; M  n
admin_cate_lever=data(7,0)
+ e. ^# g. J! g7 p' u ) n- k: j9 a. L- `% X+ g
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0+ B3 r/ y% Q3 U9 L

5 A/ D/ W+ a& {1 V7 s, X$ Mif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
+ N1 Z/ k( e) y' J- f( ` 8 d6 G6 u0 k9 U
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
& J  p, Z3 \% A$ W* Y 8 q+ Z, p- n: I% g" t
if clng(admingroupid)<>0 then
! z" c5 O" d" ]: _' A 0 A/ ]# p, ^1 |/ e" |: o
admin_lever_where=" and menuid in("&admin_page_lever&")", ^: ~7 F7 G: B% }' O7 o- M

" x. Z( ~/ f( Send if0 E6 e4 a  V9 M  Y* p% c5 g
% y, m8 ]4 s3 ?1 t& V- F7 K+ h
sdcms.setsession "adminid",adminid
% w1 U7 @. t; O: w0 G% H * l6 U, C. C, N# H. J
sdcms.setsession "adminname",adminname0 \% ~, N9 D9 k$ r$ X9 e( {, P+ ^
* ]1 o5 S) J0 M; O
sdcms.setsession "admingroupid",data(4,0)
/ l) |! R' t' s! g! c
) {( w3 n3 Y$ x  b$ C: n" `( E' qend if# j, R2 Y5 _% d2 s' j( s) b7 E2 D

8 ?: m2 E& A( y& Fend if
4 @5 @9 C: L2 ] 3 O* p' F$ n* e$ g3 S
end if
& J2 L, d0 @& n% l5 {7 K  w
7 i: O( U3 {; \: x% velse, [# t- ~  ~2 l( v* h. @' A/ ]

8 G" y2 f  X4 R1 Ndata=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&"","")
9 n/ |$ L' I) p4 G! v: K0 p7 B 0 S; ^$ a8 v2 v2 L
if ubound(data)<0 then' i! X: o; r- J  r0 u8 `

+ F- \% |* R6 a+ E7 G7 Dsdcms.go "login.asp?act=out"
- J, d9 l5 \9 U7 \) s& G
# A. s+ X/ ~! a1 O8 p* T0 {exit sub
$ ^/ t! ?  ^2 }: P8 v1 R  d) D" \
) s/ n6 R& \* S# s8 ]else
2 @( z) p7 H1 x7 Q* O5 n  P0 d
$ c' x0 k3 W/ r7 U7 tadmin_page_lever=data(0,0)
6 n" d7 g/ E2 e& y0 w9 Z4 E 3 G6 y% \5 a  v3 Z! u
admin_cate_array=data(1,0)
! r, Y3 Z; i- J7 V% G8 d
, Z1 \# o; r5 E! q8 R- Qadmin_cate_lever=data(2,0)
$ O2 Q3 N9 ]. A' r/ `
# C, R# R; p8 A4 m# y; Iif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
1 x  X2 O6 `- E; W* |5 Y ! ^2 g% N- V. V/ f* [
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
! ]+ b6 S$ c$ d' w. P  x( ?; C- S % q7 X$ ^# p) R& B% A
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
" X1 O4 q, @" X, p( g ' e; Z% k0 |, t6 o* x  E
if clng(admingroupid)<>0 then
; B- w; L- u  w/ e! i; ^
5 [3 T! B2 G/ x- X3 t. r5 Vadmin_lever_where=" and menuid in("&admin_page_lever&")"% l/ }- A& ~/ }  d! l4 J& k5 E8 n! X) R
/ T! X% F3 v) l; G! w& _+ K
end if
' L3 w/ Y! ]9 ~
: Q7 ]( m  n4 _end if6 V4 d0 R4 p1 w

% L& ]2 t8 b( d5 ]$ Z+ F- send if
' |: {9 |+ Y5 F$ X) }0 l2 T
: @/ ~2 j4 _  g  Z- h$ ~end sub
2 e( t. ^# V5 W漏洞证明:! }) h0 T  s6 f, o: ~* t
看看操作COOKIE的函数5 U  Z  R# M) Y! Y/ a; [% k8 P
1 C" y/ j7 V  y9 }% y+ |) O
public function loadcookie(t0)! s! D4 j, A: Q  _% r) i! E

5 p- d& R5 j) n  L) i0 Tloadcookie=request.cookies(prefix&t0)6 L2 f! _2 T) O3 o( w: C

" `' Y/ I* t- ?end function6 y' f" f6 U* m$ X7 m5 i& e% ], @; k

% v7 M' y$ L* D9 w8 x$ x  K9 l. xpublic sub setcookie(byval t0,byval t1)
# x; h7 H  z. ^. m' Z0 [
3 [/ C' W# Q# r- n1 @6 c: Bresponse.cookies(prefix&t0)=t1& ]2 s# I' A0 _  e0 x4 q
: i  s4 ]+ D: O; ?0 l2 Z
end sub5 L1 W$ |/ Y7 h, V
5 G: v7 L0 K" V* c4 B
prefix8 M1 ], I% H4 B0 {( V  D$ S: @

% D  x) E, [- [' Q'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
9 ?# A/ V6 Z* T. \$ W: V% H2 g 0 n# ]. T2 x; f) N
dim prefix
% o- c) n3 K: d% ?* ^9 |
, E+ [% Z3 k+ q6 w& y. B4 nprefix="1Jb8Ob"
8 B  z. H& q. T+ H! z
9 M- ]& G1 ~( o) D9 k'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
* A" I1 o; c3 H, b. @3 T / g0 c' n( O& T0 V
sub out  I0 f! D2 `- N* m

5 h, }& s( m) f% }5 usdcms.setsession "adminid",""' S9 d0 w- x9 i+ ?2 ]

# h( j9 H0 o* Z4 Q; ]! Ksdcms.setsession "adminname",""
* |6 J" B. p+ x  T, O0 b$ C5 h ! y& [; f( E4 K  A
sdcms.setsession "admingroupid","". s  l- _0 [8 ~

! e. y8 ^' Z8 D. k! P; ~sdcms.setcookie "adminid",""! x: @& C% _* B( q  m, q& P: F" @5 R

7 l; }8 Y: u6 o( @( {  ksdcms.setcookie "loginkey",""
3 H; a+ J: {+ s8 v& m% ]; K# L 3 O/ I  B0 r" V& N) R& X8 P! k0 l! T$ n
sdcms.setcookie "islogin",""
1 I0 o9 {; l1 e1 m. {0 h  x ( y. }% c  g0 [; G# ~
sdcms.go "login.asp"
1 v5 y3 {* x+ K/ z
. P) U( Q! m8 Z3 L+ J5 Cend sub
- ^$ x! z3 k- R) g+ q3 E
5 m/ N9 x* L( K$ E; l1 b* H 3 v; R9 {% [2 [2 d) ~  \3 c
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!% H6 L9 T# X7 [  d/ k, h% J
修复方案:: B& {1 M: R  U" q2 N
修改函数!
; y' p# `4 K' C$ X
回复

使用道具 举报

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

本版积分规则

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