中国网络渗透测试联盟

标题: SDCMS后台绕过直接进入漏洞 [打印本页]

作者: admin    时间: 2013-7-26 12:42
标题: SDCMS后台绕过直接进入漏洞
要描述:
* d& O/ V+ {( p; `8 k4 s. D( g
: y/ C) d  @8 YSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
/ B4 c7 h2 l0 C3 N- ^+ {3 Q详细说明:
$ w+ f; Q+ }% LIslogin //判断登录的方法
6 L9 q- Z' ^" i& x2 t0 F3 C. `9 [ 9 L3 j  V- l1 j
sub islogin()4 n( I/ w4 g* p' ~( B0 G
6 O; r; `% W: m/ @, C4 K, m, e
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then ' b9 \- F: a) o
, [8 A8 k7 L# F
dim t0,t1,t2
/ D: }/ e% q. J' L; j$ g- z) m
% o9 U( Q7 W7 l( i$ ]9 ~: }$ ^2 }t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
# L  b; Z4 H" z1 ?( s3 q; u& x ! [) z. I* l* B6 s
t1=sdcms.loadcookie("islogin")7 {& D& B9 l7 }+ Z
0 s/ }9 X5 w$ C" `4 }+ ~
t2=sdcms.loadcookie("loginkey")) C/ r8 ^5 |4 C/ F) |- F# c

/ O, J6 I' H1 _8 _9 Cif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行* O8 l5 R! D$ f" }8 C- j  \# m

2 w: o- o/ L9 e: d$ v$ c+ O! p//% `  B4 e0 ]: [( m7 p+ a+ h( s

7 a2 n# t2 X& Esdcms.go "login.asp?act=out"
6 c0 ?9 k; m6 o7 r; u4 Q( k1 `3 D3 `
* X# W8 D$ j! z9 N/ lexit sub
, R2 c0 r" ^' _. @) j& ^
( H+ n1 {" N/ ^else8 H/ Q! i( C% d/ j$ Y

: i3 v0 I: a% w5 ldim data
8 Z) g9 D6 F3 _" v( y, I. j0 u" Q! N
" p4 [  o% ~8 W( Idata=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, s2 l$ t- u
: D6 n3 l9 p) u6 l1 t% B- Mif ubound(data)<0 then
# j; |7 d  r6 ]9 D9 z8 i / _/ o9 G2 p. x2 G% Q, x2 u
sdcms.go "login.asp?act=out"9 I  u. O5 V" b' p* i8 D9 s
0 F, m3 z& J% ~- c! S( W
exit sub% E& `- w" y. |' j- i# @+ m# H; X$ X

* l7 F  L2 E  t0 Oelse
+ R4 ?3 M2 a* _% x6 A  A- O! Y & g7 S% S& z2 t1 [$ ?1 @, I
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
$ H& d/ B, v6 R: w
4 L4 M2 P; h2 W0 P( R+ ~- p3 ?sdcms.go "login.asp?act=out"8 K2 n$ `% L( S
( C, L0 y  z  N4 Z' z8 P6 y4 w3 a( [
exit sub" a6 m6 {3 {! {2 Q1 P0 ?* O
3 s9 |4 \% `  A" o0 c- m
else: |- S5 ^0 w+ u

% m1 X; a: N9 S0 V2 Xadminid=data(0,0)
: t: [7 Z7 W' K/ j. A 5 B# W& T# ~5 s% c  ~1 I$ H2 o* ^
adminname=data(1,0)/ m2 X* M' G& E  n1 [$ Z) O) F3 d
" x9 a7 o5 j% x; O2 C
admin_page_lever=data(5,0)
% N& N" b1 ]( _9 A9 {  k
3 e+ }: H5 k. `1 p' Z: Gadmin_cate_array=data(6,0)
2 ?9 b: i) ^* R# ~ : C, A9 h# A: V$ J
admin_cate_lever=data(7,0)/ t# ^5 c6 Q! u. i% G

; M1 |8 ]5 F- ]$ |: Gif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
, N1 t! X1 ^) ^; J; _+ L& M. N6 Z' J ( H" m( q3 H% k3 i, m' [  i* [. ?) n
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=01 G* M5 b* N' y) k0 ~, [8 V

5 H6 u; P# H3 ^  {4 o4 eif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
4 U1 ]5 Y; ^/ h+ F
, d2 D: X8 i3 E, N6 b% Yif clng(admingroupid)<>0 then* l" p2 _- h5 X2 o! ?) R

' z- f' u& q* l; g/ ladmin_lever_where=" and menuid in("&admin_page_lever&")"! y/ {3 C3 J) b  ^9 c. k. V1 Y
! b0 {# I; {0 V, h3 D- T! x( b2 S
end if
- C9 a, e4 u' i9 J: O ! v( @1 E5 E1 u& C: w
sdcms.setsession "adminid",adminid7 \7 {1 A! a/ K+ S' m: o2 O% j  W

! f% @1 b8 s0 x/ o9 ]$ Ksdcms.setsession "adminname",adminname1 Q( G$ a' ?6 h2 Q( _7 S

9 _7 o- p/ B6 ~3 bsdcms.setsession "admingroupid",data(4,0)
& I5 I) u( ^" l2 [! z' M
$ q  w! S1 e5 i3 t) b& j7 zend if
: t( d0 i, T9 l; p7 v( s9 I
" N8 L1 m$ w: f, _# u/ a' p5 xend if
8 g: p* B3 R+ g: t" L, e3 O7 h : J9 g8 y: F% J+ j8 x1 i. W6 W
end if8 J. ^2 [" O- X3 F' {

- A- u6 Z5 u8 i- uelse9 X: l5 f) n9 Y+ _; A

1 L  o$ ~& ~5 \7 l# Xdata=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&"","")5 @9 R  E1 C8 c9 a6 }

# v( Z2 K3 M9 D9 wif ubound(data)<0 then0 U( T- u0 i1 ~
, C( U- s, [( g
sdcms.go "login.asp?act=out": f& D  ?" R! e5 G; d# A
6 f* ^- ?2 U5 T5 P$ c* l; G
exit sub& A+ g* t8 M$ ]. L- @% s: n- t
" n: z- l! c/ f& @) x5 W
else. ~9 H+ t' t  G- T/ o9 f' \
$ q+ u* J0 V7 D& p; c
admin_page_lever=data(0,0)
, ]" P9 B. y! e# c0 P7 f3 p0 J4 ]
. h( d9 u! Q' `. A6 ?admin_cate_array=data(1,0)- o! D- J/ Q( a# r

6 T) w" S) M% t& ^admin_cate_lever=data(2,0)1 {; ~: F/ d1 D8 \8 T  e9 A: a

2 X7 p" `  A4 @/ v* _: Z; S% Z) Cif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0# a' w& D* w% ?1 W! m

9 F6 U9 Y3 m, v/ G" l* D5 _if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
! Z5 h; Q5 ]& Y   Z9 [. N) S9 z
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0! ^* E4 j, P* W
& {3 I6 ?2 p8 k% U- q( t
if clng(admingroupid)<>0 then
* b$ {) J) k$ R  s2 D" @; c 7 n+ H- N, [! l( }0 L
admin_lever_where=" and menuid in("&admin_page_lever&")"
$ q) ^; P8 \" Q4 H+ f/ X/ J* y' w ! s' c  ?; {# x, k% i0 a3 K1 ?
end if2 f. r( R4 Z) Z! r4 Q
7 u, \! C6 ?  {
end if
" D0 ~. ?% N0 y9 B5 Y
% U+ P- @3 v4 E- j8 U% I! mend if! V5 m8 R" B( A3 U% u3 i: l# v# b

5 |* r( i1 x1 e2 aend sub# k5 p* G' e# M! e
漏洞证明:
; C- x/ p$ c5 z+ m% _9 i看看操作COOKIE的函数
* v# I! A4 J* Z! M7 X
8 q9 t; P$ V3 B. l, ?public function loadcookie(t0)* b4 X  A3 S) \% I: v) w

( {/ ?& s- k1 @- j9 gloadcookie=request.cookies(prefix&t0)9 p( r/ c) T8 B1 A
' P+ l# \) ?: i3 |* ?0 y, A
end function
; `4 ~1 l* y- r: S2 z/ [6 d% K ) a) R1 _, [4 Z; x6 W$ ?3 Z- O
public sub setcookie(byval t0,byval t1)
# L4 O9 [. ~  ~
* _2 F7 i5 G- l5 q- p- kresponse.cookies(prefix&t0)=t1# R7 p5 C: ^" @- d
% p4 w6 Z( K/ Y( N
end sub
4 S7 q3 n0 J; L6 x
2 g7 Z+ t$ n* E; gprefix
( ~- v6 D1 g! V3 I 3 ?) C+ Z1 F2 U& j9 \% V$ \
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值8 c) [! C3 H5 ?' D/ G3 N6 {2 U+ e

8 s* W, R) U  e3 `$ V5 w: Xdim prefix1 J4 e, v9 ]5 N0 H; J' }! {* I3 o5 j
( o+ Q3 Y5 X/ B2 H- l
prefix="1Jb8Ob"
* N% f$ N" p8 E( k+ G 7 l1 j6 N- K% R) s- K" D
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里 0 D, |6 m8 Q' K* N7 }
$ D5 b5 L6 `! A8 V' l) r
sub out
: E5 n  u! i+ R( G7 r( H2 r* b
+ a4 F( c; c4 }5 rsdcms.setsession "adminid",""8 u$ A/ @  M$ Z- d

8 g: R1 ]- B% \0 U, Jsdcms.setsession "adminname",""6 Y- `7 l! j& R! ?% s0 \

2 J' G! S( A* H4 [4 i9 S1 e* ssdcms.setsession "admingroupid",""1 u8 j2 {  o  W& F. M& h9 L

% w8 p' \$ [* L1 e  R+ Asdcms.setcookie "adminid",""
6 J! `+ Y! y2 D: a 9 n% }7 [  S. R
sdcms.setcookie "loginkey",""
) h+ A2 J! a7 e/ ]  E * I: V. e7 e3 I
sdcms.setcookie "islogin",""9 F* p) h& \- c5 O* g: o) A$ i
; q7 H" v8 n+ Q
sdcms.go "login.asp"  S- C- [2 ~) H( W% o

# h  g+ @- e2 K7 p2 O8 f0 oend sub( V' x% C2 A7 ~8 x' `8 ]

: S5 F& t, ]$ z& i
6 f+ M4 L  `& D, v. T利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
4 a1 ]7 Y/ V+ h8 Q修复方案:; v3 W4 K1 S7 S  H! O; ^
修改函数!
) f4 X& g% ~( N9 s1 |




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2