1.1 基本技能
1.1.1 编程基础
编程在计算机领域称得上是必备技能了,在此我们不再探讨各种语言的优缺点,也不介绍类似“‘面向对象’和‘面向过程’之间区别”的问题,更不会空谈编译原理等问题,这里将简单介绍一些适合新手入门学习的编程语言以及书中涉及的各种技术所需的编程语言。
1.Python
Python是一种解释性脚本语言,它拥有众多的“库”。Python功能强大而且简洁,还可以将其他语言的模块轻松联结起来,故又被称为“胶水语言”。由于Python需要的代码量极少且易于学习,其程序源代码对于使用者完全开放,在开源软件工作者和编程初学者中具有极好的声誉。学习Python对人们日后的网络编程学习,以及Web渗透中部分工具的使用具有重要意义。
目前Python主要分为2.x与3.x两个版本,两者在语法上略有差异,且各有优缺点,大家可以根据自己的需求学习不同的版本。
2.C语言
C语言是一种极其重要和流行的编程语言,具有极高的可移植性——同样的代码在Linux、Windows、Mac OS系统上都可以运行;它的运行速度极快,可以充分利用计算机的优点,表现出只有汇编语言才具有的精细控制能力。对于初学者来说,C语言是最容易上手的一门“大型”编程语言,C语言也与后面涉及到的病毒分析和逆向技巧有重要联系。
3.汇编语言
汇编语言是计算机的底层语言,大部分计算机的汇编语言基于X86指令集,计算机可通过汇编程序将汇编代码转化为机器码——计算机可以直接执行的代码。汇编可以使人们更清晰地了解计算机的运行原理,同时也对在接下来的章节中要中学习的软件漏洞分析、逆向分析以及病毒机制的理解具有重要意义。
4.JavaScript
JavaScript是一种脚本语言,在Web前端中担任着重要的角色,但它也是造成XSS(跨站脚本攻击)、CSRF等漏洞的罪魁祸首之一,所以说JavaScript是学习渗透测试和前端安全的一门必修课。
1.1.2 命令提示符
命令提示符在许多人印象里就是一个“黑洞洞的窗口”(其实cmd窗口也是可以美化的,例如图1-1被笔者设置成透明色,毕竟如果长时间使用终端工作,一个赏心悦目的界面还是很有必要的)。在Windows系统中,按Win+R键,输入cmd并回车,就可以调出cmd窗口。
图1-1 笔者的cmd命令提示符界面
许多应用在命令提示符窗口进行操作会更加简洁,比如输入Python可以启动Python解释器(前提是已搭建了Python环境),学会命令提示符的常用用法和语法后,可以写出批处理(*.bat)文件,来进行许多原始而又简单的操作。
类似地,Linux系统的Shell则是Linux的命令提示符,称为命令行,一般以终端方式打开。俗话说尺有所短,寸有所长,Linux的图形化界面虽然没有Windows易用,但是它在命令行方面比Windows更加成熟,读者可以尝试Linux的一些发行版,例如Ubuntu、Debian等,熟悉Linux系统对于提升工作效率是大有裨益的。
1.1.3 虚拟专用网络
虚拟专用网络,这个名词可能令部分读者感到些许陌生,但它的英文名称读者一定听过,Virtual Private Network,即VPN。VPN能够让其他人连接到企业网络或内部网络,通过一个公用网络建立一个临时的、安全的连接,这是一条穿过混乱的公用网络的安全、稳定的隧道。同时VPN能提供高水平的安全性,使用高级的加密和身份识别协议保护数据,阻止没有被授权的用户接触数据。而在渗透测试中,使用VPN则可以进入一些无法正常访问的网络环境,从而进一步开展渗透测试。
1.1.4 虚拟机
虚拟机(Virtual Machine)指通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
简单来说,虚拟机就是操作系统中的一个沙盒,在沙盒之中执行操作的时候主系统是不会干扰到外部系统的,可以说是安全测试中必不可少的工具。
从20世纪五六十年代IBM提出虚拟机技术开始,虚拟机技术随着互联网的发展,日益成熟。目前,比较流行的虚拟机软件有VMware、VirtualBox和Virtual PC,它们都能在Windows系统中虚拟出多个计算机系统。当需要在其他系统环境测试软件或以另一个系统作靶机来测试某漏洞时,则可以在自己的同一台计算机上安装两个或多个操作系统,例如可以同时安装Linux与Windows操作系统,并且在虚拟机与物理机之间共享文件、应用程序及网络资源等,这将极大地提高工作效率。
接下来,我们以VirtualBox软件为例来介绍一下虚拟机的安装方法。
VirtualBox是一款常用的开源的虚拟机软件,它具有操作简便、界面简洁等很多优点。图1-2是在Windows环境下运行VirtualBox的界面。
图1-2 VirtualBox主界面
单击“新建”按钮,会弹出如图1-3所示的界面,这里需要键入虚拟机的名称以及选择所安装系统的类型和版本。
之后,单击“下一步”按钮进入内存分配界面,如图1-4所示。在安装每一个虚拟系统的时候,都要为其分配相应大小的内存,这些内存用以支持虚拟系统的运行及虚拟系统中程序的运行。
图1-3 为虚拟机命名并选择镜像的系统类型与版本
图1-4 为虚拟机分配内存
虚拟机系统为Windows XP时,为其分配256M的运行内存足够支持虚拟机中的常用操作。当然,所能分配的最大内存不能超过物理机内存的剩余部分,毕竟虚拟机内存是无法凭空虚拟的。
除了分配内存,还要给虚拟系统分配硬盘。硬盘是一个载体,如同主系统安装在主机的硬盘上一样,我们要给所安装的虚拟系统分配一块虚拟硬盘。分配硬盘有两种方式,一种是固定大小,另一种是动态分配,如图1-5所示。
顾名思义,动态分布模式下,给虚拟系统分配的硬盘空间会随着虚拟系统的增大而增大,在该模式下,新建硬盘很快,而且不需要消耗太大空间,分配给虚拟系统的硬盘大小会随着逐渐使用而增加。
而固定大小模式,则是为虚拟系统分配固定的空间,在空间足够时,虚拟系统可以流畅地运行,如果虚拟系统所占的空间大于或等于所分配的硬盘内存,则会出现错误。如图1-6所示,VirtualBox软件会根据所选择的系统类型默认一个硬盘大小,可供参考。
图1-5 为虚拟机设置虚拟硬盘类型
图1-6 为虚拟硬盘命名并分配大小
单击“创建”按钮,我们可以看到创建过程,如图1-7所示。
图1-7 创建虚拟硬盘
至此,我们的虚拟硬盘就建立完毕了。之后在VirtualBox的主界面可以看到左侧的管理列表出现了刚刚创建的虚拟系统。单击选中左侧的系统,单击启动栏上的“启动”按钮,便可以进入创建的虚拟系统中,如图1-8所示。
图1-8 开启虚拟机
在刚才的操作之中,我们在VirtualBox中创建了一个“空位”,接下来就可以通过镜像文件来安装系统了,相信读者都熟知,这里不再赘述。