中国网络渗透测试联盟
标题:
SDCMS后台绕过直接进入漏洞
[打印本页]
作者:
admin
时间:
2013-7-26 12:42
标题:
SDCMS后台绕过直接进入漏洞
要描述:
, u! n# Z. Z# S* j1 R
# I& S9 Q+ U/ l) j; C8 P/ j
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
5 A ~/ r1 y! H' e( S* M3 V, C
详细说明:
' l' l' M/ r5 i' `6 B, s8 D3 n: J& Q
Islogin //判断登录的方法
( n$ C. I; Q; @. J) |
; D/ K- A5 F3 }- k% ]
sub islogin()
7 w" X1 p; X8 V4 V, T# f
1 `& Q0 d' l; o3 e, b F
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
, Q3 m% R" B6 E* h
* R. I4 g; S: H" u2 I6 o* s
dim t0,t1,t2
$ \, L7 h- K5 N2 ?: {: ^3 S1 K
/ r L5 W, T8 B6 X* L& L/ p
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
2 k n7 Z& y' {4 a& m- s- I9 H7 v- B
2 f, n6 l" N* `8 s
t1=sdcms.loadcookie("islogin")
8 N" _2 p4 [" D) p
- p0 ]0 m% {, s i& o' V1 _
t2=sdcms.loadcookie("loginkey")
; [8 q, P* [( k* M- L; o
3 Q9 ~6 o; F9 |% m( t$ w( X
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行
' j& H0 K/ F' n9 n2 j# h2 v1 X5 t
# a: k, B) p/ }8 Z
//
' s2 |) L2 H8 ~+ d( ^7 F
* S& B+ ^/ _/ e3 V0 ] A3 f
sdcms.go "login.asp?act=out"
' s) ~9 D% S+ e6 ], s
e ]: a/ o, P% c
exit sub
2 v1 X- L6 T! K4 o) u1 S
5 ], p3 ^- a/ ?8 _, I$ y
else
) H% k8 o- j" @
" t3 \: _1 r' A
dim data
5 @3 H. c( d4 q- D
% f" K3 C' E" Q7 C0 a z
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可控
- V d2 w% }% W: [
& h; x0 c9 i% q7 N- }7 H" {
if ubound(data)<0 then
( _5 r: {% Q3 s( U8 p
, E4 O& M, b8 y Q5 \) u
sdcms.go "login.asp?act=out"
$ j Z, H' ^5 w# e/ s, b$ W& j+ x) D6 ?
3 {7 ]8 Q, Z! u. U
exit sub
, e9 G" u2 M" f" f2 M5 R# q
1 |( e9 a- H* W# S, ?
else
6 K/ u8 H+ M6 j2 h$ o' F
$ c ^' ?$ j6 z: ?4 p; v( p
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
) ?+ H+ A$ g; I* ?) I7 v
3 l/ o5 M: C3 P# S/ B, _- n
sdcms.go "login.asp?act=out"
/ | _5 {! W. f$ e5 k3 n. K
' _) T: S a' ? F, l; d! ?: L5 W$ n0 @2 D
exit sub
( s5 v; g0 E J3 F& ]/ Z7 ]% }
' {- C2 ~; X6 ~' W6 d
else
, H5 X" ~/ M$ Z* t* O6 i
2 z1 z4 n( |# Z& B) e2 V- r
adminid=data(0,0)
9 i: x7 R6 i0 M) p
" \$ _% \/ C* D3 Z% R
adminname=data(1,0)
6 ^. J2 e* c# d: }) D9 P
$ o) \' \+ F1 i R+ m( I! A& I3 ?0 q
admin_page_lever=data(5,0)
. i R- _7 f, X8 B' Z! i1 t8 ?
* P: A: m4 k: Q
admin_cate_array=data(6,0)
$ p' K9 V1 J- D/ ?( l* K
2 g- ?7 e+ p B3 S, B
admin_cate_lever=data(7,0)
9 ^, {& E3 c" Z/ u/ ^
, q3 S$ O$ j# F4 |! O. J
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
: A, m9 z. t1 C9 j& \" x i& P
' q' \" r7 r* G, C h
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
9 Q: x' `& Q; y2 T
2 ?; D; R9 v! Z
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
# |8 I, z9 X$ E7 F+ i/ B
+ I. c6 }$ e6 y' h
if clng(admingroupid)<>0 then
X1 k) M" V4 `7 z4 {! a
9 X4 q. k/ g$ o5 F- E( p" @- q
admin_lever_where=" and menuid in("&admin_page_lever&")"
* i! S, j) O6 s8 [. ~3 e# y
, W; i5 O; s' N% v
end if
2 _* V3 P9 |4 y: _. o/ k% b
2 B) o7 P1 w; S7 g9 b
sdcms.setsession "adminid",adminid
; o+ A5 f, S8 b3 Y
2 a% }6 L4 |$ C
sdcms.setsession "adminname",adminname
! u" ?4 ]1 O, H3 A
U& T8 ?! S0 r+ f
sdcms.setsession "admingroupid",data(4,0)
3 f" ^. @: T; r# K' f8 o
! M$ ]) ]: |" ~* F' }: f
end if
4 a' ~$ g( a1 C& P
* ?: X7 ~8 u5 [# ^$ I6 Y/ j, F
end if
% z1 n9 u4 B, _! m0 i
0 U" B* J: S4 T9 C: g
end if
$ Y7 v! f3 |5 |7 @9 j) f6 w. C; W
8 U1 Y M! U9 N- D& f% g7 v! W2 V
else
- y+ F! b( @+ T0 b
8 [" t9 y5 F* R3 d7 a2 t
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&"","")
, ~/ a1 D ?3 U- x. B( _8 k. ]8 x j- \
% ?# I4 J E9 z- K# J6 H# y
if ubound(data)<0 then
, X; P6 n' P% G3 \' x4 t+ W
* S% f& H5 I' J" d) F9 x( {
sdcms.go "login.asp?act=out"
5 z! G$ R$ ^3 U: I
9 G. g; d; O; G, R& S) q; x* b4 M
exit sub
- x$ u' p1 b b9 e, V$ C, Y) v' [
M2 `" A5 ^" a& k
else
. m7 S& u- |% g" B5 V
1 u w: c" _% ?
admin_page_lever=data(0,0)
. }0 v' S8 I2 ~9 j# R
# v5 X3 C0 x0 k! t
admin_cate_array=data(1,0)
- c# C* }: ?: D" q, c, R" N
9 q+ U2 ~7 `' s n5 R; [
admin_cate_lever=data(2,0)
& w7 {* W7 v! ^
3 B& j' r* Y/ M# W2 q* W
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
7 E+ T, E2 g2 U* _5 \
) X. u$ u+ @0 t$ a4 _
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
/ a- C( N% g& f2 p% _; g; t
5 i/ h2 ~ d7 J' b8 U# D5 r+ O
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
4 N5 S# z( J y) V( t6 a
# i+ {! {5 J; f$ i
if clng(admingroupid)<>0 then
/ c1 Z+ h+ x* m$ R' s! d3 Z4 G
( j( H3 q4 d4 \$ v) m6 n) e- S
admin_lever_where=" and menuid in("&admin_page_lever&")"
1 Y/ X% J1 t( P( C" p
" T- ]3 p% [" o9 K
end if
( ?8 J; r2 |6 A! X7 X4 h* c
. L- X! `$ T: B4 E
end if
9 C# e, X8 F! ]0 i
; e9 g. v' \! p4 i
end if
/ h( l6 w9 G: T( j/ S. P
+ J7 ]/ e( n4 v& K; }' r: o
end sub
$ q7 |' n& u [( S$ a1 L
漏洞证明:
' j6 m' a% G) _. B/ H' f. C
看看操作COOKIE的函数
; D7 h1 J& C& ~( u0 s
% e1 e9 w0 P- W6 l
public function loadcookie(t0)
/ p+ {: _ Y& w( K: G
& B" J7 ?7 d3 `$ M2 z s9 C
loadcookie=request.cookies(prefix&t0)
: `$ j2 D. F. W
$ ]" q' \. `, a6 S
end function
h b6 E6 f7 a6 y' \' o
' D/ [/ q8 g3 x& d+ s
public sub setcookie(byval t0,byval t1)
! B8 v: z" T/ R0 M! f
# Z9 s+ s% |' I7 L
response.cookies(prefix&t0)=t1
3 j2 \/ n/ h! K* V. M4 n- @8 o! f
* i* S6 V- R9 F6 C* E6 Y
end sub
) d1 F& K) G! C" V0 [
k1 F, {9 R! w1 g ^
prefix
5 k- |, z" x; ^5 F
$ ?* P! | `9 G) [& l7 U H6 _8 a
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
: |7 ^; ?0 \8 k$ ~& `' v
: d8 p# a# P% Y4 f% d% v: G0 z
dim prefix
Y, d" G* ]/ P- E) D! j& q6 j
7 j, D3 y2 j% p( q
prefix="1Jb8Ob"
; l; \: C( K+ u% u9 e! P, g/ T
: d0 w! X r8 e9 L& `
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
_, k8 R9 t0 p. l; N& K6 a* k
+ l4 s* s" W. x% K
sub out
# k# j" W2 A2 U; P' a; l
/ b# _- [2 d3 [% q+ {
sdcms.setsession "adminid",""
. `: Z5 I" E8 H2 {2 U
+ j% D4 I$ F. Y# k3 D0 e
sdcms.setsession "adminname",""
' `1 p2 d) |1 J9 L/ d
- g) D9 m) M- ~4 r4 `
sdcms.setsession "admingroupid",""
9 [% h3 K7 |3 Z
! n+ \6 }+ F5 D6 B. W1 ?
sdcms.setcookie "adminid",""
% \7 W/ S* x# X% c$ G. b8 n
! s/ Q1 _4 i+ V. T+ F1 ^
sdcms.setcookie "loginkey",""
K- o q: }5 @6 f- @: U* r. F4 ^$ S
$ }9 v% |( \$ ?. L- B
sdcms.setcookie "islogin",""
1 C( l* L+ x' X$ e0 J0 C |" z" b+ M
8 `3 } A$ d/ G+ ]% _
sdcms.go "login.asp"
* y5 Y# M! J5 v4 U/ v! I3 l- s* f
% N9 ^+ J7 W/ C9 Q% z+ d
end sub
$ P/ {& {# c8 ]( [5 w
$ ?; ]' D! s8 N |
5 l8 a6 S! T4 L( E8 Y) V$ r
利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
* ^" J" b1 k5 e8 A+ w/ F
修复方案:
Q9 N4 A# G6 V& V _* z9 l" I7 @% g
修改函数!
& l9 u: m7 S% t, A g2 D4 R
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2