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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:
( s& b6 E# y0 ~7 {7 J) g3 R" L) d( U% W4 i" X# |1 `8 Z
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
* ^$ |0 h- E# z详细说明:
. f' A" Y2 I8 x/ u: }5 ~Islogin //判断登录的方法4 B+ f2 G/ P9 ~

$ q$ ^  Z* i! O& ?% C5 vsub islogin()
& M0 o% c  K  h: ]" u ( n2 l; h- P( S$ O- e) Z* c- b
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then 2 T. N# t9 I4 ~

9 K7 O3 Z& C* Z! M. ^3 K: C  tdim t0,t1,t2 8 x+ B3 |+ ^+ O
- S* p$ i  B8 r5 h& ^7 ^3 D3 n0 u% {
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
; I6 L9 Y1 ?  `4 a
2 g0 w+ _- M8 T# Kt1=sdcms.loadcookie("islogin")1 P& Z. q! l. D" D! V$ w
8 E; {% f) `7 D  h6 _& i5 t! S
t2=sdcms.loadcookie("loginkey")3 @1 \1 C. K0 Q1 Q

1 [) L, }. T# d* Z6 S6 l$ i4 qif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
9 {8 z# ^  {+ A; L 2 ~/ H/ ~6 a5 w: O& h- Y
//
2 R  X) o  L9 H- B. Q& X
. s+ k! O9 P& k$ O8 k2 fsdcms.go "login.asp?act=out"
' E4 P# y$ }9 x2 u
8 C# s$ M% E, K/ {exit sub# R: a' Y3 d1 P* Z

) T; U) v" w( S: O1 Ielse# o& k! I. T6 \0 n0 {# \% w! {8 ]

9 N# j' ~; D" K* B; d$ adim data: ^1 d3 ^4 O) [' h

* H, x% s' C( v" |# F' ydata=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可控/ \& f" i( f& N1 S( X! M: Q7 P* A

$ k  ~) \2 \) Z! L$ Xif ubound(data)<0 then
& C2 E) W1 g3 D4 p) A4 x" k 3 o2 J* |( @  X0 `3 K1 H; Y
sdcms.go "login.asp?act=out"
7 T, z( n0 x+ o* Z# j7 P) t
3 @3 m+ U$ m: Hexit sub
, h8 O8 ^  m7 x2 y  t) `4 r
8 r* e# S0 I: i2 B' A8 ielse3 ~1 n: ]/ S7 F* M) `, i- h, B
- z/ }3 b& Y4 V: c$ P% V6 L& P
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then9 B. `3 Q; `/ A: k( }* J

2 b- o) k7 l# X, c( f6 ]9 Z* Nsdcms.go "login.asp?act=out"; f' Y- E) o9 ?  p
7 }/ ]* B; Z# t3 S. }! {/ z
exit sub
4 V+ N+ a/ J! L1 z1 c7 p, e : O7 \# i" Y" ^
else
! M8 [# m) A. j4 H5 S ' e" f3 _0 N! T9 z
adminid=data(0,0)
5 I4 G( y, A  v3 _# X
& \% L$ h0 j+ o. q7 Z8 R9 `adminname=data(1,0)7 m& h% T- `; ~& N' h7 J

7 p8 A1 y* _& M1 ?3 m9 _2 ~admin_page_lever=data(5,0)
0 |$ U- ^8 Z3 r0 C
& O( T8 i& w& m" I. vadmin_cate_array=data(6,0)
$ v* v+ G; o2 e# n 3 L; m$ U( ^) L1 B* i; }7 e4 w
admin_cate_lever=data(7,0)9 G" C0 t/ u$ G0 E' U; l) G/ V
8 _$ W1 l+ ^6 z+ U5 n4 [. i4 w
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=01 }' a% O; }5 D) h5 N) E
4 y9 t/ m# v% }# \+ {
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
! t% a. Y) l+ O+ ]5 h& a+ n' X. x
3 C2 k7 w* x; S$ U* kif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0* G! B6 c' B% Y% K8 g
1 H4 i* ~2 C9 d% j1 n* l8 }
if clng(admingroupid)<>0 then
; ]5 p4 {( P: P; ? ! T$ L2 `+ ~( S7 G/ ?9 e4 Y
admin_lever_where=" and menuid in("&admin_page_lever&")"
8 n0 ^7 @2 Q7 b2 Z % u+ ~3 o" W, ?$ t! @: k5 w
end if
4 w$ M6 P% I, E& d
1 B+ Y9 a+ P) [) vsdcms.setsession "adminid",adminid
  P% g- E! j2 i' u( U # ]% U/ u) Y2 w+ E2 X1 I+ }0 U: T
sdcms.setsession "adminname",adminname% N2 K5 c% l% x0 v; @0 s3 R
. [) U5 l; C$ E8 B0 @& y1 t. P
sdcms.setsession "admingroupid",data(4,0)3 ]3 }1 I% l# s) g
5 b0 f' ~" r" R( L8 R: r1 S9 z
end if
1 F  k3 @8 ^( H" k) u$ }
: P4 w1 w, C/ [% I2 \5 b# Fend if, S4 \4 Z/ \/ U% r  b6 [4 A9 ]+ k/ F

3 x. E! t9 U5 `end if- V' H0 g- h+ n
/ V7 m* c% A2 s/ Y2 \) K
else
! Z0 N  g6 q5 Q8 U$ y& { ; [$ y- w3 }4 V% J: d3 H' a* `. g7 h8 @
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&"","")8 J) i  \! L; X& i  E! U1 x" F

) ~( G  y% x' T( |' Pif ubound(data)<0 then
) P# d' [0 b$ P* v 1 _" Z4 H' T. a- j( |: Q. r
sdcms.go "login.asp?act=out"' ^8 F. U2 ]) `
" P8 ]* U: R. Z6 M8 j# F
exit sub; N4 j3 f1 Z1 q! V( ^
% q1 q2 h; m/ q, r7 H6 q
else& u1 t  f% e0 Y

' N" u' ?0 L) Iadmin_page_lever=data(0,0)
4 {- c# Y; W  g7 B. z! K1 T# x   a! ?1 b* [$ v' Q
admin_cate_array=data(1,0)3 e9 L, o! B( _! f1 d& _

/ i" l: x0 H) P! y- |  c$ }admin_cate_lever=data(2,0)
6 H" l7 a7 X0 _ * v% Y5 H: }; g& W. L/ ~
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=05 E# M9 Q1 }, ^6 f5 U$ l# v

2 E3 G" V6 E. w: c  V, a: P+ hif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
* }+ K+ L0 m5 j3 O. V- A; a
3 t2 `2 W- |- Q% U0 t$ mif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
2 y6 g/ Q) F3 w ) N% L- O/ s4 r
if clng(admingroupid)<>0 then
4 Q+ d1 h8 Q8 t1 c9 O 7 a  J9 I) C: M+ W/ x7 K$ N
admin_lever_where=" and menuid in("&admin_page_lever&")"! d+ l8 G! S. L* u7 j% g6 q: d# w

/ Z; m+ y) \" t* x3 X3 wend if% `9 m/ b2 z% {$ }( w+ @4 J# I
, a. B# a7 Y4 X! r/ }! T( \) h& d0 m
end if% f6 v  w' }+ ]& q0 K

7 t; m# V: L9 b5 @, ?4 i( U) @end if
4 K) T6 V7 r! B5 S) A* o
! G" G0 I* j9 q8 Q) f7 D7 R5 C- Gend sub+ q% y0 \3 ^- y2 ~7 i0 {
漏洞证明:$ [" ]. V/ g0 y1 `! J9 B
看看操作COOKIE的函数
" r; Z, P! T+ _
2 [% C' d2 N( ^: `) w: H- ?public function loadcookie(t0)
* s# w( E4 `) P3 T & E& B) x9 @9 y% v/ i$ d
loadcookie=request.cookies(prefix&t0)$ [6 u$ T0 T; u% F% F8 p
( o1 V# K2 S& j  ?" V" i* Y
end function
% W) }: M# s* T) t, F3 u4 W6 F
- C) K! `' |( h+ N5 n4 h7 y/ G7 Spublic sub setcookie(byval t0,byval t1)
' o, o+ }* V* u5 H% t. |* u, g* b0 [2 N
5 w# X% _4 b* m2 |4 x5 Sresponse.cookies(prefix&t0)=t1$ o9 n" M1 N% X* P! V

5 V; \  \" X% a+ ?: Rend sub
1 [1 G! @% R+ x7 J; }- E
6 u6 n9 m/ L# E- Uprefix
+ V9 d# @1 @1 C0 g6 d8 ? % q$ s, l) |7 x9 w
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值8 @: K/ }4 {% J. G. o$ ]1 {

2 B) ^6 f$ x0 s% _5 Odim prefix- \* X5 B9 ~5 n. U# C

  {! d% V2 z; w' K; W5 w2 Aprefix="1Jb8Ob"2 I5 G9 v" ]& d; k7 F. |

. |' E/ Q) B  s'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
4 Y5 @7 `5 N3 R4 B
8 \* F( ^+ S# I, k6 D/ z. Vsub out
6 D: t) \5 _3 M, T  v # X, e# {( V$ f  m  Q1 s/ Y
sdcms.setsession "adminid",""
$ F2 ]2 |% y& |- g# t1 M7 m / l* T& n! A; L* A0 R: d
sdcms.setsession "adminname",""
4 s1 e5 T: F0 ~4 X. ^
+ k) Z0 i) Q% Q2 |/ i! U  Ksdcms.setsession "admingroupid",""2 j" `1 [. v! ~: {- N4 c

* J: _0 Z, F+ f* L+ vsdcms.setcookie "adminid",""0 [" ~' w0 `9 \% [  K1 z
5 `, W  Y9 u7 O0 Y0 t$ W( N
sdcms.setcookie "loginkey","": [8 [; `3 o" U" H9 v
8 Z3 U3 g( R+ R  y0 @6 U
sdcms.setcookie "islogin",""4 o6 h2 b" x+ N7 e

: a- I5 R: m5 u$ g- F- }sdcms.go "login.asp"
, Z* g1 p; M. V- o $ n; l( a# A0 C0 W8 J" b( L" o
end sub' D3 P* g  C/ t& p
5 t- t; M- |2 Y) _/ ?

+ k# ~- D+ m" o& V3 Z* ]利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!- N/ |0 r5 B/ h; t, A& s
修复方案:) C* Y$ y& j; I2 O0 x0 y# p) F5 C
修改函数!/ @% W% ]! J( B; b
回复

使用道具 举报

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

本版积分规则

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