WEB渗透之相关概念(笔记)

零、域名

什么是域名?

地址的名称称为域名,例:www.baidu.com

域名在哪里注册?

第三方网址注册,例:万网(www.net.cn)

什么是二级域名、多级域名?

从右到左:根域名、*域名、二级域名、三级域名

news.baidu.com、shehui.news.baidu.com

域名发现对于安全测试意义?

当主站域名无法找到漏洞的时候,从多级域名寻找突破口

一、DNS

TCP/IP提供了通过IP地址来连接到设备的功能,但对用户来讲,记住某台设备的IP地址是相当困难的,因此专门设计了一种字符串形式的主机命名机制,这些主机名与IP地址相对应。在IP地址与主机名之间需要有一种转换和查询机制,提供这种机制的系统就是域名系统DNS(Domain Name System)。

为什么要有DNS?

互联网中,一台计算机与其他计算机通信时,通过IP地址唯一的标志自己。此时的IP地址就类似于我们日常生活中的电话号码。但是,这种纯数字的标识是比较难记忆的,而且数量也比较庞大。例如,每个IPv4地址是一个32位长的二进制数字,或者采用点分十进制展示成192.168.1.1这种格式,有接近43亿个的IPv4地址。DNS的作用就是将人类可读的名称转换为机器识别的IP地址,供计算机相互连接。DNS的工作原理和电话簿相似,都是管理名称和数字之间的映射关系。就像我们日常打电话,一般使用人名查找,很少直接输入电话号码一样。当我们上网打开某个网页、视频时,也很少直接使用IP地址,而是在浏览器里输入的URL地址,例如:https://www.huawei.com,这其实使用的就是计算机的名字,一般称为域名。

域名的构成

最初设备的域名由字符序列组成、所有设备的域名组成一个未分级的域名结构。未分级的域名结构存在命名冲突、管理维护复杂的缺点。因此,TCP/IP把DNS的域名设计成了分级的树状结构。每个申请加入Internet的国家都要向NIC注册一个*域名,*域采用组织模式和地理模式的划分模式,如cn代表中国、us代表美国等。常见的*域名如下表所示。NIC将*域的管理权分派给由其指定的管理机构,由这些管理机构再对被授权管理的域继续进行划分,从而形成了二级域。负责划分二级域的管理机构可以授权其下属的管理结构,由它们继续划分域。由此下去,便形成了层次型的Internet域名体系结构。

表1-1

*Internet域名及其含义

*Internet域名 含义
com 商业组织
edu 教育机构
gov *机构
mil 军事部门
net 主要网络支持中心
int 国际组织
org 其他组织
国家代码 国家(按照地理模式划分)

从语法上讲,每一个域名都是有标号序列组成,而各标号之间用点(小数点)隔开。以www.huawei.com域名为例,从右到左依次是:

  • com:*域名。代表商业组织。
  • huawei:二级域名,归属于某个公司自己的域名。
  • www:三级域名,表明某个公司提供的是什么服务,www代表普通网页。

DNS服务器、DNS客户端和DNS中继

网络中与DNS相关的设备角色包括DNS服务器、DNS客户端和DNS中继。

DNS服务器

DNS服务器是将域名指向对应IP地址的服务器。DNS服务器中保存了一张域名和与之相对应的IP地址的表,以解析消息的域名。由于互联网连通的是全球资源,单一的域名服务器不足以支撑全部的地址转换操作,因此全球有多套域名服务器相互配合使用。

域名是分层结构,域名DNS服务器也是对应的层级结构。通过根域名服务器,依次请求*域名服务器和权威域名服务器,最终获取对应IP地址,并将该结果保存在本地域名服务器,以待下次DNS请求使用。当用户再次对同一域名发起访问时,可以直接从本地域名服务器获得结果,无需再次发起全球递归查询。

表1-2

DNS服务器的分类

分类 作用
根DNS服务器 根DNS服务器是最高层次的域名服务器,它知道所有*服务器的域名和IP地址,当本地域名服务器无法对域名进行解析时,首先对根域名服务器发起请求。
*域名服务器 *域名服务器负责管理该服务器下的所有二级域名,当收到DNS查询请求时,就会给权威域名服务器相应的回答。
权威域名服务器 负责某一个区域的域名服务器。当一个*域名服务器还不能给出最后查询回答时,就会告知下一步应当请求的权威域名服务器。
本地域名服务器 当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个互联网服务提供者ISP都可以拥有一个本地域名服务器。当本地域名服务器无法给出应答时,就会请求*的根域名服务器。

DNS客户端

DNS客户端的作用是接收用户程序(User Program)的DNS请求,并对其作出回应。作为DNS客户端的设备上一般具备以下能力:

  1. 启动DNS解析

    要使用DNS客户端功能,需要在设备上打开DNS解析的开关。

  2. 指定服务器的IP地址

    要进行DNS域名解析,需要在设备上指定DNS服务器的IP地址。这样才能把查询请求发动到正确的DNS服务器上进行解析。

  3. 指定DNS域后缀搜索列表

    DNS客户端所访问的一些服务器或主机的域名后缀往往都是相同的。用户可以预先设置一些域名后缀,在域名解析的时候,用户只需要输入域名的部分字段,系统会自动将输入域名加上不同的后缀进行解析。例如,用户想查询域名“huawei.com”,那么可以在后缀列表中配置com,然后输入“huawei”,系统会自动将输入域名与后缀连接成“huawei.com”进行查询。

DNS中继

当DNS服务器的IP地址发生变化时,用户网络中每个DNS客户端上的配置都需要改变,这样工作量极大并且容易出错。此时,可以通过部署DNS中继解决该问题。DNS客户端上配置DNS中继的IP地址,DNS服务器的IP地址在DNS中继上配置。之后,DNS客户端会将DNS请求报文直接发送给DNS中继,由DNS中继将收到的DNS请求报文转发至DNS服务器。由此,当DNS服务器的IP地址发生变化时,仅需改变DNS中继上的配置即可,简化了网络管理。

DNS中继的工作原理如下图所示。

https://download.huawei.com/mdl/image/download?uuid=8e7d1d1f64c846f2bbb10de64a59593e

DNS中继的工作原理

  1. DNS客户端将DNS请求报文发送给DNS中继,即请求报文的目的地址为DNS中继的IP地址。
  2. DNS中继收到请求报文后,将报文转发给DNS服务器,通过DNS服务器进行域名解析。

DNS域名解析过程

通过域名获取对应IP地址的过程称为域名解析。DNS域名解析分为以下两种方式:

  • 静态域名解析

    静态域名解析是通过静态域名解析表进行的,即手动建立域名和IP地址之间的对应关系表,该表的作用可以将一些常用的域名放入表中。当DNS客户端需要域名所对应的IP地址时,即到静态域名解析表中去查找指定的域名,从而获得所对应的IP地址,提高域名解析的效率

  • 动态域名解析

    动态域名解析需要专用的域名解析服务器(DNS服务器)运行域名解析服务器程序,提供从域名到IP地址的映射关系,负责接收客户提出的域名解析请求。

为提高查询速度,在解析域名时,首先采用静态域名解析的方法,如果静态解析不成功,再采用动态域名解析的方法。

https://download.huawei.com/mdl/image/download?uuid=d344e8072c204720abb670d8a09e1e5c

动态域名解析原理图

如上图所示,DNS的工作过程如下:

  1. 用户程序(如ping、telnet等)使用域名访问网络时,首先向DNS客户端的地址解析器发出DNS请求。
  2. 地址解析器收到DNS请求后,首先查询本地域名缓存。
    • 如果本地域名缓存中存在该域名对应的映射表项,地址解析器就直接将域名对应的IP地址返回给用户程序。
    • 如果本地域名缓存中不存在所要查找的映射表项,地址解析器就向DNS服务器发送查询请求报文。
  3. DNS服务器收到查询报文后,首先判断请求的域名是否处于自己被授权管理的子域里,再根据不同的判断结果,向DNS客户端发送相应的响应报文。
    • 如果请求的域名在自己被授权管理的子域范围之内,该DNS服务器首先从自己的数据库中查找域名对应的IP地址。
    • 如果请求的域名不在自己被授权管理的子域范围之内,该DNS服务器就将请求交给上一级的DNS服务器处理。DNS服务器完成解析后,将解析的结果返回给DNS客户端。
  4. DNS客户端的地址解析器接收并解析DNS服务器发回来的响应报文,将解析结果返回给用户程序。

每次动态解析成功的域名与IP地址的映射均存放在动态域名缓存区中,当下一次查询相同域名的时候,就可以直接从缓存区中读取,不用再向域名服务器进行请求。缓存区中的映射在一段时间后会被老化删除,以保证及时从域名服务器得到最新的内容。

二、本地HOST与DNS的关系

TCP/IP 是基于 IP 地址进行通信的,但是 IP 地址是由一串复杂且易混淆的数字组成,不便于人们区别和记忆。为了方便记忆,便出现了另外一种更方便的标识符,这就是域名。这样我们在进行网络通信时,直接使用简便的域名就可以,而无需输入一大串IP地址,大大提升了访问效率和准确率。

但如何实现域名和IP地址的一一对应关系,是需要亟待解决的一个问题。因此,系统会通过一个本地HOSTS文件,来实现域名转换IP地址额功能。hosts 文件包括主机名和 IP 地址的对应关系。当需要通过主机名访问主机时,它就会查看本地的 hosts 文件,从文件中找到相对应的 IP 地址,然后进行报文发送。如果在 hosts 文件中没找到相关信息,则主机访问失败。

由于hosts文件储存在本地,所以查找响应速度快,但缺点也十分明显。一方面,每台主机的hosts文件都需要手动更新,不能实时获得我们想要访问站点的对应关系,且操作起来比较繁琐容易出错;另一方面,随着互联网规模的不断扩大,接入计算机的数量不断增加,维护难度越来越大,每台主机同步更新,几乎是一件不可能完成的任务。

因此,我们需要一种更加智能简便容易维护的翻译机制,来完成相同的翻译功能,于是便出现了DNS域名系统,一个可以解决主机名和 IP 地址互相转换的系统。无论网络规模变得多么庞大,都能在一个小范围内通过 DNS 进行管理。

DNS与hosts文件一样,同样储存着域名与IP地址之间的对应关系,所不同的事DNS独立于主机存在,所以无需用户手动更新,且DNS基于其独有的递归查询方式,可自动更新存储记录值,因此可以快速获得新站点的IP地址,解析访问效率大为提升。

但与host文件一样,一台DNS服务器无论性能多么强大都无法存储所有主机记录,所以域名系统是一个分布式数据库系统,域名(主机名)到 IP 地址的解析可以由若干个域名服务器共同完成。每一个站点维护自己的信息数据库,并运行一个服务器程序供互联网上的客户端查询。DNS 提供了客户端与服务器的通信协议,也提供了服务器之间交换信息的协议。由于是分布式系统,即使单个服务器出现故障,也不会导致整个系统失效,消除了单点故障。

DNS查询机制

当客户端对某个域名发起访问后,系统会首先查看浏览器缓存、hots文件、DNS缓存等本地记录,如果有记录直接返回给客户端,完成访问。

如果本地没有记录,就需要借助DNS完成查询过程,首先主机会向递归服务器进行请求,如果递归服务器有记录,直接返回结果;

如果没有记录,递归服务器就会代替客户端向根服务器进行请求,根服务器返回域名所属的*域名服务器;

递归服务器向所属*服务器发起请求,*服务器返回域名所在的权威域名服务器;

权威服务器负责对查询域名的解析任务,存储着域名权威解析记录,权威服务器向对其发起请求的递归服务器返回查询结果;

递归服务器将记录返回给客户端,同时将记录存储在本机缓存,以供下次查询时使用。

从以上流程中可以看出,域名解析是按照 DNS 分层结构的特点,自顶向下进行的。但是如果每一个域名解析都从根域名服务器开始,那么根域名服务器有可能无法承载海量的流量。在实际应用中,大多数域名解析都是在本地域名服务器完成。通过合理设置本地域名服务器,由本地域名服务器负责大部分的域名解析请求,提高域名解析效率。

三、CDN

CDN的全 称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

服务模式

内容分发网络(CDN)是一种新型网络内容服务体系,其基于IP网络而构建,基于内容访问与应用的效率要求、质量要求和内容秩序而提供内容的分发和服务。而从广义的角度,CDN代表了一种基于网络而构建的高质量、高效率、具有鲜明网络秩序的网络应用服务模式。cdn

!https://so1.360tres.com/dr/220__/t017e262a8a30cf9ae2.jpg

简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。

总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。

CDN的通俗理解就是网站加速,可以解决跨运营商,跨地区,服务器负载能力过低,带宽过少等带来的网站打开速度慢等问题。

比如:

1.一个企业的网站服务器在北京,运营商是电信,在广东的联通用户访问企业网站时,因为跨地区,跨运营商的原因,网站打开速度就会比北京当地的电信客户访问速度慢很多,很容易造成这个企业的客户流失

2.一个网站的服务器性能比较差,承载能力有限,有时面临突发流量,招架不住,直接导致服务器崩溃,网站打不开,尤其是电商网站在节日期间,因为这种情况网站打不开,销售额白白流失的占比都高涨至60%

3.再比如一些中小企业租用的虚拟主机,因为跟好几个网站共用一台服务器,每个网站所分带宽有限,带宽过小经常导致流量稍微一多,网站打开速度就很慢,甚至打不开

以上只是几个简单举例,都可以通过CDN来解决,大家可以参考下[1]

使用CDN的好处?

  1. 不用担心自己网站访客,在任何时间,任何地点,任何网络运营商,都能快速打开网站。

  2. 各种服务器虚拟主机带宽等采购成本,包括后期运维成本都会大大减少。

  3. 给网站直接带来的好处就是:流量,咨询量,客户量,成单量,都会得到大幅度提升。

1.什么是cdn

   cdn全称是内容分发网络。其目的是让用户能够更快速的得到请求的数据。简单来讲,cdn就是用来加速的,他能让用户就近访问数据,这样就更更快的获取到需要的数据。举个例子,现在服务器在北京,深圳的用户想要获取服务器上的数据就需要跨越一个很远的距离,这显然就比北京的用户访问北京的服务器速度要慢。但是现在我们在深圳建立一个cdn服务器,上面缓存住一些数据,深圳用户访问时先访问这个cdn服务器,如果服务器上有用户请求的数据就可以直接返回,这样速度就大大的提升了。

2.dns服务

要了解cdn就先要了解一下dns。当我们在浏览器中输入一个域名时,首先需要将域名转换为ip地址,再将ip地址转换为mac地址,这样才能在网络上找到该服务器。我们先不看ip转换mac地址的过程,先来看看是怎么将一个域名转换为ip的。

    当我们向dns服务器发起解析域名的请求时,dns服务器首先会查询自己的缓存中有没有该域名,如果缓存中存在该域名,则可以直接返回ip地址。如果缓存中没有,服务器则会以递归的方式层层访问。例如,我们要访问www.baidu.com,首先我们会先向全球13个根服务器发起请求,询问com域名的地址,然后再向负责com域名的名称服务器发送请求,找到baidu.com,这样层层递归,最终找到我们需要的ip地址。

3.dns与cdn的关系

    刚才说到cdn实际上是一个就近访问,那么现在有一个问题是,我们怎么知道用户的所在位置从而给他分配最佳的cdn节点呢。这就需要dns服务来进行定位了。当我们通过使用dns服务的时候,可以根据他使用的LDNS服务器来进行一个定位,例如我们的调度服务器看到他是来自深圳电信的LDNS服务器,那么我们就认为该用户来自深圳电信,然后调度服务器可以让该用户去访问深圳电信的CDN服务器,这样就让用户访问到了最优的cdn节点。

     通过dns服务我们可以很快的定位到用户的位置,然后给用户分配最佳cdn节点,但是这种调度方式存在一个问题,例如,当我 是北京联通的用户但是使用的却是深圳电信的ldns的话,调度服务器会给我分配到深圳电信的cdn服务器,这样就产生了错误的调度。

4.http调度方式

针对上面的问题,我们还有另一种调度方式——http调度。

当用户访问我们的服务器时,服务器先分析用户的ip地址,然后服务器给用户返回一个302重定向,将离用户最近的服务器存在location中,用户再去请求这个cdn服务器就能得到最佳的cdn节点。

这种调度方式的优点是他的定位更加准确,不会因为错误的ldns造成访问偏差。但是他的缺点就是需要一次额外的http访问,这样首次访问的延时就会比较高。所以如果是对大文件的请求,显然采用http的调度方式比较合适,因为大文件的请求需要更多的时间,相比之下可以忽略这次http请求的时间,但是如果是一些小文件的请求,花费这个时间有时就有些得不偿失了。

当然我们也可以将这两种方式结合起来使用,先通过dns的方式来定位,然后通过http的方式来纠正偏差。

5.缓存的两种方式

cdn中缓存了服务器上的部分资源。那么服务器怎么去更新cdn节点的缓存呢?这里有两种方式,一种是服务器主动去更新缓存,cdn节点被动接受。另一种方式是当用户请求的资源不存在时,cdn服务器向上游服务器发起请求,更新缓存,然后将数据返回给用户,这种方式是cdn服务器主动,源站服务器被动。显然第一种方式存在很多问题,例如很容易产生404等,所以一般采用第二种缓存方式。

6.cdn的整个工作过程

当用户请求一个文件时,cdn的工作过程如下:

1.dns请求当地local DNS

2.当地local DNS递归的查询服务器的gslb

3.服务器根据local DNS 分配最佳节点,返回ip

4.用户获得最佳接入ip,访问最佳节点。

5.如果该节点没有用户想要获取的内容,则通过内部路由访问上一节点,直到找到文件或到达源站为止。

6.cdn节点缓存该数据,下次请求该文件时可以直接返回。

————————————————


四、常见的DNS安全攻击方式

1.DNS劫持

DNS劫持又称域名劫持,是攻击者利用缺陷对用户的DNS进行篡改,将域名由正常IP指向攻击者控制的IP,从而导致访客被劫持到一个不可达或者假冒的网站,以此达到非法窃取用户信息或者破坏正常网络服务的目的。

DNS劫持可用于DNS域欺骗(攻击者通常目的是为了显示不需要的广告以产生收入)或用于网络钓鱼(为了让用户访问虚假网站并窃取用户的数据和凭据)。互联网服务提供商(ISP)也可能通过DNS劫持来接管用户的DNS请求,收集统计数据并在用户访问未知域名时返回广告或者屏蔽对特定网站的访问。

2.DNS放大攻击

DNS放大攻击是一种流行的DDoS攻击形式,其中目标系统被来自公共DNS服务器的查询响应淹没。攻击者向公共DNS服务器发送DNS名称查询,使用受害者的地址作为源地址,导致公共DNS服务器的响应都被发送到目标系统。

攻击者通常会查询尽可能多的域名信息,以最大限度地发挥放大效果。通过使用僵尸网络,攻击者也可以毫不费力地生成大量虚假DNS查询。此外,由于响应是来自有效服务器的合法数据,因此很难防止DNS放大攻击。

3.DNS缓存投毒

DNS缓存投毒又称DNS欺骗,是一种通过查找并利用DNS系统中存在的漏洞,将流量从合法服务器引导至虚假服务器上的攻击方式。

在实际的DNS解析过程中,用户请求某个网站,浏览器首先会查找本机中的DNS缓存,如果DNS缓存中记录了该网站和IP的映射关系,就会直接将结果返回给用户,用户对所得的IP地址发起访问。如果缓存中没有相关记录,才会委托递归服务器发起递归查询。

这种查询机制,缩短了全球查询的时间,可以让用户获得更快的访问体验,但也存在一定的安全风险。如果攻击者通过控制用户的主机或者使用恶意软件攻击用户的DNS缓存,就可以对DNS缓存中的域名映射关系进行篡改,将域名解析结果指向一个虚假IP。

4.DNS隧道

另一种流行且经验丰富的攻击模式是DNS隧道。这种攻击主要利用客户端-服务器模型注入恶意软件和其他数据。利用这些数据的有效负载,网络犯罪分子可以接管DNS服务器,然后可能访问其管理功能和驻留在其上的应用程序。

DNS隧道通过DNS解析器在攻击者和目标之间创建隐藏连接,可绕过防火墙,用于实施数据泄露等攻击。在大多数情况下,DNS隧道需要借助能够连接外网的受感染系统作为跳板,来访问具有网络访问权限的内部DNS服务器。

5.僵尸网络反向代理(Fast Flux)

Fast Flux是一种DNS规避技术,攻击者使用僵尸网络隐藏其网络钓鱼和恶意软件活动,逃避安全扫描。攻击者会使用受感染主机的动态IP地址充当后端僵尸网络主机的反向代理。Fast Flux也可通过组合使用点对点网络、分布式命令和控制、基于Web的负载平衡和代理重定向等方法,使恶意软件网络更难被检测到。

五、脚本语言

1.常用的脚本语言有那些?

Python、JavaScript、Ruby、Bash、PowerShell和Lua

asp**、** php**、** aspx**、** jsp**、** javaweb**、** pl cgi等

2.不同脚本类型与安全漏洞的关系?

脚本语言越严谨、规则越多,往往这种脚本语言写出来的网站安全性也越高。安全语言写出的程序,漏洞也会少一点。例如java语言,虽然上手慢,学习难度高,但是往往采用java语言写出的网站,其安全性相对也会更好一点。

3.漏洞挖掘代码审计与脚本类型的关系?

不同的程序的源码,偏重性也会不一样,比如php适合小中型网站的开发,java则适合大中型网站的开发。所以,做网络测试,需要对这些代码有所了解,了解其内置功能、内置架构等。不求深度掌握,但是至少要略知一二,看得懂代码。

六、后门

1.什么是后门?有哪些后面?

后门程序又称特洛伊木马:

其用途在于潜伏在电脑中,从事搜集信息或便于黑客进入的动作。后程序和电脑病毒最大的差别,在于后门程序不一定有自我复制的动作,也就是后门程序不一定会“感染”其他电脑。   后门是一种登录系统的方法,它不仅绕过系统已有的安全设置,而且还能挫败系统上各种增强的安全设置。 后门包括从简单到奇特,有很多的类型。简单的后门可能只是建立一个新的账号,或者接管一个很少使用的账号;复杂的后门(包括木马)可能会绕过系统的安全认证而对系统有安全存取权。例如一个login程序,你当输入特定的密码时,你就能以管理员的权限来存取系统。

后门的分类:

后门可以按照很多方式来分类,标准不同自然分类就不同,为了便于大家理解,我们从技术方面来考虑后门程序的分类方法:

1.网页后门

此类后门程序一般都是服务器上正常 的web服务来构造自己的连接方式,比如现在非常流行的ASP、cgi脚本后门等。

2.线程插入后门

利用系统自身的某个服务或者线程,将后门程序插入到其中,具体原理原来《黑客防线》曾具体讲解过,感兴趣的朋友可以查阅。这也是现在最流行的一个后门技术。

3.扩展后门

所谓的“扩展”,是指在功能上有大的提升,比普通的单一功能的后门有很强的使用性,这种后门本身就相当于一个小的安全工具包,能实现非常多的常驻见安全功能,适合新手使用————但是,功能越强,个人觉得反而脱郭后门“隐蔽”的初衷,具体看法就看各位使用都的喜好了。 4.c/s后门

和传统的木马程序类似的控制方法,采用“客记端/服务端”的控制方式,通过某种特定的访问方式来启动后门进而控制服务器。

5.rootkit

这个需要单独说明,其实把它单独列一个类在这里是不太恰当的,但是,root kit 的出现大大改变了后门程序的思维角度和使用理念,可以说一个好的root kit就是一个完全的系统杀手!

2.后门在安全测试中的实际意义?

  1. 发现潜在风险:通过寻找和利用后门,安全测试人员可以揭示系统可能存在的安全漏洞,从而采取措施加以修复,提高系统的整体安全性。
  2. 评估渗透能力:后门的存在可以用来评估攻击者潜在的渗透能力,帮助组织理解其系统在面对真实攻击时的脆弱性。
  3. 验证安全控制:通过尝试使用后门访问系统,可以验证组织的安全控制措施是否有效,以及是否能够阻止未授权的访问。
  4. 法律合规性:某些行业或地区可能有法律规定,要求组织进行定期的安全测试,以确保遵守相关的信息安全法规。
  5. 提高应对威胁能力:通过模拟后门攻击,组织可以学习和提高应对此类威胁的快速反应能力,制定和测试应对计划。
  6. 保护敏感数据:后门可能被用来访问或窃取敏感数据,因此在安全测试中识别和关闭后门有助于保护组织的知识产权和客户数据。

3.关于后门需要了解那些?

我们需要了解以下几个关键点:

  1. 定义:后门是隐藏的软件接口,允许攻击者在未经授权的情况下访问系统。它可能是预先植入的,也可能是由于软件漏洞而被创建的。
  2. 类型:后门可以以多种形式存在,包括但不限于:
    • 代码注入:在目标程序中插入的秘密代码。
    • 木马:隐藏在合法软件中的恶意代码。
    • 服务端后门:在服务器上运行的专门程序,用于接受来自攻击者的连接。
    • 社交工程后门:通过欺骗用户执行的恶意软件。
  3. 目的:后门的主要目的是为了让攻击者能够在不被察觉的情况下控制受害系统,进行数据窃取、远程控制、信息收集等恶意活动。
  4. 风险:后门的存在使系统容易受到未授权的访问和潜在的恶意利用,可能导致数据泄露、系统被黑、业务中断等严重后果。
  5. 检测与防御:检测后门通常需要专业的工具和技术,如入侵检测系统(IDS)、安全审计、代码审查等。防御后门的方法包括定期更新软件、使用安全补丁、进行安全培训和意识提升等。
  6. 法律与道德:在大多数国家和地区,未经授权安装后门是违法的。即使在合法的渗透测试活动中,也必须获得系统所有者的明确许可,并在严格的法律和道德框架内进行。

七、WEB相关安全漏洞

WEB源码类对应漏洞:

SQL注入、上传、xss、代码执行、变量覆盖、逻辑漏洞、反序列化等

WEB中间件对应漏洞:

未授权访问

WEB数据库对应漏洞:

内核漏洞

WEB系统层对应漏洞:

提权漏洞、安全代码执行

其他第三方对应漏洞:

电脑第三方软件

APP或PC应有结合类:

移动端、PC端、网页端

1.sql注入漏洞

SQL注入漏洞是一种常见的安全漏洞,允许攻击者将恶意的SQL查询插入到应用程序的输入字段中。这可能会导致数据库暴露、数据泄露、数据破坏和应用程序的不安全性。

  1. 什么是SQL注入漏洞?

    SQL注入漏洞是一种攻击,通过该攻击者可以向应用程序提交恶意构造的输入,从而在数据库上执行不受控制的SQL查询。这种漏洞通常出现在应用程序未正确验证和过滤用户输入的情况下。攻击者可以利用这种漏洞来执行未经授权的数据库操作。

  2. 为什么SQL注入漏洞是危险的?

    SQL注入漏洞非常危险,因为攻击者可以执行以下恶意操作:

    • 数据库数据泄露:攻击者可以检索敏感数据,如用户名、密码、信用卡信息等。
    • 数据库数据破坏:攻击者可以修改、删除或损坏数据库中的数据。
    • 恶意代码执行:攻击者可以在数据库上执行恶意代码,可能导致服务器上的安全问题。![image-20230925154338741](C:\Users\dsy\AppData\Roaming\Typora\typora-user-images\image-20230925154338741.png
    • 绕过身份验证:攻击者可以绕过应用程序的身份验证,获得管理员或其他用户的权限。
  3. SQL注入漏洞的示例:

    假设有一个登录表单,应用程序接受用户名和密码,然后将其用于SQL查询:

    sqlCopy code
    SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';
    

    如果应用程序不对输入进行适当的验证和过滤,攻击者可以提交以下内容作为用户名:

    bashCopy code
    输入的用户名' OR '1'='1
    

    这将更改SQL查询,使其成为以下形式:

    sqlCopy code
    SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '输入的密码';
    

    由于'1'='1'始终为真,攻击者将能够绕过身份验证并获得访问权限。

  4. 如何防止SQL注入漏洞?

    防止SQL注入漏洞需要采取以下措施:

    • 使用参数化查询:使用参数化查询或预处理语句,而不是直接将用户输入插入SQL查询。
    • 输入验证和过滤:对用户输入进行验证和过滤,确保只包含允许的字符和格式。
    • 最小权限原则:数据库用户应该具有最小必要的权限,不要给予数据库用户过多的权限。
    • 错误处理:不要向用户显示详细的错误消息,以防泄露敏感信息。

2.XSS漏洞(跨站脚本攻击)

跨站脚本(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,它允许攻击者向网页中注入恶意脚本代码,然后在用户浏览该页面时执行这些恶意脚本。XSS漏洞通常用于窃取用户的敏感信息(如登录凭据、会话令牌等)、篡改网页内容、重定向用户到恶意站点,或者其他恶意行为。

  1. 反射型XSS(Reflected XSS)
    • 这是最常见的XSS类型之一。攻击者将恶意脚本代码注入到一个URL中,然后诱使用户点击这个URL。服务器接收到这个URL请求后,将恶意脚本代码嵌入到响应中,然后发送给用户浏览器执行。攻击者通常需要诱使受害者点击恶意链接,例如通过社交工程或欺骗性的邮件。
  2. 存储型XSS(Stored XSS)
    • 这种类型的XSS漏洞会将恶意脚本代码存储在服务器上,然后当其他用户访问包含这段恶意代码的页面时,恶意代码会从服务器中加载并执行。这种漏洞通常出现在用户生成内容的应用程序中,如论坛、博客评论或社交媒体。
  3. DOM型XSS(DOM-based XSS)
    • 这种类型的XSS漏洞不涉及服务器的响应,而是在客户端中发生。攻击者通过修改网页中的DOM(文档对象模型)来触发漏洞。这种漏洞通常出现在JavaScript代码中,当代码不正确地处理来自用户输入的数据时。

XSS漏洞的危害包括:

  • 窃取敏感信息:攻击者可以窃取用户的登录凭据、会话令牌、个人信息等。
  • 篡改网页内容:攻击者可以修改网页上的内容,传播虚假信息或恶意链接。
  • 劫持用户会话:攻击者可以劫持用户的会话,以用户的身份执行恶意操作。

为了防止XSS漏洞,开发者可以采取以下措施:

  • 输入验证和过滤:对用户输入的数据进行验证和过滤,确保不允许包含恶意脚本。
  • 转义输出:在将用户输入的数据嵌入到HTML、JavaScript、CSS等上下文之前,确保对其进行适当的转义,以防止恶意代码执行。
  • HTTP头部设置:使用适当的HTTP头部设置,如Content Security Policy (CSP),可以限制网页中可以加载和执行的资源和脚本。
  • 安全编程实践:遵循安全编程实践,不信任的数据不应该直接插入到HTML中。
  • 定期安全审计:定期审查代码以查找和修复潜在的XSS漏洞。

3.CSRF(跨站请求伪造漏洞)

跨站请求伪造(Cross-Site Request Forgery,CSRF)是一种常见的网络安全漏洞,它允许攻击者通过利用用户的身份执行未经授权的操作。在CSRF攻击中,攻击者诱使受害者执行某些操作,这些操作可能包括更改密码、发起转账、修改个人信息等,而受害者通常在不知情的情况下执行这些操作。

  1. 攻击原理
    • 攻击者创建一个恶意网站或页面,并在其中包含一个发起操作的请求,例如修改密码的请求。
    • 攻击者诱使受害者访问这个恶意网站或页面,通常通过社交工程、恶意链接、电子邮件或其他方式。
    • 当受害者访问恶意页面时,浏览器会自动执行其中包含的请求,而受害者的登录凭据会自动附加到请求中。
    • 如果受害者已经登录到受攻击的网站,那么攻击者可以成功地伪造受害者的身份并执行操作,因为服务器会接受请求并认为它来自合法的用户。
  2. 危害
    • CSRF攻击可以导致未经授权的操作,这可能损害用户的隐私、财产或安全。
    • 攻击者可以以受害者的名义执行转账、更改密码、删除帐户等操作。
    • CSRF攻击还可以用于执行恶意操作,如在受害者不知情的情况下发布恶意内容或更改设置。
  3. 防御措施
    • 同源策略:浏览器的同源策略限制了网页中的跨域请求。这意味着只有在同一域名下的网站才能访问彼此的信息。因此,重要操作(如更改密码或执行敏感操作)应该需要进行身份验证并要求用户手动输入凭据。
    • CSRF令牌:在每个请求中包括一个CSRF令牌,该令牌是服务器生成的,与用户会话相关。攻击者无法获得这个令牌,因此无法伪造请求。服务器在接收到请求时会验证CSRF令牌的有效性。
    • 限制敏感操作:对于敏感操作,要求用户再次输入密码或进行其他形式的身份验证,以确保请求是合法的。
    • HTTP头部设置:使用适当的HTTP头部设置,如SameSite Cookie属性,可以防止跨站点请求伪造攻击。
    • 定期审计:定期审查代码和应用程序以查找和修复潜在的CSRF漏洞。

4.安全配置错误

安全配置错误是一种常见的网络安全漏洞,它通常是由于系统、应用程序或服务器的配置不当而导致的。

  1. 错误配置示例
    • 默认凭据:使用默认用户名和密码,而不是进行个性化配置,容易受到暴力破解等攻击。
    • 目录遍历:配置不当的文件和目录权限,使攻击者可以访问敏感文件或目录。
    • 未禁用不必要的服务:在服务器上运行不必要的服务,增加了攻击面。
    • 缺少更新和补丁:未及时安装操作系统、应用程序或框架的更新和安全补丁。
    • 暴露敏感信息:将敏感配置信息(如数据库凭据或API密钥)存储在明文配置文件中。
    • 跨域资源共享(CORS)配置不当:允许跨域请求的源过于宽松,导致安全性问题。
  2. 危害
    • 安全配置错误可能导致数据泄露、拒绝服务、恶意代码执行、服务器劫持等安全问题。
    • 攻击者可以利用这些错误获取敏感信息、控制服务器、执行恶意操作,或者导致系统崩溃。
  3. 防御措施
    • 最小权限原则:仅为系统、应用程序或服务授予最小必需的权限,以限制攻击者的行动。
    • 安全配置审计:定期审查和评估系统、应用程序和服务器的配置,查找潜在的问题。
    • 删除不必要的服务和功能:禁用或删除不必要的服务、功能和端口,以减小攻击面。
    • 强密码策略:要求使用复杂、长、不易猜测的密码,并定期更改密码。
    • 安全更新和补丁:定期更新操作系统、应用程序和框架,并安装安全补丁。
    • 加密敏感数据:确保在存储和传输敏感数据时使用适当的加密方法。
    • 安全配置文件管理:将敏感配置信息存储在安全位置,使用安全存储机制(如密钥管理系统)。
    • CORS配置:仅允许来自信任的域名的跨域请求,并使用适当的CORS策略来限制访问。

5.不安全的反序列化

不安全的反序列化(Insecure Deserialization)是一种常见的安全漏洞,发生在应用程序未能安全地处理反序列化操作时。反序列化是将先前序列化的数据(通常是二进制或JSON格式)转换回原始对象的过程。攻击者可以利用这种漏洞来注入恶意数据,导致应用程序执行不安全操作,甚至可能导致远程代码执行。

  1. 漏洞原理
    • 应用程序通常允许将序列化数据输入到系统中,然后反序列化它以还原原始对象。这些数据可能来自用户、网络或其他不受信任的源。
    • 不安全的反序列化漏洞发生在应用程序未对反序列化过程进行适当的验证或过滤,使得攻击者能够注入恶意数据,可能导致系统执行恶意操作。
  2. 漏洞示例
    • Java反序列化漏洞:Java中的反序列化漏洞(例如,Apache Commons Collections漏洞)允许攻击者注入恶意对象,导致远程代码执行。
    • PHP反序列化漏洞:PHP中的不安全反序列化漏洞可能导致攻击者通过操纵反序列化数据来执行恶意操作。
    • .NET反序列化漏洞:.NET平台上的不安全反序列化漏洞可能导致远程代码执行或恶意文件上传。
  3. 危害
    • 不安全的反序列化漏洞可能导致远程代码执行、敏感数据泄露、未经授权的操作以及应用程序的不稳定。
    • 攻击者可以利用这些漏洞来接管应用程序、执行命令、访问数据库、修改文件系统等。
  4. 防御措施
    • 白名单验证:仅接受来自受信任源的序列化数据,并验证其完整性和签名。
    • 安全序列化库:使用安全的序列化和反序列化库,这些库通常会提供额外的安全特性。
    • 沙箱环境:将反序列化操作放置在受控制的沙箱环境中,以限制其影响。
    • 最小权限原则:应用程序在执行反序列化操作时应以最低权限原则,以减小攻击面。
    • 安全编程实践:遵循安全编程实践,不要依赖不受信任的输入进行反序列化。
    • 监控和审计:实施监控机制,以检测异常的反序列化活动,并定期审计代码以查找和修复漏洞。

6.直接引用不安全对象

直接引用不安全对象是一种安全漏洞,通常发生在编程中,当程序在未经适当检查或验证的情况下,尝试引用或访问不安全的对象或资源时,可能会导致安全风险。这种漏洞可能允许攻击者访问、修改或破坏敏感数据或执行恶意操作。

  1. 漏洞示例
    • 未经验证的文件上传:程序接受用户上传的文件,并将其存储在服务器上,但未检查文件类型或内容。这可能允许攻击者上传恶意文件,如脚本文件,然后在服务器上执行这些文件。
    • 未经授权的数据库访问:应用程序可能在不验证用户身份的情况下直接与数据库进行连接,或者在SQL查询中不适当地使用未经检查的用户输入,导致SQL注入攻击的可能性。
    • 未经授权的文件系统访问:应用程序可能允许用户通过文件路径来访问文件系统,但没有进行足够的授权检查,可能导致用户访问敏感文件。
    • 硬编码的凭据:应用程序中可能包含硬编码的用户名和密码,这些凭据可以被攻击者轻松获取。
  2. 危害
    • 直接引用不安全对象漏洞可能导致数据泄露、数据损坏、系统崩溃、恶意代码执行和未经授权的操作。
    • 攻击者可以利用这些漏洞来访问敏感数据、更改系统设置、执行不当操作,或者导致系统不稳定。
  3. 防御措施
    • 输入验证和过滤:始终对用户输入进行验证和过滤,以确保它们是有效和安全的。对于文件上传,验证文件类型和内容,限制可接受的文件类型。
    • 最小权限原则:限制应用程序的权限,只授权必要的操作。不要允许未经授权的资源或操作。
    • 安全编程实践:遵循安全编程实践,不要硬编码敏感凭据,避免将用户输入直接用于敏感操作。
    • 访问控制:实施严格的访问控制策略,确保只有经过身份验证的用户才能访问资源。
    • 安全配置:配置和维护应用程序和服务器的安全设置,确保不暴露不安全对象。
    • 监控和审计:实施监控机制来检测不正常的活动,并定期审计应用程序和系统,以查找潜在的漏洞。

7.敏感信息泄露

敏感信息泄露是指未经授权或无意间将敏感数据暴露给未经授权的个体或系统的情况。这种泄露可能会对个人、组织或企业的隐私和安全造成严重危害。

  1. 敏感信息类型
    • 个人身份信息(PII):包括姓名、地址、电话号码、电子邮件地址、社会安全号码、驾驶执照号码等。
    • 金融信息:包括信用卡号、银行帐号、财务报表、交易记录等。
    • 健康信息:包括病历、医疗记录、药物处方等。
    • 商业机密:包括产品设计、客户清单、商业计划、研发数据等。
    • *机密:包括国家安全信息、*文档、军事情报等。
  2. 泄露原因
    • 不当配置或漏洞:配置错误、漏洞或弱点可能会导致敏感数据在未经授权的情况下可被访问。
    • 社交工程:攻击者可能会使用欺骗、诱导或伪装的方式来获得敏感信息。
    • 内部泄露:内部人员可能故意或无意地泄露敏感信息。
    • 第三方服务提供商:外部服务提供商可能泄露敏感数据,如果合同或协议未妥善管理数据的安全性。
  3. 危害
    • 敏感信息泄露可能导致身份盗窃、金融欺诈、个人隐私侵犯、商业损失、声誉损害以及法律责任。
    • 对企业和组织来说,敏感信息泄露可能导致监管罚款、法律诉讼、客户流失和品牌受损。
  4. 防御措施
    • 数据分类和标记:将敏感信息明确定义、分类和标记,以便在处理和存储时进行妥善管理。
    • 数据加密:使用适当的加密技术来保护数据,以便即使在泄露时也难以被恶意使用。
    • 访问控制:实施访问控制措施,确保只有经过授权的人员才能访问敏感信息。

8.未验证的重定向和转发

未验证的重定向和转发(Unvalidated Redirects and Forwards)是一种常见的网络安全漏洞,通常发生在Web应用程序中。这种漏洞可能导致用户被引导到恶意站点,或者在不知情的情况下执行恶意操作。

  1. 漏洞原理
    • Web应用程序通常允许用户通过URL参数或表单字段指定重定向或转发目标,例如,通过提供一个跳转URL来实现用户登录后的页面跳转。
    • 攻击者可以伪造这些URL参数或表单字段,将用户重定向到他们控制的恶意站点,或者执行不良操作,如修改账户信息或执行未经授权的操作。
  2. 漏洞示例
    • 恶意重定向:攻击者可以构造一个恶意URL,诱使用户点击,然后将用户重定向到一个看似合法的站点,但实际上是攻击者控制的站点,用于窃取登录凭据或执行其他恶意操作。
    • 未经授权的操作:攻击者可以通过伪造请求参数,来执行未经授权的操作,例如更改用户密码、发送恶意消息或删除帐户。
  3. 危害
    • 未验证的重定向和转发漏洞可能导致用户隐私泄露、身份盗窃、数据损坏或恶意操作。
    • 这种漏洞还可能损害应用程序的可信度,因为用户可能会受到欺骗,以为他们正在与合法站点互动。
  4. 防御措施
    • 白名单验证:在接受用户提供的重定向或转发目标之前,应用程序应该验证这些目标是否在一个白名单内,只允许合法的目标。
    • 避免直接引用用户输入:不要直接使用用户输入来构建重定向或转发URL。而是使用应用程序内部的URL或路由。
    • 安全编程实践:遵循安全编程实践,不信任的数据不应该用于构建URL。
    • 警告用户:在进行重定向或转发操作时,向用户提供明确的警告,并要求他们确认操作。
    • 记录和监控:实施日志记录和监控机制,以检测未验证的重定向和转发尝试。
    • 定期安全审计:定期审查应用程序代码以查找和修复潜在的漏洞。

9.缺少功能级的访问控制

缺少功能级的访问控制(Missing Function-Level Access Control),也被称为不足的授权或权限漏洞,是一种常见的Web应用程序安全漏洞。这种漏洞通常发生在应用程序未正确实施访问控制策略时,导致攻击者可以访问或执行他们未经授权的功能或操作。

  1. 漏洞原理
    • Web应用程序通常具有各种功能和操作,例如查看、编辑或删除用户数据、提交订单、更改设置等。
    • 访问控制是一种机制,用于限制哪些用户或角色可以执行哪些功能。缺少功能级的访问控制意味着应用程序未正确实施这些机制。
    • 攻击者可以通过更改请求参数、URL或Cookie等方式来绕过正常的访问控制,以访问或执行他们未经授权的操作。
  2. 漏洞示例
    • 未经授权的数据访问:攻击者可以修改URL参数,以查看或编辑其他用户的个人资料或数据。
    • 未经授权的功能访问:攻击者可以通过更改请求参数或URL来执行管理员操作,例如更改密码、删除帐户或修改系统设置。
    • 未经授权的订单提交:攻击者可以通过更改订单请求中的参数来提交订单,而无需进行付款。
  3. 危害
    • 缺少功能级的访问控制漏洞可能导致数据泄露、未经授权的操作、用户隐私侵犯和财务损失。
    • 攻击者可以访问、修改或删除敏感数据,或者执行可能对应用程序和用户造成严重影响的操作。
  4. 防御措施
    • 实施严格的访问控制策略:确保只有经过身份验证和授权的用户可以执行特定功能和操作。
    • 验证和授权:在每个功能点上,都要对用户进行验证和授权,以确保他们有权执行该操作。
    • 数据层访问控制:在数据层面实施访问控制,确保用户只能访问他们有权访问的数据。
    • 避免依赖前端控制:不要依赖前端控制来限制功能访问,因为攻击者可以轻松绕过前端控制。
    • 会话管理:确保会话令牌或Cookie不易伪造,以防止攻击者篡改请求参数。
    • 安全编程实践:遵循安全编程实践,不信任的数据不应该用于控制访问。
    • 定期审计:定期审查应用程序代码以查找和修复潜在的功能级访问控制漏洞。

10.xml外部实体攻击

XML 外部实体攻击(XML External Entity Attack,通常简称为XXE攻击)是一种安全漏洞,发生在应用程序未正确处理XML输入时。攻击者可以利用这种漏洞来读取本地文件、执行远程请求,或导致拒绝服务等安全问题。

  1. 漏洞原理
    • XXE攻击利用XML解析器的功能,允许在XML文档中引用外部实体(External Entity)来读取或包含外部资源。
    • 攻击者通过构造恶意XML文档,注入外部实体引用,然后向应用程序提交该文档。当应用程序解析XML时,它可能会读取或包含外部资源,从而导致不安全的操作。
  2. 漏洞示例
    • 文件读取攻击:攻击者可以构造XML文档,通过引用本地文件的外部实体来读取敏感文件,例如/etc/passwd。
    • 远程请求攻击:攻击者可以构造XML文档,引用远程实体并发起恶意HTTP请求,可能导致服务器发起未经授权的请求。
    • 拒绝服务攻击:攻击者可以构造恶意XML文档,引用大量外部实体,从而耗尽服务器资源,导致拒绝服务(DoS)攻击。
  3. 危害
    • XXE攻击可能导致敏感数据泄露、服务器资源耗尽、拒绝服务、远程命令执行等严重安全问题。
    • 攻击者可以读取系统文件、发起网络请求、执行系统命令,或者导致服务器崩溃。
  4. 防御措施
    • 禁用外部实体引用:在XML解析器中禁用外部实体引用,或者限制它们的使用,以防止XXE攻击。
    • 使用安全的XML解析器:使用安全的XML解析库,这些库通常会默认禁用外部实体引用。
    • 输入验证和过滤:对接收的XML数据进行严格的输入验证和过滤,只接受必要的数据。
    • 沙箱环境:将XML解析操作放置在受控制的沙箱环境中,以限制其影响。
    • 最小权限原则:在执行XML解析操作时应以最低权限原则,以减小攻击面。
    • 安全编程实践:遵循安全编程实践,不信任的输入不应该用于构建XML文档。
    • 监控和审计:实施监控机制,以检测异常的XML解析活动,并定期审计代码以查找和修复漏洞。
上一篇:机器学习——数据预处理和特征工程(sklearn)


下一篇:美国硅谷高防服务器的性能配置