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

SDCMS后台绕过直接进入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 12:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要描述:: H+ |2 C, |' d8 i% A$ K
" j  q8 l; H+ }9 Q6 ~2 o* u) p
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试
- Q9 i) }, b6 Y, w2 W( X$ l详细说明:3 v9 c3 r+ j( k4 L6 F1 J
Islogin //判断登录的方法3 S$ @- t1 f$ ^" `8 U

. |% s0 H' v5 [! b9 A- r5 psub islogin()
+ Q+ e8 k% ~7 o& g2 U2 ] ; L# s  R( ~: H. D' k2 q3 I
if sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then . d7 x( t/ l2 }8 e
9 `; l" M/ \; y" p
dim t0,t1,t2
$ Q% w  |. d5 K' j5 @& [9 z7 A% E * B- X+ C9 ~  E" t9 V/ M2 Y* ?
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
7 M- H1 m2 \, L
6 m& a7 I1 s7 F# it1=sdcms.loadcookie("islogin")5 d: U" h, G" B5 E: U1 \

( Q3 q& ?- F5 {7 \t2=sdcms.loadcookie("loginkey")( Y8 F) ]0 W- g# ?, _/ O

0 Y- G" Z( i3 O3 q% P' hif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行# a, l* g) T0 F4 C" y
: u, K4 M# j) ^. q
//3 D8 y) F; }. T( V6 y7 q1 A$ |* B

% G7 P. A- T2 t& Ssdcms.go "login.asp?act=out"
9 A- m* O0 ^7 G8 m   s6 r1 R' ?) a- {
exit sub
: h- N9 [+ m( u- v ! r. j0 y, P, v+ n* C( u
else
: v( T! L, y& i   {( W0 Q1 G: _6 O$ _
dim data9 @) |; z; K6 P  D# v
3 i% m+ `7 S( {' X
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可控. \! d5 `& V/ y3 D' ^
2 e, f. _$ v; |" d! o
if ubound(data)<0 then
4 |" d6 y% a( e7 t: ] 9 C& G# ]0 {; y. m* ~
sdcms.go "login.asp?act=out"
; e4 m! T# [  L & L7 G* C6 D, a2 u! S4 H9 w9 B
exit sub: J) p: w% L. z
' E; J3 Z3 \3 D/ I0 R) P5 R5 S
else5 @6 n0 z  E3 T' n( k6 L
9 U& F  |/ ~: K* Y5 A
if instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then
6 U( Q4 R* H: C( {5 h! p . N5 v" _2 |  R% s" y8 {4 i
sdcms.go "login.asp?act=out"2 y5 P: @7 f9 R0 r. f
* G- G2 L1 }; J6 R6 X; D
exit sub
- |0 r$ c8 v, ?! g8 \2 W* { # V) ?* O$ c5 [% f4 U2 |( z
else0 T' b* N2 O+ B9 a3 i( {/ Q) R( h" H

+ I+ g, @1 o& L0 radminid=data(0,0)# ^  H' j) q8 E" K4 N5 b# i
% D, `, D0 u( n' u2 x3 Z* L
adminname=data(1,0)
& \# u; n% `4 {' }
+ n* P1 q# Y# \1 cadmin_page_lever=data(5,0)- Q! k- e- t/ j1 d* ?6 G* D

6 t7 p- O; g" ]3 I7 H+ P& S' Qadmin_cate_array=data(6,0)( g) ^% [/ i# W
+ f2 S1 T) }! V2 |
admin_cate_lever=data(7,0), ~- R# q: p% F! q6 H& @) y

4 F& S# r; i. K1 \2 [if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
# B5 K  u* A$ C1 K' [4 v' ?
5 n( _/ a/ L3 V/ D. zif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
7 |: T- V) ]4 F3 z! O 4 F0 w. D: ^7 G; ~0 s& l% d3 T2 O0 n
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0
( n# J9 S* p) I6 e( E
8 S4 v6 j0 ?/ k1 B  Bif clng(admingroupid)<>0 then+ w% r4 `% K4 e, @# C
' ~" v9 Z/ c$ y9 C0 ~! N, Y9 Q8 v
admin_lever_where=" and menuid in("&admin_page_lever&")"
' }/ t4 k( i) x - i% ^; Y* j1 T% L3 e' L
end if
: n7 `" g# G5 A4 r  s' O , t0 Q1 n( Z% B- c3 B
sdcms.setsession "adminid",adminid
- q" R" H9 ]) [/ g/ J4 {5 M; G
8 c1 L+ V4 H$ u/ H+ }sdcms.setsession "adminname",adminname
. ~) i& R: k/ k( R" P 9 K% z# J5 J0 {& T8 }
sdcms.setsession "admingroupid",data(4,0)! I( s) l2 R7 `$ c
2 k2 A# [  ~- E) p. Z' o7 |
end if
5 s; n% V; x& d; D6 V* {
3 _) T% d6 M  D% wend if
# ?! y' `: m4 s* f3 f' a, r: [ 6 w( h  h; m! }" a: ~3 k
end if
& n/ O) Q7 K# J& X8 d; t & z( v. l* c! s: `
else; D5 x8 K$ W0 B! n1 x- E/ S
6 m$ @% F  U" |
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&"","")* Y- z9 s9 b( u4 W

4 `* G" U8 V7 Y$ M, d% {  m2 Mif ubound(data)<0 then  q  O8 I) F* D+ O7 ~5 |' T
  k4 l4 g& p$ F/ e5 C) l, z0 r8 h
sdcms.go "login.asp?act=out"( d) `/ d3 f1 P0 p# H9 b
( e8 X% `7 k( r1 F
exit sub3 H  I! c9 q: ^2 s( Q

; f5 d% R  R# G4 a+ uelse
! \$ v9 _( ?$ w3 u: N
" A: [7 M6 L* Z4 ^& kadmin_page_lever=data(0,0)" f, ~7 r$ \4 d$ |7 e

- N9 ^! }# j# e2 V( _. fadmin_cate_array=data(1,0), B7 g! B4 R- e7 ~
8 g+ L+ B0 n/ O" {3 z$ \
admin_cate_lever=data(2,0)3 Z3 F* a0 i8 r9 D0 y+ D. M6 [8 V

( G: N1 p' E& n8 e! Hif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0) |4 f5 B& v1 C- N( k0 O; c

4 P) x' E1 W! G! I+ x0 F/ Fif sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0. \# x( M8 i+ n
0 x' G3 Y5 }- N; w/ _! o! [* z- f( W
if sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0( J9 q) o% a7 |

. d5 t) h  d, X2 Rif clng(admingroupid)<>0 then7 \* X# V1 b' U+ @) @

- p* a8 x& e5 M$ aadmin_lever_where=" and menuid in("&admin_page_lever&")"4 K6 \  M+ }; W+ b" h  p5 `) i

0 V9 N# L2 ^/ D' Q! _9 H: ~end if1 ^# q& t3 ^( j' w

* r, `. K2 o# \) m3 R' P6 Iend if& X; e5 Q5 K! ]) a

( p! n9 z% A! s$ q8 kend if
/ A5 d! O0 \) C5 s( t & O7 N: A* N4 ~' T7 M
end sub3 P5 ~1 _% l8 q+ |* f! ]
漏洞证明:4 l- i4 ]4 l+ y. J4 }
看看操作COOKIE的函数" _. L; y, w5 H' l. Z$ f$ v8 t

7 R0 n" @9 a6 wpublic function loadcookie(t0)
5 C2 ^3 x1 A) C3 v% I
) o; P4 ?, n/ j" N9 }# xloadcookie=request.cookies(prefix&t0)+ J& J  L% C& j9 \- d
: U/ {, ]8 n$ L5 x
end function6 c' [) k6 ]2 ~  K  A

/ b& P! h8 O' S3 i- e7 ~1 Npublic sub setcookie(byval t0,byval t1)
4 _$ F1 ~5 W) g) ]8 }3 J 7 l% g3 P& r3 D! y, d( u4 h$ l
response.cookies(prefix&t0)=t13 M5 J0 X- @3 K+ S, R  h

* O9 V' e5 C7 Y9 a7 z" A0 _7 t+ Vend sub
2 v: _5 M' a% b+ P/ u2 o4 _6 X 5 A) [9 D$ R' `1 F/ n1 R
prefix
' Z& S2 g( R( {" T/ s/ g / X" j( q% Q' e
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值
. F8 M; N7 y, V0 T% `0 C7 F
8 D. i8 S( T7 r% R, n$ H& ?dim prefix- r( j. C1 M# ?3 ?9 U" K

5 I0 U0 I' \$ ?5 T4 mprefix="1Jb8Ob"
) Q# J+ [5 X* w7 o & x. N; {8 l6 o% `% `; S
'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
- v% B5 b) p  m, u) y* s) j . f6 C* Y% ?& F3 C( ?
sub out
* u/ t# P5 g. J 6 [5 g2 l% J# l) ?9 v# E
sdcms.setsession "adminid",""  s! M9 f+ z4 t! `+ [! {

; e+ P9 S8 i9 Lsdcms.setsession "adminname","". h* L# Y4 b" B1 G
- ~+ n) d5 c$ U+ r9 w5 O: x5 q0 a
sdcms.setsession "admingroupid",""- ?2 ^6 N- r! l
8 q1 k7 `$ D$ h
sdcms.setcookie "adminid",""
$ t# ~1 [5 X' ]+ z0 ?$ ^ ) E* K3 v" |7 _# V' F& n
sdcms.setcookie "loginkey",""% K4 _" g! |" Z+ O1 o

! Y, b& S- }: y9 w  w8 g- r1 jsdcms.setcookie "islogin",""
3 T+ y% V8 }  |5 E; {
7 p4 q  k! P7 b' ysdcms.go "login.asp"- z/ D- C/ t! q1 D
: y) o: ~( }" O" v1 j$ {9 Q
end sub
1 _! J9 L4 V; C) v/ K7 F1 j
$ \0 y1 A: D- j
$ T7 g2 u. m, E% h+ G9 L$ f利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
- r: R4 \2 `1 ?* H! L# B修复方案:7 s5 C. F0 X' z+ R/ n6 k4 D
修改函数!
8 U( {7 ?0 `: r  q
回复

使用道具 举报

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

本版积分规则

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