中国网络渗透测试联盟

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

作者: admin    时间: 2013-7-26 12:42
标题: SDCMS后台绕过直接进入漏洞
要描述:
/ Y$ X; k( t4 D0 t  v, o  s$ D) ~% N3 W* c& R
SDCMS后台绕过直接进入:测试版本2.0 beta2 其他版本未测试! a" o" w1 j1 E2 p9 ^: X8 i8 }1 r
详细说明:- |# c( R2 ^7 g' I
Islogin //判断登录的方法
/ C' f7 q4 D) y0 t' F4 ^' X/ D4 S # F5 V; J7 C" V3 v
sub islogin()
8 ?' h6 D0 t+ o6 {6 o3 r4 g
7 |0 B) w/ \3 ~: U7 qif sdcms.strlen(adminid)=0 or sdcms.strlen(adminname)=0 then
7 N- `) M* I# d( a) ?$ A7 X
4 Q# w0 h2 [; @  X' w+ A# K3 odim t0,t1,t2 2 ^/ W/ J9 _  _4 f) |
& ~7 b  e. t5 e2 u$ @6 h2 F% |' O9 f
t0=sdcms.getint(sdcms.loadcookie("adminid"),0) loadcookie
. o* k# U) v6 b1 a, d. F  o5 ^9 O 2 r" @! X, ]$ H6 Q
t1=sdcms.loadcookie("islogin")6 z8 e$ a" D) P- F

& l! l9 U6 t9 ?# p6 Nt2=sdcms.loadcookie("loginkey")
# V- ?! W, f# {6 E
: }2 w3 @- V' Yif sdcms.strlen(t0)=0 or sdcms.strlen(t1)=0 or sdcms.strlen(t2)<>50 then //这里判断很坑爹 sdcms.strlen(t2)<>50 loginkey 没有任何要求 只需要输入50个即可往下执行: U8 H$ }% G" T6 [( P1 u

3 p+ `& [7 `$ E7 ]+ O//) K. i& g- p% p/ {6 @9 u
( k2 [3 U! N0 a6 l9 R, x7 I
sdcms.go "login.asp?act=out"
6 k8 a4 N, L' {0 i' ^/ ^ $ ~7 s7 d4 L0 Q
exit sub
! e. H% h, {/ F& C6 j
2 I. v8 o# X# V( U+ U1 N+ _$ v5 Zelse
- \9 i7 J" P' k- c
+ |, \" F$ W0 N3 U( V! bdim data6 f; ~3 w0 ]' p5 u( |
- R3 j7 ~/ S, i" C8 k0 M
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可控
" K7 l, n) m1 i0 f; Q* a- {+ j
; v; r4 u$ ^4 X% W) Sif ubound(data)<0 then
9 G! g; F7 _. m 1 m; e2 o( G2 L% b  n+ z; j
sdcms.go "login.asp?act=out"* |; r! q, n: j7 R6 w
- I3 T/ K% }" ^1 H# W' y
exit sub
2 W/ |! S. R" H, D - ^% N* H* z% a2 ^
else
6 C( S; Q, d% x6 d0 o
# x7 {. O. l* q& k* [% K& Dif instr(data(1,0)&data(2,0),sdcms.decrypt(t1,t2))<0 or data(3,0)=0 then7 M6 W6 n; L/ b8 d8 r

6 J; u; j  @1 [) psdcms.go "login.asp?act=out"
( [( l, H& ?- g0 O1 R
1 h/ I% @( |. H8 Zexit sub
& H( T% o' x1 s) i 6 K7 g# N* {3 l4 {4 R
else
) |1 T0 z# |) O4 N0 w6 c % P- M- X. |1 ~. ]) Z
adminid=data(0,0)
/ D7 i$ r6 Y5 q; k5 d" T5 s  H ! A4 K  S) Z2 D8 x! \) r' F
adminname=data(1,0)  e. U- G2 r$ P9 K4 Q6 J

* n/ O' p6 p& |# q4 zadmin_page_lever=data(5,0)
; K6 o% k; H: ^' E1 a; p" F; n
& [" v+ M7 |$ ]6 uadmin_cate_array=data(6,0)  N  p0 \8 s' E- B

3 `  Y- v8 s! s) h" g9 J# yadmin_cate_lever=data(7,0)9 ?4 J) [! t/ n  i

: _# \+ D% J0 O. jif sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
8 F- e3 E9 e; V
9 K( `4 P2 c  r+ `if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0
8 p+ l- V$ @7 r. X/ O/ Z4 F6 Q
/ _/ f) L/ _$ m5 J/ cif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0: R6 \8 }/ ]/ Z. B* R1 [& `# G

& ~8 m5 t% M; M2 l2 ~+ ~if clng(admingroupid)<>0 then
' K& p6 q+ F% @2 s 1 h  c2 Y% ?+ @! w2 j# @
admin_lever_where=" and menuid in("&admin_page_lever&")"
* m7 n" |( ]6 y
2 @( x. r7 o" u2 {1 [6 R  ^end if) C9 j  B2 S  }$ Z0 u0 E4 W) c
1 s" [3 E$ G1 P  `8 {# F
sdcms.setsession "adminid",adminid
2 ^. P# H( h1 h* ^ ( y2 e4 ?5 U, L+ o! Q' D- A, |
sdcms.setsession "adminname",adminname
8 r9 u  n! y) X3 M7 B
! O# Z" |2 _/ w, }8 B8 P/ Lsdcms.setsession "admingroupid",data(4,0)
( K) L$ ?1 M" ~. V: ~: b. @# L 1 L0 @/ G0 ]" E8 j5 O
end if
0 n4 ]. W7 ?2 Q- E$ R/ S
, S  f, @( J  v& L( Send if
' B% n! _  S9 p) y! A+ F2 r) E
( m/ P+ |0 b4 m# a5 Rend if
$ V% ^. B$ W8 M) n  w; g
0 o1 k+ `+ z- @- i; aelse" H% K/ q( \0 e8 U
; Y6 I, I. W5 |/ N
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&"","")( u, \/ y$ V, m1 h: {6 e9 a6 o
: l' O) |3 X& [- j- D
if ubound(data)<0 then
9 n2 m5 l2 K8 D8 U! `6 a  o6 |7 `
. v) L& X, s3 m6 a1 K2 I- \sdcms.go "login.asp?act=out"8 |$ u7 O) N0 J# A) i- v

& m' W: @$ v4 g- wexit sub
! E  @3 D1 {9 l; B: Y " b7 C, j5 p3 ?" c* s) e' G
else$ \8 y1 q* h- u7 M  W# |
- `+ [1 x' w/ S2 |9 i" O9 B) m
admin_page_lever=data(0,0), c0 ?  k9 I9 ], ?" c' c& h
0 N% f8 j) D$ F* f5 o+ ?
admin_cate_array=data(1,0)" |7 L* R+ r: P2 Y) t$ F
/ t2 S, X: f) n- c0 y+ B
admin_cate_lever=data(2,0)
7 u2 `% b% m! E! B1 J+ G - f3 O  c6 i% ~. p# w8 X
if sdcms.strlen(admin_page_lever)=0 then admin_page_lever=0
" m: B0 J% ?/ p! `$ I- ^# c
; v4 R( Z' r. e# l5 M, y' r+ ~7 `if sdcms.strlen(admin_cate_array)=0 then admin_cate_array=0$ K$ \% D% ^4 ]% k; @- S5 h1 U- Z; b

4 _: U% t2 I- g7 A3 Oif sdcms.strlen(admin_cate_lever)=0 then admin_cate_lever=0$ M* w3 o9 @+ s# J

3 g) i! g  ^0 \7 m! \+ N' Tif clng(admingroupid)<>0 then
2 E5 W3 E9 m9 [2 i5 V
/ ^, b7 ?" V3 ^admin_lever_where=" and menuid in("&admin_page_lever&")"4 `$ D$ @7 @3 o% u) a  M

4 b. o" U* h/ Y! [- w/ |0 Zend if% @/ j& S0 n4 }. f
/ C! l5 L" k7 M6 ~
end if- I* y# O+ ^) m/ ]2 B

7 w" a, g8 p! G" a( Aend if
3 v3 d& V# w' _- T
3 h9 d5 E( O5 O" f: wend sub5 R( j9 d- y3 Z9 B
漏洞证明:* A& g4 T! B7 r5 l8 c& L
看看操作COOKIE的函数8 N+ T+ ~4 e" q1 v4 l
$ X9 y# X' [4 ~9 r6 o
public function loadcookie(t0)6 R* X2 k/ w; N- [" i- Q! h4 V, s

8 u0 b9 ~* |7 o2 Cloadcookie=request.cookies(prefix&t0)
% y# H" z  p" s# F, N- s3 X; e. ] 3 u! t( ?2 f* z, N3 D/ y# @# j
end function
$ I* ]9 P: X0 K+ f 6 f+ C. S' Z& Z7 ?# X2 W
public sub setcookie(byval t0,byval t1): m' c8 B: Q4 R5 O5 b1 `
1 B0 U$ m3 O8 y+ ^4 |0 |
response.cookies(prefix&t0)=t13 Q0 g8 o8 w! ~2 \

# ^* t( v, q& V# ?) C/ m. _- |end sub
- g& |* g4 A" n. [/ ?, [; F
5 m7 c! u. x$ o  H2 k: i" aprefix) C- s$ B5 D" Q- v3 g; x7 H
6 Q$ G# \& X: [
'变量前缀,如一个空间下多次使用本程序的话,请每个程序配置不同的值6 h% F+ U1 |; }0 R1 Y
' m+ W5 z1 ~" ^" {
dim prefix8 K! Y5 L: X# J! v0 B1 S

+ c  C3 E0 ~4 ~5 c: R! Q2 @prefix="1Jb8Ob"' J3 i6 K3 C& |" Y; D0 s4 I

! j; s- A% V0 E4 a* n'这个值访问一下admin/login.asp?act=out 便可得到 在COOKIE里
6 R) h+ i, W6 _0 f: _. Q/ O2 C 1 z  ]9 Z: P9 t2 `  b
sub out) `9 \; W- c9 w! ^( k5 q

2 y' V( k4 h" P" N. }# @+ d  psdcms.setsession "adminid",""6 H/ h6 O; V1 r' e% h' r

7 e/ r0 |) g* Hsdcms.setsession "adminname",""
0 f3 i0 R& N( ?; J- l/ h
0 B; o1 g4 Y* c$ A5 M4 D/ dsdcms.setsession "admingroupid",""
$ u2 |- j! ?1 z- J4 s% x' v
% e3 t' U! ]4 K+ r# B+ {. @sdcms.setcookie "adminid",""
* O! G5 h* g" A* u( ~, S) K% x
& P9 R, P6 q% P8 E9 z0 Bsdcms.setcookie "loginkey",""
- A0 ^4 H  |+ d0 x
! x7 n$ y  G) ksdcms.setcookie "islogin",""" ~, R+ P: [* L; V% q; c
4 F% w5 j9 n  W- r& A( D/ D( t6 E
sdcms.go "login.asp": b4 z9 j$ ]6 }- {$ _5 |; S5 c

8 c: n) \8 O+ R6 ]$ I- \end sub* b. }# n- F2 d% P4 \
2 }5 O: o6 S3 P2 |

/ P9 Y7 _* K( C, O) q! g利用方法:设置cookie prefixloginkey 50个字符 prefixislogin 随意 循环下prefixadminid 即可 默认1 然后访问后台,就可以了!
& d, ~4 Y6 a$ j1 w1 u修复方案:
3 _2 T$ V, n- p% a修改函数!
* Z7 p6 T9 b. E7 x. X6 o




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