尽管软件工程师们不断设法提升服务器的安全防护能力,但系统管理员的专业技能水平往往参差不齐,安全意识也时常出现松懈,这为黑客留下了可乘之机。每一条入侵路径背后,都隐藏着入侵者独到的攻击思路。关于网站服务器入侵的资料,市面上虽然流传不少,但真正付诸实践时,很多方法会因为实际环境不同而失效。每个网站都有自己独特的配置与漏洞,必须区别对待。例如,深圳的网络线路比北京稳定得多,字典穷举攻击的成功率更高,深圳的用户可以借助这一优势在线破解口令;而北京的用户则可能更需要优先考虑其他方法。针对这些五花八门的手段,这里参考黑客界知名人物Hackalot先生的一篇文章,梳理一下入侵网站的基本流程。
分析一下主页被黑的事件不难发现:入侵者最常攻击的目标是Web服务器和FTP服务器——这两条路径相对更容易突破。假设读者对UNIX系统和Web服务器的知识还不够熟悉,下面这份步骤指南或许能提供帮助。
一、了解要入侵的系统
目前网络上用作服务器的操作系统以UNIX和Linux为主流。要入侵这些系统,首先需要对其有所了解。大部分在DOS下使用的指令,在UNIX和Linux上都有对应的版本(早期DOS的开发借鉴了UNIX的不少设计)。下面列出在使用SHELL账号时最常用的一些指令及其DOS对应关系:
- HELP = HELP
- CP = COPY
- MV = MOVE
- LS = DIR
- RM = DEL
- CD = CD
想知道还有谁在系统上?可以键入WHO指令。想看某位用户的资料?可以用FINGER。这些基本的UNIX指令,能让你初步了解当前系统的运行状态。
二、破解密码
在UNIX系统中,所有用户的密码都存放在一个文件里,这个文件在/etc目录下,名字叫passwd。如果以为拿到这个文件,直接用里面的密码登录就行,那就大错特错了。UNIX和Linux下的passwd文件非常特殊:里面所有账号的密码都经过了重新编译(也就是DES加密),而且是单向加密(one-way encrypted),也就是说,没有办法直接反编译回去。
不过,还是有办法把原始密码提取出来的。这里推荐一个破解工具——Cracker Jack。它使用字典文件进行穷举:先把字典文件里的每一个词都编译一遍,然后拿编译后的结果与密码文件中的内容对比。一旦匹配成功,就报告对应的原始密码。这个工具巧妙地绕过了密码无法反编译的限制,通过比较的方式获得密码。基于这种原理的工具还有很多,读者可以自行搜索了解。
三、获得密码文件
这是最困难的一步。管理员既然手握密码文件,当然不会大大方方地放在那里等人来拿。入侵者必须找到在不进入系统的情况下拿到密码文件的方法。这里介绍两种途径,不妨试试,说不定能奏效。
方法一:如果FTP服务的/etc目录没有被锁住,入侵者可以用FTP客户端程序,用匿名账号(anonymous)登录,然后检查一下/etc/passwd是否为匿名用户设置了可读取权限。如果可以,立刻备份下来,然后用软件解码。
方法二:有些系统中,/cgi-bin目录下会有一个叫PHF的文件。如果目标服务器上有这个文件,事情就方便多了。PHF允许使用者对网站系统里的文件进行远端读取。利用这个特性,用户可以直接用浏览器抓取passwd文件。只要在浏览器地址栏里输入:https://xxx.xxx.xxx/cgi-bin/phf?Qalias=x/bin/cat /etc/passwd(其中xxx.xxx.xxx是要入侵的网站名)。
如果这两种方法都行不通,那就得另想办法了。有时候,入侵者找到的密码文件第二部分是X、!或*,这说明密码文件已经被锁死——这是管理员加强安全的手段之一。但完全把密码文件藏起来的情况并不多见。通常系统中会有未经锁死的密码文件备份,比如在/etc/shadow目录或类似的位置,入侵者可以尝试寻找。
四、建立自己的shell账号
经过前面两步,终于拿到了密码文件并破解出了密码。现在可以运行TELNET程序,登录主机了。连上服务器后,服务器会显示自己的信息——通常是UNIX、Linux、AIX、IRIX、Ultrix、BSD,甚至DOS和VAX/VMS。然后屏幕上出现Login提示符,键入破解得到的账号和密码即可登录系统。此时,入侵者就可以利用自己的UNIX知识,做想做的事了。
最后,来分析一份真实的密码文件,内容如下:
root:1234aaab:0:1:Operator:/:/bin/csh
nobody:*:12345:12345::/:
daemon:*:1:1::/:
sys:*:2:2::/:/bin/csh
sun:123456hhh:0:1:Operator:/:/bin/csh
bin:*:3:3::/bin:
uucp:*:4:8::/var/spool/uucppublic:
news:*:6:6::/var/spool/news:/bin/csh
audit:*:9:9::/etc/security/audit:/bin/csh
sync::1:1::/:/bin/sync
sysdiag:*:0:1:Old System Diagnostic:/usr/diag/sysdiag:/usr/diag/sysdiag/sysdiag
sundiag:*:0:1:System Diagnostic:/usr/diag/sundiag:/usr/diag/sundiag/sundiag
tom:456lll45uu:100:20::/home/tom:/bin/csh
john:456fff76Sl:101:20:john:/home/john:/bin/csh
henry:AusTs45Yus:102:20:henry:/home/henry:/bin/csh
harry:SyduSrd5sY:103:20:harry:/home/harry:/bin/csh
steven:GEs45Yds5Ry:104:20:steven:/home/steven:/bin/csh
::0:0:::
可以看到,每行以冒号分隔成多个字段。以tom:456lll45uu:100:20::/home/tom:/bin/csh为例:
- User Name: tom
- Password: 456lll45uu
- User No: 100
- Group No: 20
- Real Name: (空)
- Home Dir: /home/tom
- Shell: /bin/csh
细心的话会发现,nobody、daemon、sys、bin、uucp、news、audit、sysdiag、sundiag等账号的密码栏位都是*,说明这些账号的密码已被锁死,无法直接利用。
值得注意的是,很多系统在首次安装后,会存在一些缺省账号和密码,这给投机取巧的黑客提供了便利。下面列出一些UNIX下常见的缺省账号和密码:
| ACCOUNT | PASSWORD |
|---|---|
| root | root |
| sys | sys / system / bin |
| bin | sys / bin |
| mountfsys | mountfsys |
| adm | adm |
| uucp | uucp |
| nuucp | anon |
| anon | anon |
| user | user |
| games | games |
| install | install |
| reboot | (供“command login”使用) |
| demo | demo |
| umountfsys | umountfsys |
| sync | sync |
| admin | admin |
| guest | guest |
| daemon | daemon |
其中,root、mountfsys、umountfsys、install(有时sync也是)都是root级别的账号,拥有系统管理员的权限。
最后,有必要介绍一下UNIX的日志文件。很多入侵者不希望被追踪,那么该怎么做呢?系统管理员主要依靠系统的LOG(日志文件)来记录入侵痕迹和入侵者的IP等信息。当然,也有管理员使用第三方工具来记录,这里主要讲的是通用UNIX系统里记录入侵踪迹的文件。
不同版本的UNIX,日志文件存放位置略有不同,但大多数都集中在以下目录:
- /usr/adm(早期版本)
- /var/adm(新一点版本)
- /var/log(Solaris、Linux BSD、Free BSD等)
- /etc(大多数UNIX版本把utmp放在此处,一些也把wtmp放在这里,也是syslog.conf的位置)
下面列举一些常见日志文件的功能(具体文件因系统而异):
- acct 或 pacct:记录每个用户使用的命令记录。
- access_log:主要用在NCSA HTTPD服务器上,记录哪些站点连接过服务器。
- aculog:保存拨出的MODEM记录。
- lastlog:记录用户最近一次登录记录和最初目的地,有时也记录最后一次不成功登录。
- loginlog:记录不正常的登录尝试。
- messages:记录输出到系统控制台的信息,另外由syslog生成的信息也会包含。
- security:记录使用UUCP系统企图进入限制范围的事件。
- sulog:记录使用su命令的记录。
- utmp:记录当前登录到系统中的所有用户,随用户进出而变化。
- utmpx:utmp的扩展。
- wtmp:记录用户登录和退出事件。
- syslog:最重要的日志文件,由syslogd守护进程生成。
日志信息本身也有一些来源:
- /dev/log:一个UNIX域套接字,接受本地机器上运行的进程产生的消息。
- /dev/klog:一个从UNIX内核接收消息的设备。
- 514端口:一个INTERNET套接字,接受其他机器通过UDP产生的syslog消息。
- Uucp:记录UUCP的信息,包括本地和远程UUCP活动,如发出和接受的呼叫、请求、发送者、发送时间和发送主机。
- lpd-errs:处理打印机故障信息的日志。
- ftp日志:执行带-l选项的ftpd可以记录FTP访问。
- httpd日志:HTTPD服务器记录每一个WEB访问。
- history日志:保存用户最近输入命令的记录。
- vold.log:记录使用外接媒介时遇到的错误。
以上介绍了入侵服务器的主要步骤,相信读者现在已经有了基础的认识。再次强调,如果对UNIX系统缺乏深入理解,想要掌握这些技术几乎是不可能的。
