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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
要描述:
5 P$ A9 q9 {+ b& x8 W; H. Y4 s
! h( z& k4 S" w% B9 DSDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
1 ~6 b6 @) r/ \5 u详细说明:6 k8 @# K/ \  c& i" x7 N
Islogin //判断登录的方法9 F# l. ~7 @6 d5 L8 }  M) v
1 K6 a) U! |. G+ k2 |: D
sub islogin()
! o5 @7 v4 S3 r* R! Y
, F0 W! Y3 h* Y1 k$ `2 H. ?if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then ( O& c4 g# S" ^/ d: _4 ^  _0 z5 E

* a" Z! F0 S2 P/ ?6 ddim t0,t1,t2 - ?, n: \# u" @8 F) k/ I0 J
9 {& E) a4 w+ y6 l! g
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
1 p* H3 z$ ~9 J6 N8 W. ?! n % F. l$ Q: d, G* T# u
t1=sdcms.loadcookie("islogin")
  e  G  H1 e' h# F( e+ h2 b( O
3 M; b" S1 s$ O/ \) Gt2=sdcms.loadcookie("loginkey")0 w7 H5 T$ }: N* `
5 _6 C9 v$ T$ _0 j7 E1 d! D6 u
if sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行& ~  [) H% t$ ]. e7 H, {& z

9 }0 ]7 g, ~9 X3 m  q. ~& S  g//
9 Q6 \0 T; o- Z% k' k2 o/ P
( t3 X. K+ s5 I* T" ~sdcms.go "login.asp?act=out"
8 _0 V4 `" s7 \/ r- |. Z
# A8 K& p1 W6 G( {4 Uexit sub
+ P) m7 ~6 U! A% D2 c7 h 9 ?8 `+ j5 J+ x
else- v$ F" u& z! U* B% e% q  g* H

$ X1 ^7 k+ ~; X% cdim data
# Y% L/ Q3 t0 B8 I$ N; a! K 9 O& F4 A3 P0 E
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可控) B% Q3 O7 k3 _7 e

( i$ o8 }5 v' Q6 u: T: j& ?, bif ubound(data)<0 then
0 ~1 N8 M7 O: c# l& |( k
' g" ^% _$ J8 M. `, ssdcms.go "login.asp?act=out"/ n/ ~4 m6 r* _+ ?# s* z

7 A4 X' W# Y2 v) g! Qexit sub
1 l) Y1 |  }7 Q( y
& J7 A  T- j! Q9 h& O0 relse
. o( G$ H9 c5 w. j4 Y$ R3 ]- j* a * v' l3 k0 g4 _
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then/ p/ h7 n8 Z9 @- e0 r
: t% {; w# W7 z' R
sdcms.go "login.asp?act=out"
- E( k% j' P1 r8 o# S0 I
. Z  M! N7 j2 M+ e  @2 ^- Vexit sub" [# F2 m& g% J( A* @

, I# x; D" w9 belse
8 P% n6 V' [9 e* g/ B$ m  `/ m. ?
- ~! r( \  B( t: j* |adminid=data(0,0)3 [; Z& E% i8 Z
2 y5 r8 {2 j2 l0 T" @: N
adminname=data(1,0)# Q+ n/ {( T+ h2 }& `
( |' O" P' y4 {$ q
admin_page_lever=data(5,0)
4 J  o( k6 Q9 K4 c) \) K* `( o
1 ?0 c' v, a& H# sadmin_cate_array=data(6,0)
6 c* e3 p  |, x/ O; w9 y3 z7 J! C 9 g+ g% k1 m! K, l! V* b- |
admin_cate_lever=data(7,0)3 l" s  q8 D' E- `; Z5 M, R
" T/ A9 q; t1 S1 a+ u
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0, ~% n0 o$ s( N, J& A3 s

, G3 ~$ r; [  q# s7 E. Mif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
7 o* m8 }1 B% Z# e + q9 V( l0 ~5 _/ s/ \, M
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
/ ]6 L  u3 b2 w
6 ^+ m6 X: j$ u$ \% aif clng(admingroupid)<>0 then9 p& d$ |  H: i, a
! H  L" \5 B6 Z: C
admin_lever_where=" and menuid in("&admin_page_lever&")"
* b* Z0 A$ b* b5 v. N# K/ A1 x! ] 1 v% a/ e3 T) D. [2 S
end if
2 X0 Q7 D& h/ L4 l4 E 5 w4 M( m( [$ J
sdcms.setsession "adminid",adminid
# R6 I7 e) q# M+ d' H, M: V" n 1 c! R. R8 T# ]) `; x3 `9 Q' ~  t
sdcms.setsession "adminname",adminname5 y( `; F' M" F/ S+ R/ h+ V
/ ^1 [0 e  ]: N+ }7 t! B
sdcms.setsession "admingroupid",data(4,0)" V' }# k. F3 q3 Q1 j7 m/ O5 r
5 I/ F3 \! h  E1 C
end if5 f" v- Z" |6 e

! K7 ~, Z7 U6 k5 cend if- G' J% L, J7 H2 H' u

4 w$ R" y3 g5 [end if; S% i+ d0 [" g
& Y$ n0 _1 q( `# g2 e6 ]  c
else
7 ^* u( i1 c( B& M1 q$ ^ 9 |: |! h0 ~& Q$ 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&"","")
( c$ \4 v0 `+ s- Z1 U- K
! H, v- r! m3 G2 v% p5 oif ubound(data)<0 then
" G& V% i" ~% k3 z0 b9 F& J
+ \, }8 x9 `* w5 Zsdcms.go "login.asp?act=out"# H+ c+ v& A3 Q2 T. [* F% o
6 @1 W7 I6 Y9 A' t) U
exit sub# a( |8 d3 j6 h5 X! f
8 n; K! k" d3 V
else
, Z# B& W, k) v  r1 x* i, W 1 c* O" ~& q* e/ Q7 {
admin_page_lever=data(0,0)
$ }9 ?7 j4 [' c* _# X! M
+ w0 H6 p- W; v0 r* I, Y. G8 Nadmin_cate_array=data(1,0)
! ]2 f9 m) P- D4 e4 a3 v! f# G8 N , b9 {* J1 V8 Y" n5 `% O" Z; F& N- \4 W
admin_cate_lever=data(2,0)
/ I: K  [$ ~* ` ( c$ a/ \4 `6 A0 y
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
; f8 f6 B: [  V+ T * }9 i5 m! o" s2 s/ z
if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
, S& ^" f/ X2 r0 G7 Q7 K1 S) {
) U: p% }! C2 Sif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0& @2 ?9 ?; L$ C
0 b) o/ ?( ^& V5 P% B0 w) M
if clng(admingroupid)<>0 then( p/ a( g9 x! m* H- J
6 X+ f% s# g0 @# E) Y& d6 ?) A* x
admin_lever_where=" and menuid in("&admin_page_lever&")"5 H6 c& [$ S0 \

* G: J) u5 m( F- I4 xend if
3 m. e0 M, i- U9 o% a5 Q* f $ _! Z9 {' q  c: P% i' i1 Y8 ?( P
end if5 }/ i* v) B3 J

* v1 D( f% j6 x$ ?+ }) I, s* Mend if
8 }) C4 _3 ?; z' R2 }! b- ]
) O8 j/ y' ^5 g9 e$ U7 U% }end sub
9 N+ D9 P# @3 D6 Y( H% U. c) g2 m9 e漏洞证明:
2 q, H, @3 [. ^看看操作COOKIE的函数' }: w# L( E% X* y- r' Y) s* p
3 o; K; D8 }+ {3 E2 g' z: E- m# i
public function loadcookie(t0)' M. n+ D2 q9 b9 c" H
) ~) a# w* R8 s
loadcookie=request.cookies(prefix&t0)6 N6 H9 w" ]$ L+ M$ P, x6 s, U

$ N2 _$ D6 {8 a* gend function1 a  v* V7 y$ Q% o
4 }& U# P$ ~0 r, H0 _$ [+ }
public sub setcookie(byval t0,byval t1)
, U0 C+ n* t* g2 J5 e, T. f
! e0 Z! m3 H' h3 ]6 D( j; Q8 P; Iresponse.cookies(prefix&t0)=t1: [" d; j0 R0 e3 A$ p% r5 l

* m, R8 n6 h$ B; Jend sub" I% m; P: A) k7 K7 n# E& o! N
+ f3 Q* ?. y, J6 A
prefix
6 {$ D. h3 N* q# v4 w
6 f7 p; @/ ?  w7 g% V! j  B'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
, N! i' P' `+ c! e" W/ I  | - \7 w  M% Q9 D! f
dim prefix" E. M% }0 ^0 g( y/ e0 @

( A& x) B0 U- [5 W: q; M5 Oprefix="1Jb8Ob"# A# u# H0 s7 A( d  v1 C

! k+ A& V6 q3 p# P$ B, h  T$ _5 K9 f'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
: _: X* B. h, ?# E! M7 D3 H
7 X0 J' h3 ]; u7 F# w9 msub out
$ y* v2 K7 |* N- H7 m " z" M( {: G: F. y& T9 D
sdcms.setsession "adminid",""8 o: c+ x) |2 |/ I% w; D" j" }
4 t& o! Q2 D( b
sdcms.setsession "adminname",""
1 q/ f+ B; ~( F. I
$ u& j* k" j$ O; n. c5 z% C( dsdcms.setsession "admingroupid",""8 b& a: E2 Y- o

6 A* w/ f9 r$ n! bsdcms.setcookie "adminid",""; e0 _9 ^7 l6 Y9 [7 t0 {% {# L: ]) I
, q/ P8 y7 k5 }; n" X% G; g+ I
sdcms.setcookie "loginkey",""
! G7 s) J' U0 ^4 c/ z- D
  x. d9 l$ m9 a6 s3 Q3 ]# [- zsdcms.setcookie "islogin",""
" w9 z4 O' {1 E8 I1 A # s/ Z8 }4 V3 c4 O3 N
sdcms.go "login.asp"
, C& g. X4 G1 j* u  k; J. o  R& y# R
; P' L; C3 o* y) Y! P: B. Nend sub' o5 O, d% J1 U6 [6 X5 R6 }  m
$ `4 i  ~# V8 R! Y- U

. b, C! H" H' d0 k+ x  a3 K利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
; K( V5 B  ?8 V$ R3 M修复方案:$ u  l4 v' R7 Z' l/ @; w1 R. Z+ C- m
修改函数!
" }6 z! ^' Z: G( D+ K) D) G
回复

使用道具 举报

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

本版积分规则

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