RedHat 7.0及CentOS 7.0禁止Ping的三种方法(附:ICMP数值类型与功能表)

作者:荒原之梦
前言:
“Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存时间,网络延迟等信息,而且响应Ping请求也会消耗服务器资源。因此,在服务器上禁用ICMP响应可以尽可能的隐藏服务器在Internet上的踪迹,降低受攻击面。本文介绍三种方法禁用(或启用)ICMP响应,即禁止(或允许)Ping.

操作环境:

RedHat 7.0(CentOS 7.0的操作方法与此一致)

方法一 临时禁用ICMP协议

修改文件/proc/sys/net/ipv4/icmp_echo_ignore_all 的值。
切换到root,输入命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
这样就将/proc/sys/net/ipv4/icmp_echo_ignore_all 文件里面的 0 临时改为了1 ,从而实现禁止ICMP报文的所有请求,达到禁止Ping的效果,网络中的其他主机Ping该主机时会显示“请求超时”,但该服务器此时是可以Ping其他主机的。
如果想启用ICMP响应,则输入:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
注0:由于/proc/sys/net/ipv4/icmp_echo_ignore_all 这个文件是只读的,即使我们使用root用户登陆,vim打开/proc/sys/net/ipv4/icmp_echo_ignore_all ,将里面的 0 该为1 之后使用qw! 强制保存也无法完成修改。因此上面这个方法只是临时的,一旦服务器重启就又会回到默认的 0 状态(假设修改前/proc/sys/net/ipv4/icmp_echo_ignore_all 里面的值就是 0 )。如果想永久修改(当然也可以改回来,只是不再受服务器关机或重启的影响)请使用方法二或方法三。

方法二 永久禁用ICMP协议:

禁用ICMP协议,输入:
vim /etc/sysctl.conf
添加一条信息:
net.ipv4.icmp_echo_ignore_all = 1
保存并退出。
输入:
sysctl -p
使配置生效。
启用ICMP协议,输入:
vim /etc/sysctl.conf
将:
net.ipv4.icmp_echo_ignore_all = 1
修改为:
net.ipv4.icmp_echo_ignore_all = 0
如果没有net.ipv4.icmp_echo_ignore_all = 1 就添加:
net.ipv4.icmp_echo_ignore_all = 0
保存并退出。
输入:
sysctl -p
使配置生效。
注1:如果想启用ICMP响应,不能直接在/etc/sysctl.conf 里删除net.ipv4.icmp_echo_ignore_all = 1 之后sysctl -p . 这样做仍然是禁止Ping的状态,此时使用命令:vim /proc/sys/net/ipv4/icmp_echo_ignore_all 查看发现其值仍然是1 , 即仍处于拒绝ICMP响应的状态。

方法三 配置IPTABLES防火墙

Iptables防火墙是集成于Linux内核的IP信息包过滤系统。方法三不能和上面的方法一和方法二组合使用。即,在使用方法三时不能已经使用方法一或方法二禁止了Ping.
禁止Ping,输入:
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
停止禁用Ping,输入:
iptables -D INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

上面两条命令的简要解释:

-A:添加防火墙规则.
INPUT:入站规则.
-p icmp:指定包检查的协议为ICMP协议.
--icmp-type 8:指定ICMP类型为8(关于ICMP类型与数值的对应关系和功能,见注3).
-s:指定IP和掩码,“0/0”表示此规则针对所有IP和掩码.
-j:指定目标规则,即包匹配则应到做什么,"DROP"表示丢弃.
注2:由于方法三是对防火墙进行的设置,所以使用方法三禁止Ping后只会阻止来自外网的Ping请求,内网主机的Ping请求仍然会正常响应。使用方法一和方法二禁止Ping后不仅会阻止外网的Ping请求也会阻止内网的Ping请求。
注3:ICMP数值类型与功能表
Type
Code
Description
Query
Error
0
0
Echo Reply
x
3
0
Network Unreachable
x
3
1
Host Unreachable
x
3
2
Protocol Unreachable
x
3
3
Port Unreachable
x
3
4
Fragmentation needed but no frag. bit set
x
3
5
Source routing failed
x
3
6
Destination network unknown
x
3
7
Destination host unknown
x
3
8
Source host isolated (obsolete)
x
3
9
Destination network administratively prohibited
x
3
10
Destination host administratively prohibited
x
3
11
Network unreachable for TOS
x
3
12
Host unreachable for TOS
x
3
13
Communication administratively prohibited by filtering
x
3
14
Host precedence violation
x
3
15
Precedence cutoff in effect
x
4
0
Source quench
5
0
Redirect for network
5
1
Redirect for host
5
2
Redirect for TOS and network
5
3
Redirect for TOS and host
8
0
Echo request
x
9
0
Router advertisement
10
0
Route solicitation
11
0
TTL equals 0 during transit
x
11
1
TTL equals 0 during reassembly
x
12
0
IP header bad (catchall error)
x
12
1
Required options missing
x
13
0
Timestamp request (obsolete)
x
14
Timestamp reply (obsolete)
x
15
0
Information request (obsolete)
x
16
0
Information reply (obsolete)
x
17
0
Address mask request
x
18
0
Address mask reply

修改WordPress后台默认登陆地址提高网站安全性

作者:荒原之梦
 
安装完WordPress后,默认的登陆地址就是:
http://XXX.XXX/wordpress/wp-admin/
(其中”XXX.XXX”表示你的网站域名)
由于这个时候网站后台登陆地址相当于是公开的,所以就很容易受到攻击,例如暴力破解。
下面我们通过在WordPress的默认登陆地址后面添加一段标记代码的方法防止发生这种情况。
 

具体步骤如下:

 

1 打开当前使用的WordPress主题中的functions.php文件

 
在末尾加上代码:
 
add_action('login_enqueue_scripts','login_protection');  
function login_protection(){  
    if($_GET['master'] != 'hello')header('Location: https://XXX.XXX');  
}

2 保存并退出

 
1 其中master(标记信息) 、hello(标记信息) 和XXX.XXX(网址) 都可以自定义。
2 URL是区分大小写字母的,所以设置标记信息时大小写字母和数字都可以使用(参见:HTML and URLs )。
3 由于URL编码中特殊字符一般都有专用含义,所以如果标记信息中使用了特殊字符需要确认一下是否能正常登陆。
 
这样WordPress后台的登陆地址就变成了:

 

http://www.XXX.XXX/wordpress/wp-login.php?master=hello
 
由于网站安装目录不同,如果上述地址无法登陆,可以尝试使用下面的地址登陆

 

http://www.XXX.XXX/wp-login.php?master=hello
 
这样一来,如果登陆地址错误就会跳转到XXX.XXX .
如果https://XXX.XXX 是你的网站的首页,那么就会跳转到首页。

解决WordPress用户名密码都正确但点击登陆就清空密码的问题

作者:荒原之梦

问题产生的环境与问题描述:

今天我在浏览器的书签里将我保存的用于登陆WordPress的书签名字改了一下,之后再登陆WordPress就出现提示说Cookies被阻止,要启用Cookies,但是启用了Cookies后再输入账号和密码进行登陆却发现一点击“登陆”按钮,密码就会被清空而且无法登陆。

解决办法:

将登陆地址由:
http://zhaokaifeng.com/wordpress/wp-admin/
改为:
http://zhaokaifeng.com/wordpress/wp-admin/index.php
之后换了一个浏览器重新在:
http://zhaokaifeng.com/wordpress/wp-admin/
登陆,发现可以正常登陆。
至此,问题解决,尚未发现异常。

使用Coding Pages托管网站

作者:荒原之梦

Coding官网:https://coding.net

Coding Pages官网页面:https://coding.net/pages/

具体过程如下:

1 注册Coding账户

可以先使用邮箱注册,之后再绑定手机号(如果不想升级成银牌会员也可以不绑定手机号)。

2 完善资料,升级成银牌会员

普通会员没有自定义域名的权限,银牌会员可以绑定自定义域名。

3 创建一个项目

使用 Coding Pages 托管网站 | 荒原之梦
图 1

项目名称一栏填写:

username.coding.me

其中username 必须是当前Coding账号的用户名。

项目属性设置为私有 。

勾选启用README.md文件初始化项目 复选框。

点击创建项目 。

4 上传网页文件

点击代码->上传文件 开始上传网页文件。

选中并打开网页文件。

填写提交说明 。

点击提交到master分支 。

提交代码时,不会上传文件夹。因此如果本地中在一个文件夹里面还有其他文件夹,要注意单独上传这些文件夹里面的内容,如果其他文件中引用了该文件夹中的内容要注意修改路径。

5 开启Coding Pages服务

Pages服务提供有“静态Pages”和“动态Pages”两种模式,下面的过程使用的是静态Pages.

点击Pages服务 。

部署来源 中选中master分支点击保存 。

这时我们就可以看到Coding Pages成功运行的提示:

使用 Coding Pages 托管网站 | 荒原之梦
图 2

6 绑定自定义域名

在域名注册商的域名管理页面将自己购买的域名的CNAME 记录到pages.coding.me .

使用 Coding Pages 托管网站 | 荒原之梦
图 3
使用 Coding Pages 托管网站 | 荒原之梦
图 4

添加解析记录时要添加@www 两个主机纪录,绑定域名时也要绑定XXX.XXX 和WWW.XXX.XXX 两个。这是为了保证无论用户在输入我们的网址时是否输入了www. 都可以打开网站。如果不添加www 主机纪录,输入WWW.XXX.XXX 是打不开我们的网站的。

使用 Coding Pages 托管网站 | 荒原之梦
图 5

Pages服务 页面分别将XXX.XXX 和WWW.XXX.XX 输入自定义域名 框,点击绑定 。

使用 Coding Pages 托管网站 | 荒原之梦
图 6

www.daohanggou.wang 是“完全限定域名FQDN”(即“网址”),而dohanggou.wang 是“域名”。

7 开启强制HTTPS访问

使用HTTPS加密传输网站文件可以在很大程度上防止中间人攻击。为了最大程度的确保全站HTTPS加密,网站中使用的外链也应该是HTTPS加密的URL,例如图片的URL。

8 添加Hosted by Coding Pages信息

Hosted by Coding Pages有文字版和图片版两种,文字版代码如下:

<p>Hosted by <a href="https://pages.coding.me" style="font-weight: bold">Coding Pages</a></p>

如果没有购买Coding会员,可以将上面的代码(或Hosted by Coding Pages图片)添加到网站首页,之后选中已放置 Hosted by Coding Pages 复选框就会自动提交审核,如果审核通过则我们的Coding Pages在被访问时就不会加载Pages跳转页。

Windows上设置Mozilla Thunderbird邮件客户端后台运行

作者:荒原之梦

操作系统:

Windows 10

Thunderbird版本:

52.6.0(32-bit)

Thunderbird官网页面:https://www.mozilla.org/zh-CN/thunderbird/

目前版本的Thunderbird本身并没有可以使我们在点击了关闭按钮后进入后台运行的选项,一旦我们关闭了Thunderbird可能就无法及时获得新邮件提醒。但是,如同Mozilla的Firefox浏览器一样,Mozilla Thunderbird也有很多插件可以使用,本文就通过安装插件的方法使Thunderbird可以进入后台运行模式。

一 打开Thunderbird,点击右上角的“Display the Thunderbird Menu”按钮

1

二 点击” Add-ons->Plugins”

2

三 在搜索框输入“minimize”

查找可以使Thunderbird进入后台运行的插件。

3

四 点击“See all 245 results”

这里我们选择搜索结果的第一个插件Minimize To Tray results ,根据介绍它可以Minimize windows into the system tray, 正好符合我们的要求。但是该插件后面并没有显示Add to Thunderbird 按钮,而是显示一个警示信息:

This add-ons is not compatible with your version of Thunderbird.

4

点击该插件会打开浏览器。

5

这时我们发现,该插件支持的Thunderbird版本是31.0-50.* ,而我们使用的是52.6.0 版本的Thunderbird. 不过没关系,该插件在52.6.0 版本的Thunderbird上仍然可以使用,只是我们需要手动安装它了。

五 下载插件

点击Download for Windows 下载该插件。

6

六 安装插件

重复第二步,在Thunderbird中打开Add-ons Manager 页面,点击Plugins->小齿轮->Install Add-on From File .

7

之后选中刚才下载的插件,依次点击打开->Install Now , 随后会提示我们重启Thunderbird,点击Restart Now .

七 设置插件工作模式

重启Thunderbird后我们就可以在Extensions 里找到Minimize To Tray revived(MinTrayR) 这个插件了,点击Options 可以对其进行设置。这里我们选择Minimize to tray的工作模式是Instead of closing, 也就是Minimize to tray instead of closing. 这时我们再点击Thunderbird的关闭按钮时Thunderbird就会进入后台运行,有新邮件时我们就可以及时收到提示。

在VirtualBox中安装BlackArch Linux

作者:荒原之梦

安装前的准备

下载系统映像:BlackArch Linux官网下载页面

在本文中我使用的是BlackArch Linux的Live ISO,这样可以减少安装时下载系统的时间。BlackArch的Live ISO文件有7.5G,我们可以使用BT种子来下载,这里BlackArch 2017.12.11 版本的BT种子,同时也是本文中使用的BlackArch版本。

另外,BlackArch Linux官网还提供有BlackArch 2017.06.18 版本的OVA Image下载,该文件下载完成后可以直接使用VirtualBox或VMware打开使用,文件大小为18G,启动系统后默认的用户名和密码为:root:blackarch ,BlackArch OVA Image的BT种子可以在这里下载

注:较新版本的BlackArch中只提供有64位的版本,BlackArch Linux官网不再提供新版本BlackArch的32位版本。

BlackArch简介

BlackArch官网:https://blackarch.org/index.html

BlackArch Linux是一个基于Arch Linux的主要用于渗透测试的操作系统,集成超过1900种工具。BlackArch是一个志愿项目,由志愿者维护开发,如图是部分志愿者的信息:

图 1

BlackArch安装

1 打开VirtualBox,新建一个虚拟电脑

图 2

内存:2G

硬盘:64G

2 添加ISO映像

点击启动 ,在选择启动盘 对话窗口添加我们已经下载的Live ISO. 之后点击启动 :

图 3

3 开始安装

这时就进入安装程序了,选中第一项,回车:

图 4

之后输入用户名和密码就登陆进系统了:

root:blackarch

由于我们使用的是Live ISO,可以不用联网就完成安装,但是在这里我们还是先连上网再进行安装,联网方法:

右键->network->wicd-gtk
图 5

这样就打开了网络连接的图形化界面,点击Connect 就可以自动联网了。

图 6

连上之后是这样的:

图 7

右键选择terminals ,选择一种颜色的终端输入:

ping www.baidu.com

显示可以Ping 通:

图 8

在之前版本的BlackArch中为了检查网络是否已经连接,在脚本中采用的是ping www.google.com 的方式进行判断的,本文中使用的这个版本则将用于判断网络是否正常连接的网址更换成了http://github.com :

输入命令:

vim /bin/blackarch-install

 

图 9

如果你的网络能连接http://github.com 就不需要做任何更改,否则就需要换成一个你的网络状态下可以访问的网址。

输入命令:

blackarch-install

输入2 :

图 10

输入1 :

图 11

这里让我们选择键盘类型,一般在中国大陆销售和使用的计算机键盘都是美式全键盘,因此这里输入us :

图 12

这里让我们设置一个主机名,根据自己的想法设置就可以:

图 13

这里设置将BlackArch安装在哪块硬盘上,由于我的虚拟机里只挂载了一块硬盘,这里也就只显示了sda ,输入sda :

图 14

输入y 使用cfdisk 创建root 、boot 和swap 三个分区:

图 15

安装脚本询问我们是否从内存的第0位分区表开始,输入y :

图 16

选择dos 并回车:

图 17

下面开始分区了。

开始创建Boot引导分区

选中New 并回车:

图 18

输入500M 并回车:

图 19

选中primary 并回车:

图 20

选中刚才创建的分区并选中Bootable 并回车:

图 21
图 22

至此,Boot引导分区创建成功。

开始创建Swap交换分区

选中空闲空间之后选中New 并回车:

图 23

输入512M 并回车:

图 24

选中primary 并回车:

图 25

在这个分区里我们需要指定一个不同的分区类型。选中Type 并回车:

图 26

选中82对应的Linux swap / Solaris 并回车:

图 27

至此,Swap交换分区创建成功。

开始创建Root根分区

仍然是选中空闲空间,选中New 并回车:

图 28

这一次不需要输入分区大小了,就按默认的,也就是将剩下的全部磁盘空间都划分到Root根分区:

图 29

选中primary 并回车:

图 30

至此,Root根分区创建成功。

现在,我们需要保存分区表。选中Write 并回车:

图 31

输入yes 确认所做的更改:

图 32

现在可以退出磁盘分区了,选中Quit 并回车:

图 33

接下来安装脚本会询问我们是否加密整个Boot分区,如果没有敏感信息可以选择不加密:

图 34

现在开始定义文件系统的类型

第一个是Boot分区,在/dev/sda1 ,输入:

/dev/sda1

Boot分区的文件系统类型设置为Ext4 ,输入:

ext4

第二个是Root分区,在/dev/sda3 ,输入:

/dev/sda3

Root根分区的文件系统类型设置为Ext4 ,输入:

ext4

第三个是Swap交换分区,在/dev/sda2 ,输入:

/dev/sda2

Swap交换分区不用指定文件系统类型。

这一步询问分区是否正确,输入y :

图 35

是否确认格式化分区,输入y :

图 36

安装正式开始了,Grab a coffee or make sex:

图 37

等待一段时间后就开始设置登陆账户了,首先设置root账户密码:

图 38

现在输入y 创建一个普通账户:

图 39

设置普通账户的密码:

图 40

输入y 选择时区:

图 41

输入UTC 选择世界标准时间:

图 42

完蛋了,Game Over了……

图 43

这只是一个小玩笑,输入reboot 重启后就可以进入安装好的BlackArch Linux系统了:

图 44

BlackArch安装(译文)

翻译:荒原之梦

原文地址:BlackArch Install

以下是译文:

该教程将会向你展示如何使用ISO和blackarch-installer安装BlackArch Linux. 这个教程中使用的是VirtualBox,但是如果你更喜欢其他虚拟化软件也可以使用它们。

我们假设你已经在USB或者DVD上完成了烧制并且你已经准备好进行安装了。当你引导Image映像时会看到类似下图所示的内容。选中选项并按下回车。【例如:BlackArch Linux(x86_64)for 64bit 】

如果你想使用VirtualBox 安装BlackArch,请确保你选择了正确的ISO。检查你的硬件是否支持虚拟化。如果支持虚拟化,那么就在你的UEFI/BIOS的设置里启用虚拟化。如果不支持虚拟化,你必须使用32位的ISO. 使用KVM的Qemu模拟处理器已经测试成功并可以代替VirtualBox使用。

图 1

等到请求登陆BlackArch的登录提示BlackArch login 出现。BlackArch的默认登录凭证是:

Login:root

Password:blackarch

为了开始安装,你必须执行BlackArch的安装脚本。为了避免可能导致你重新开始安装的任何问题,请确保在你想安装BlackArch的机器上有可用的网络连接。你可以使用这个命令:

ip a

列举出可用的网络连接。如果你想用Wifi或者只有使用Wifi这一个选择,你可能需要阅读BlackArch的wiki文档了解如何设置无线连接。(即:wifi-menu/netctl )如果你的键盘和默认的键盘(美式全键盘)不同,你可以设置对应于你的语言或国家的keymap按键映射。例如,你可以输入命令:

loadkeys

按照两位的国家代码选择你的键盘类型。

执行命令:

blackarch-install

开始BlackArch的安装脚本。

在本教程中,你可能会想在安装BlackArch的同时执行一些shell脚本。(你可以在不停止安装脚本的情况下于任何时候通过同时使用ctrl + alt + f2 来切换TTY终端(f1是你运行blackarch-install脚本的默认键(如果你不在其他TTY终端执行它的话……),f2,f3,f4,f5或f6将会打开一个新的TTY终端,这样你就可以执行任何你需要的命令。这仅仅是一个以防你不知道这些的提示)。

译者注:“TTY”直译为“电传打字机”,在早期计算机中出现带有显示屏的终端之前,TTY是一种常用的终端设备,就是将计算机需要显示的内容和操作者输入的内容都打印到纸上以显示出来。

图 2

现在应该显示出来的三个选项

1 使用Pacman软件包管理器从存储仓库安装

这是选择通过网络安装ISO的推荐选项,这可以从Arch和BlackArch的官方存储仓库中获取所需的安装包。

2 从Live-ISO安装

如果你下载了Live ISO文件而且你选择以这种方式安装的话,那么在安装的过程中就不需要网络连接。然而,为了获取系统更新,在安装完成后,一旦到达安装环境(在你引导进入新的安装之后)使用pacman-Syyu 开始一个通用的更新。

3 使用blackman从安装源安装

这种安装方法不推荐刚开始接触BlackArch的人使用,和pacman直接从存储仓库获取已经编译好的安装包不同的是,这种安装方法将从安装源获取源代码之后再进行编译。这和emerge在可用于Gentoo系统上的方法类似(blackman只是从源代码编译,emerge有更高级的灵活性而且提供了大量的特性)

图 3

你可能已经选定了你想要的keymap按键映射。如果你的键盘是一个全键盘,你可以继续使用美式键码,然而,情况可能并非总是如此。如果你无法确定,你可能需要在BlackArch中通过选择2 来列举出所有可用的按键映射。大多数时候,都是使用的英语国家的代码。对于法国的AZERTY键盘,按键映射的代码是fr ,对于西班牙语则是es 等等。如果你知道按键映射,选择1

图 4

你需要按照上面的解释写下按键映射的代码

图 5

主机名称基本上是在你的本地网络上你想给你的计算机的名字。计算机将解析成你给定的名称。你可以选择一个任何你喜欢的名字,并且你可以在任何时候通过编辑/etc/hostname 这个文件来改变你的主机名。

图 6

一个可用的网络接口列表将被显示。正如之前的解释,如果可能的话,你需要设置你的以太网接口,安装脚本不提供针对Wifi的支持。但是使用Wifi仍然是可能的,只是你需要自己设置它。

图 7

1 自动DHCP(如果你在厨房工作就使用这个)

这是一个简单的而且被推荐的方法去自动设置你的网络信息。(这将从你的DHCP服务器或者路由设备上请求或租赁一个IP。)

2 手动(如果你是1337的话可以使用这个方法)

如果你选择手动的方法,你必须知道你的网络的信息(你的网关,局域网IP地址,子网掩码等等。)

3 跳过(如果你已经连上网了可以使用这个方法)

如果你的网络接口已经设置好了而且可以连上网,那么就使用这个选项。

在一些情况下,例如VirtualBox或者Qemu这样的虚拟化环境, 你的一些防火墙规则将可能会阻碍ICMP报文,这将会禁止使用ping并在脚本退出后阻止安装,这个时候你就要考虑你的网络接口的配置是否正确。你可以通过编辑位于/usr/bin/blackarch-install 这个文件中以if ! ping -c 1 github.com > /dev/null 2>&1 开头的第545行到第548行来解决这个问题,你必须检查每一行的条件或者移除它。一旦编辑完成并且保存好了,就重新开始运行blackarch-install 脚本进行安装。

图 8

Pacman软件包管理器现在已经更新了每个Repo,下载并且安装了一些为进行下一步安装BlackArch所需要的基本系统包。如果你的下载速度很慢,这将会花费一些时间,不如先去喝一杯咖啡吧!

图 9

一旦准备工作就绪,脚本运行完毕,你就需要在你安装BlackArch的设备上设置分区了。你将需要选择使用2个或者3个分区。

1) Boot启动分区

2)Root根分区

3)Swap交换分区*

*交换分区是可选的,如果在虚拟机上你可以不设置交换分区。

我们仍然推荐你设置一个小一点的交换分区,这可以避免由于内存潜在的问题导致的系统崩溃。

为了防止有两块硬盘被列出而你不确定你想将BlackArch安装在哪一块硬盘上,你可以使用fdisk 来显示目标硬盘的大小,例如,如果你已经列出了sda这块硬盘并且想知道它的大小和可选的文件系统(如果有的话),那么就输入:

fdisk -l -o device,size /dev/sda
图 10

当脚本问你是否想使用cfdisk创建分区时,如果你想创建就使用y ,否则就使用n 停止安装。

图 11

如果你的存储设备已经具有标签类型,你就不会看到这个,否则就选择dos

图 12

现在你可以设置分区了。示例给出的是一个基本的而且在大多数时候都可以使用的分区方案。你需要至少创建两个分区(Boot启动分区和Root根分区),但在本示例中我们将会创建包括交换分区在内的3个分区。让我们从第一个分区,Boot启动分区开始吧。

图 13

使用方向键,选中New ,按下回车键并输入500M ,对于大多数使用者而言这些空间已经足够了,因为你不会同时拥有超过3个不同的内核。

图 14

选中primary 并按下回车:

图 15

你需要将此分区标记为可引导分区。选中bootable 选项并按下回车。屏幕上会出现这个* ,之后进入第二个分区,按下向下的方向键选择空闲空间,之后选中New

图 16

这就是我们的交换分区了。按下回车键,输入512M .再次按下回车键并选择primary 。

图 17

在这个分区里你需要一个不同的文件系统类型。使用方向键选中Type 并按下回车。这时将会显示一个列表。

选中Linux swap, solaris 并按下回车键。让我们开始最后一个分区的设置吧。这个过程和我们之前做过的一样,选择一个没被使用的空闲空间,之后选中New 并按下回车键。这一次你不需要输入任何东西了。我们希望能使用所有可被使用的空闲空间。简单的按下两次回车就可以了。

图 18

在你退出cfdisk之前你必须保存分区表。选中Write 并按下回车。它将会询问你是否确认你所做的更改。输入yes 并按下回车键,现在你可以退出了。

图 19

你可以选择使用LUKS对你的Root根分区进行完全加密。如果你有一些敏感数据而且你想对任何人都保持这些数据的私有状态,我们推荐你输入y (防止你的电脑被盗或者被某个机构拿走……)。不要做太容易的事,因为结果可能会很残酷。

请注意,如果你忘记了密码那么将无法解锁使用LUKS加密的分区,数据和密码都可以被恢复,一个好的举措就是在一张纸上写下你的密码,之后把它藏在一个安全的地方。这可以防止你忘记密码,把你从麻烦中解救出来。

如果你有一个SSD硬盘,并且你使用LUKS加密了SSD硬盘上的数据,这将会大幅减少SSD硬盘的使用寿命。加密存储数据需要大量的硬盘写入操作(解密也是如此),你可以通过在bootloader中添加root_trim=yes 作为一个选项来解决这个问题。

对于Grub,你需要寻找当前使用的内核中的这一行,类似下面这样:

linux /vmlinuz … root=/dev/mapper/ … root_trim=yes

(把它加在这一行的结束)

图 20

每个分区的文件系统都必须被定义。因为Ext4是最新的文件系统,所以默认是Ext4.第一步,Boot启动分区在/dev/sda1 ,选择Ext4文件系统,第二步,Root根分区在/dev/sda3 ,选择Ext4文件系统。最后一个是交换分区,在/dev/sda2 ,如果你没有创建交换分区,就按一下回车键就可以了。

图 21

(如果你选择了使用LUKS加密)安装脚本会询问你三次以确认。最后一次必须以YES 来确认(需要使用大写字母)。

如果你选择了加密整个Root根目录的选项,你必须设置一个密码。在引导完加载程序之后,将在每个引导程序中显示一次请求密码的提示。

当你确认你的密码时,Root根分区将被立即加密。当该分区被完全加密后,安装脚本需要挂载硬盘,这个时候你需要输入密码来解密Root根分区,这样安装脚本才可以挂载硬盘并完成安装。

图 22

现在安装脚本将为你的系统下载最新的必要安装包。这需要一点时间,具体取决于你的网速。当这个安装任务完成时,你将会被要求设置一个root账户的密码。

图 23

下一步你需要创建一个普通账户,将root账户作为唯一的账户是错误的并且你不应该这么做。

图 24

当安装脚本询问你选择一个镜像时,(使用默认的就可以)你可以在稍后做出更改。

图 25

从现在开始,最后的这三个步骤是可选的。脚本会询问你是否想拥有X display(图形化环境,一个桌面),在你选择y 并按下回车键之前,请确保没有人看着你的显示器,这很重要。

图 26

你需要在是否下载VirtualBox guest additions/tools上做出选择,如果你对此不感兴趣,输入n 并按下回车。如果你想要BlackArch tools,那么就输入y 从BlackArch Repo下载和安装超过1500种工具,如果你想要的话,也可以之后获取。这是一个可以跳过的选项。

图 27

如果你想知道这是什么意思,这只是开发人员给你开的一个“玩笑”。换句话说,这意味着安装已经结束了。你可以重启并登陆你的全新的BlackArch Linux操作系统。

图 28

如果你选择了加密整个Root根分区,每次引导的时候都会提示你输入使用LUKS加密的该分区的密钥。

图 29

享用BlackArch Linux吧,而且要记得BlackArch的开发人员/贡献者都是志愿者。所有这些工作都是在他们的空闲时间完成并免费提供的。你可以通过捐赠来帮助我们,所有捐赠款项都将只用于该项目。

Kali Linux安装Google中文输入法(只需5步)

作者:荒原之梦

前言:

之前我在kali上安装过中文输入法,并且写了一篇博文(Kali Linux安装中文输入法全纪录),这篇博文里的步骤是当时一边摸索一边记录下的,思路有点混乱,而且还同时安装了两种输入法。今天又安装了一次中文输入法,使用的是Google拼音输入法,总共只有五步,下面是安装步骤。

一 添加更新源

命令:

leafpad /etc/apt/sources.list

Kali的国内更新源可以查看我的这篇博文(2017年Kali Linux更新源)。

二 更新系统

命令:

apt-get update

三 安装fcitx

命令:

apt-get install fcitx

四 安装Google拼音输入法

apt-get install fcitx-googlepinyin

五 重启系统

命令:

reboot

注:可以使用“Ctrl+空格”在中英文输入间切换。

Fedora Linux安装deb包

作者:荒原之梦

前言:

我们知道,在Linux系统上有两种主要的软件包格式,分别是RPM和deb.

RPM是“RPM Package Manager(RPM软件包管理器)”的递归缩写。RPM是一种用于软件打包、安装、卸载和升级的管理工具,其生成的文件扩展名为“.rpm”. RedHat Linux、OpenLinux和Turbo Linux等Linux发行版中都使用了RPM.

deb是基于Debian的操作系统(如Debian、Ubuntu和Kali)中软件包格式的扩展名(.deb). “deb”的名称来源和“Debian”一样,都是取自Debian的创始人Lan Murdock的妻子Debra Murdock. 处理deb包经常使用的工具是dpkg.

有时,我们可能会需要在使用了RPM的Linux上使用deb包。这时候我们可以使用Alien工具将deb包转换成RPM包。

下面介绍将deb包转换成RPM包的方法以及如何在Fedora上安装RPM包。

一 安装Alien

安装Alien需要使用root权限,如果我们是以普通用户的身份登陆的Fedora,那么我们就需要首先切换到root用户再进行接下来的操作或者使用命令:

sudo

临时获取root权限(我在Fedora中使用“sudo”命令时发生了无法使用的问题,解决方法请查看我的博文 Fedora Linux中解决“xxx不在sudoers文件中”)。

输入命令:

yum install alien

安装Alien。

输入命令:

alien -h

如果能在终端返回Alien的帮助信息则表明Alien安装成功。

二 将deb包转换成RPM包

首先建立一个新的文件夹,将deb安装包放在这个文件里,之后右键,选择“在终端打开”,切换到root用户,输入命令:

alien -r xxx.deb

转换完成后我们就可以看到以“.rpm“为扩展名的RPM包了。

三 安装RPM包

使用命令:

rpm -i xxx.rpm

这样安装可能会出现很多依赖关系需要解决。为了能使软件安装过程中自动解决依赖关系,我们可以使用命令:

yum -y localinstall xxx.rpm

在安装的同时自动解决有关依赖关系。

Fedora中解决“YourUserName不在sudoers文件中。此事将被报告”的问题

作者:荒原之梦

问题描述:

在Fedora中执行一些操作时需要使用root权限,当我使用命令:

sudo

想在普通用户中临时获得root权限时,却被提示:

“xxx 不在 sudoers 文件中。此事将被报告。”

注:其中“xxx”为一个普通用户的用户名。

解决办法:

输入:

su

之后输入root密码,切换到root用户。

输入:

visudo

注:“vi”和“sudo”之间没有空格。

移动光标找到:

“root    ALL=(ALL)       ALL”

将光标停留在这一行,之后按下“o”键在这一行的下面插入一个空白行,输入:

“xxx     ALL=(ALL)       ALL”

注:其中“xxx”为一个普通用户的用户名。

保存并退出。

之后输入:

sudo chmod 440 /etc/sudoers

将“sudoers”的权限改为440.

至此该问题解决。

使用WordPress搭建的网站如何使URL中不出现”wordpress”

作者:荒原之梦

问题描述:

当我们在服务器中安装WordPress时,通常,WordPress默认是将WordPress的文件安装到了一个名为“wordpress”的文件夹里。这样在一般情况下,如果我们要打开网站首页或者其他页面,则URL中必须有“wordpress”才能打开相应的网页。就像在刚安装完成WordPress后我们需要使用像这样的URL:“http://www.zhaokaifeng.com/wordpress”才能访问荒原之梦的首页,那么如何直接使用“http://www.zhaokaifeng.com”就可以访问首页呢?

下面就是解决步骤。

  1. 将WordPress安装目录中的” index.php”文件放到名为“wordpress”的文件夹外面(“index.php”一般默认在“/wordpress”路径下)。

2.将“index.php”里面的

require( dirname( __FILE__ ) . '/wp-blog-header.php' );

修改成

require( dirname( __FILE__ ) . '/wordpress/wp-blog-header.php' );

3.在“设置-常规”中将“站点地址(URL)”中的“wordpress”删除。

注:千万不要更改” WordPress地址(URL)”对应的配置信息,否则wordpress的控制面板就打不开了。

之后保存更改。

至此就可以直接通过域名访问网站首页了。

CentOS安装命令行Web浏览器Links

作者:荒原之梦

前言:

Links是一个运行在命令行模式下的Web浏览器,只能查看字符。Links的官网是Click here

安装Links

yum install links

使用Links

links URL

首次使用Links,例如,我们输入:

links www.zhaokaifeng.com

会看到Links的欢迎界面:

图 1

Links的基本操作

Esc键:调出Links顶部菜单。

方向键:选择不同的项目,展示下拉菜单或者翻页。

Q键:退出Links:

VirtualBox报错:不能为虚拟电脑XXX打开一个新任务

作者:荒原之梦

报错产生的背景

今天在这里(https://www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/)下载了一个用于VirtualBox的Kali Linux虚拟机文件(使用VirtualBox可以直接打开使用,不用执行安装过程)。但是将该文件导入到VirtualBox中之后,点击“启动”却出现了如下报错信息:

“不能为虚拟电脑 Kali-Linux-2017.3-vbox-amd64 打开一个新任务.

Implementation of the USB 2.0 controller not found!

Because the USB 2.0 controller state is part of the saved VM state, the VM cannot be started. To fix this problem, either install the ‘Oracle VM VirtualBox Extension Pack’ or disable USB 2.0 support in the VM settings.

Note! This error could also mean that an incompatible version of the ‘Oracle VM VirtualBox Extension Pack’ is installed (VERR_NOT_FOUND).”

报错弹窗如图

图 1

报错信息的中文翻译如下

“未找到USB 2.0控制器的实现!

因为USB 2.0控制器状态是保存的VM状态的一部分,所以不能启动VM。要解决这个问题,可以安装“Oracle VM VirtualBox扩展包”或在VM设置中禁用USB 2.0支持。

注意!这个错误还可能意味着安装了“Oracle VM VirtualBox扩展包”的不兼容版本(VERR_NOT_FOUND)。”

解决方法

根据报错提示,我们知道出现这个错误信息可能和USB2.0控制器有关,我们可以选择禁用USB2.0或者安装“Oracle VM VirtualBox Extension Pack”这个扩展包。

通过禁用USB控制器解决问题

我们首先来尝试通过禁用USB2.0的方式解决这个问题。

在VirtualBox中依次打开“设置->USB设备”,将启用“USB控制器”前面的勾打掉。点击“确定”。

之后,选中刚才报错的虚拟机,点击“启动”,此时已经可以正常启动。

问题解决。

通过安装“Oracle VM VirtualBox Extension Pack”扩展包解决问题

直接禁用USB控制器确实可以简单直接的解决问题,但是也带来了新的问题,因为如果我们想要在虚拟机里连接USB设备(比如U盘或者USB无线网卡)就必须启用USB控制器。因此安装所需要的扩展包才是更好的解决办法。

我们可以在VirtualBox官网的下载页面(https://www.virtualbox.org/wiki/Downloads)找到扩展包的下载方式,如图点击“All supported platforms”即可下载:

图 2

如果VirtualBox正在运行,则扩展包下载完成后VirtualBox会自动弹出安装扩展包的提示:

图 3

点击“安装”即可。

安装完成后会弹出安装成功的提示:

图 4

此外,如果下载完成后的扩展包的图标是如图5所示的绿色方盒,也可以双击进行安装。如果不是如图5所示的绿色方盒:

图 5

则可以通过在VirtualBox中依次点击“管理->全局设定->扩展”,如图6所示,找到对应的扩展安装包,安装即可:

图 6

安装完成扩展包后,取消禁用USB控制器,之后开机,可以正常启动,问题解决。

注:

“Oracle VM VirtualBox Extension Pack”这个扩展包中有对USB2.0和USB3.0的支持,上述报错并不是因为机器环境的原因出现的偶然报错。因此,新安装的VirtualBox最好直接就安装上这个扩展包。

ARP攻击之Kali Linux局域网断网攻击

作者:荒原之梦

特别声明:

我们学习研究网络安全技术的目的应是为了维护网络世界的安全,保护自己和他人的私有信息不被非法窃取和传播。请您遵守您所在地的法律,请勿利用本文所介绍的相关技术做背离道德或者违反法律的事情。

Special statement:

The purpose of our study of cyber security technology should be to maintain the security of the cyber world and protect the private information of ourselves and others from being illegally stolen and disseminated. Please comply with your local laws. Do not take advantage of the relevant technology introduced in this article to do anything that deviates from morality or against the law.

前言:

ARP攻击是基于ARP协议的工作模式进行的,关于ARP协议和ARP攻击的基础知识请查看荒原之梦网(zhaokaifeng.com)的这篇博文ARP协议与ARP攻击入门

ARP攻击能够实现的技术前提有两个,一是作为攻击者的计算机需要和被攻击者的计算机在一个局域网中,二是作为攻击者的计算机需要知道被攻击者计算机的局域网IP。本文将模拟真实的攻击过程,在不与被攻击的计算机发生物理接触的情况下实现对其的局域网断网攻击。

网络拓扑图

图 1.

注:
在这里,作为攻击者的计算机使用的是安装在VMware Workstation中的Kali Linux,我们需要在VMware的设置中将Kali的联网方式改为“桥接模式”,并且不要勾选“复制物理网络连接状态”。

获取目标主机IP

在这里,我们使用Ettercap对内网进行扫描以获取目标主机IP和网关的信息。输入命令:

ettercap -G

打开Ettercap的GUI界面:

图 2.

依次点击“Sniff(嗅探) -> Unified sniffing(统一嗅探)”,之后弹出如下界面让选择进行扫描的网络接口(Network interface):

图 3.

这里我们使用默认的eth0端口。点击“OK”。

之后依次点击“Hosts(主机) -> Scan for hosts(扫描主机)”。

这时会出现一个进度条,等待进度条结束,依次点击“Hosts -> Hosts list(主机列表)”即可显示本机所在局域网中除本机之外,当前已连接至网络的设备的IP地址和MAC地址:

图 4.

注:
Ettercap扫描结果的第一项一般是本局域网中的网关,如图中的192.168.50.1就是实验时局域网中的默认网关。

这样我们就获得了目标主机的IP和本局域网的网关。

对局域网内的目标主机实施断网攻击

我们使用Kali Linux中的Arpspoof进行ARP攻击。不过,在一些版本的 Kali Linux 中并没有安装 Arpspoof 这个工具,由于 Arpspoof 是 dsniff 工具集的一部分,因此,要安装 Arpspoof, 就需要安装 dsniff 这个工具集,命令如下:

apt-get install dsniff

在实施断网攻击前,我们先测试一下目标主机192.168.50.130是不是能上网,输入命令:

ping www.baidu.com

发现可以Ping通,说明目标主机在攻击开始之前是可以上网的。

在我们的攻击机上,即Kali中,输入命令,例如:

arpspoof -i eth0 -t 192.168.50.130 192.168.50.1

arpspoof 命令的格式如下:

arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host

注:
由于使用 Arpspoof 进行断网攻击的原理就是在被攻击的计算机与路由器之间进行 ARP 劫持,但是劫持完成之后不转发被攻击的计算机与路由器之间的通信数据包。为了保证 Kali 不会将被劫持的数据包转发出去,必须将 /proc/sys/net/ipv4/ip_forward 文件中的数值设置为 0, 如果设置为 1, 则使用 Arpspoof 进行的断网攻击则不会生效。

回车就开始对目标主机进行断网攻击了,此时我们在目标主机上执行命令:

ping www.baidu.com

就会返回一个错误提示:“Ping请求找不到主机www.baidu.com”。

通过上述命令产生的Arpspoof的攻击进程不会自动停止,除非当前攻击链路被中断,如攻击机关机或者断开与当前局域网的连接,或目标机关机或者断开与当前局域网的连接或者更改了其在当前局域网内的IP地址。我们可以在Arpspoof进程所在终端上使用“Ctrl+Z”手动关闭Arpspoof的攻击进程。

关闭Arpspoof的攻击进程后,之前被攻击的目标主机一般会在几秒钟的时间内自动恢复正常的网络连接。

附:

Ettercap0.8.2的帮助信息(命令ettercap -help):

ettercap 0.8.2 copyright 2001-2015 Ettercap Development Team



Usage: ettercap [OPTIONS] [TARGET1] [TARGET2]


TARGET is in the format MAC/IP/IPv6/PORTs (see the man for further detail)


Sniffing and Attack options:

-M, --mitm <METHOD:ARGS>    perform a mitm attack

-o, --only-mitm             don't sniff, only perform the mitm attack

-b, --broadcast             sniff packets destined to broadcast

-B, --bridge <IFACE>        use bridged sniff (needs 2 ifaces)

-p, --nopromisc             do not put the iface in promisc mode

-S, --nosslmitm             do not forge SSL certificates

-u, --unoffensive           do not forward packets

-r, --read <file>           read data from pcapfile <file>

-f, --pcapfilter <string>   set the pcap filter <string>

-R, --reversed              use reversed TARGET matching

-t, --proto <proto>         sniff only this proto (default is all)

--certificate <file>    certificate file to use for SSL MiTM

--private-key <file>    private key file to use for SSL MiTM


User Interface Type:

-T, --text                  use text only GUI

-q, --quiet                 do not display packet contents

-s, --script <CMD>          issue these commands to the GUI

-C, --curses                use curses GUI

-D, --daemon                daemonize ettercap (no GUI)

-G, --gtk                   use GTK+ GUI


Logging options:

-w, --write <file>          write sniffed data to pcapfile <file>

-L, --log <logfile>         log all the traffic to this <logfile>

-l, --log-info <logfile>    log only passive infos to this <logfile>

-m, --log-msg <logfile>     log all the messages to this <logfile>

-c, --compress              use gzip compression on log files


Visualization options:

-d, --dns                   resolves ip addresses into hostnames

-V, --visual <format>       set the visualization format

-e, --regex <regex>         visualize only packets matching this regex

-E, --ext-headers           print extended header for every pck

-Q, --superquiet            do not display user and password


LUA options:

--lua-script <script1>,[<script2>,...]     comma-separted list of LUA scripts

--lua-args n1=v1,[n2=v2,...]               comma-separated arguments to LUA script(s)


General options:

-i, --iface <iface>         use this network interface

-I, --liface                show all the network interfaces

-Y, --secondary <ifaces>    list of secondary network interfaces

-n, --netmask <netmask>     force this <netmask> on iface

-A, --address <address>     force this local <address> on iface

-P, --plugin <plugin>       launch this <plugin>

-F, --filter <file>         load the filter <file> (content filter)

-z, --silent                do not perform the initial ARP scan

-6, --ip6scan               send ICMPv6 probes to discover IPv6 nodes on the link

-j, --load-hosts <file>     load the hosts list from <file>

-k, --save-hosts <file>     save the hosts list to <file>

-W, --wifi-key <wkey>       use this key to decrypt wifi packets (wep or wpa)

-a, --config <config>       use the alterative config file <config>


Standard options:

-v, --version               prints the version and exit

-h, --help                  this help screen

ARP 协议与 ARP 攻击入门

作者:荒原之梦

一、ARP 协议

ARP 协议是一个年代相当“久远”的网络协议。ARP 协议制定于 1982 年 11 月,英文全称:Address Resolution Protocol,即“地址解析协议”。

我们知道,虽然终端设备想要上网必须具有公有 IP 地址,但是在 Internet 的 TCP/IP 协议中,IP 地址的作用是标识一台主机或路由器与一条链路的接口,也就是说 IP 地址指明了数据由一个网络传输到另一个网络的路径,但是我们知道,为了节约 IP 地址,通常情况下,在一个内部网络中,主机常常使用 RFC 规定的三种私有 IP 地址作为局域网中主机的 IP 地址,而且主机的 IP 地址是由该网络的路由器动态分配的,如果数据的传输仅仅依赖于 IP 地址,那么当数据到达一个内部网络中时就可能因为目标主机的 IP 地址发生改变而将数据传输到了错误的目标主机。但是不同设备的物理地址(MAC 地址)是全网唯一的,而且一般也不会被改变(MAC 地址是写入网卡的,一般情况下是固定不变的),因此使用 MAC 地址作为信息的标识,定位目标网络设备就可以保证信息能够正确抵达目标主机。而通过目标设备的IP地址查找目标设备的 MAC 地址就是 ARP 协议的基本功能。

1.1. ARP 协议的工作过程

由于内部网络中主机的IP地址往往是动态分配的,因此,在主机中是有 ARP 缓存的,记录着本网络中 IP 地址与 MAC 地址的对应关系。那么,这个 ARP 缓存是怎么生成的呢?首先,当网络中的主机 A 需要向主机 B 发送信息时,会将包含目标 IP 地址的 ARP 请求广播到该网络中的所有主机上,网络中的其他主机在收到主机 A 的 ARP 请求后可以自主的发送 ARP 应答报文,应答中包含自己的 IP 和自己的 MAC 地址,主机 B 也会发送这样的应答报文给主机 A. 这样主机 A 就知道了主机 B 的 MAC 地址与 IP 地址了。

ARP 协议的工作是建立在网络中各个主机之间相互信任的基础上的,一台主机在收到其他主机的 ARP 应答报文时并不会采取措施校验该报文的真实性,而是直接就记录到了自己的 ARP 缓存中以备下次使用。

、ARP攻击

ARP 攻击的第一步就是 ARP 欺骗。由上述“ARP 协议的工作过程”我们知道,ARP 协议基本没有对网络的安全性做任何思考,当时人们考虑的重点是如何保证网络通信能够正确和快速的完成——ARP 协议工作的前提是默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。不过后来,人们发现 ARP 应答中的 IP 地址和 MAC 地址中的信息是可以伪造的,并不一定是自己的真实 IP 地址和 MAC 地址,由此,ARP 欺骗就产生了。

2.1. ARP 攻击的分类

根据攻击的实现方式或者攻击的效果不同,可以将 ARP 攻击分成如下三种类型:

  • ARP 仿冒攻击:冒充内网中的网关或计算机;
  • ARP 欺骗攻击:欺骗内网中的网关或计算机;
  • ARP MAC 地址泛洪攻击。

2.2. ARP 仿冒与欺骗攻击

ARP 的应答报文是可以伪造的,因此,同时进行 ARP 仿冒与欺骗攻击就可以实现内网环境下的“中间人攻击”。

假设一个网络中有 3 台主机,分别为 A、B 和 C. 当主机 A 向网络中发送了 ARP 请求时,用于攻击的主机 C 可以假装是 B, 然后向主机 A 发送一个伪造的 ARP 应答报文,由于 A 并不会采取措施验证该报文真伪,而是直接存入自己的 ARP 缓存并在需要时使用(ARP 缓存分两种,一种是静态 ARP 缓存,该类缓存只要主机不关机就一直存在。另一类是动态 ARP 缓存,该类缓存是有时效限制的,一般 ARP 动态缓存的最长生命周期是 10 分钟,如果一个动态缓存项目在 2 分钟内没有被使用,则删除,如果在两分钟内被使用了,则增加两分钟的生命周期,直到达到 10 分钟的最长生命周期后进行更新),由此,C 就成功的欺骗了 A. 那么来自主机 B 的正确的应答报文去哪了?如果 A 收到了来自 B 的正确的应答报文,更新了自己的 ARP 缓存,那么 C 的 ARP 欺骗不就失败了吗?确实会发生这种情况,但是如果 C 不断的向网络中的各台主机大量发送伪造的 ARP 应答报文,直到同时欺骗了 A 和 B, C 就成功的对主机 A 和 B 进行了 ARP 欺骗。接下来 C 就可以监听 A 和 B 之间的流量,伪造 A 和 B 的通信内容或者阻止 A 和 B 的通信。

2.3. ARP MAC 地址泛洪攻击

交换机中会保存一份内网中活跃主机的 MAC 地址与 IP 地址对应关系的数据表,此时,如果交换机要转发数据包的主机在该数据表中,那么,交换机就会按照 MAC 地址与端口自动完成数据包的转发。

但是,如果交换机与内网中的某台主机长时间未通信,那么,相应的 MAC 地址表就会因“老化”而被自动删除。交换机会直到下次需要与该主机进行通信时才会通过广播的方式获取该主机的 MAC 地址。

于是,ARP MAC 地址泛洪攻击的原理就是向交换机发送大量的伪造 MAC 地址,挤占掉交换机 MAC 地址数据表的全部存储空间,使得因发生老化而被删除的 MAC 地址无法再被重新添加,此时,从交换机发出的所有数据包都会变成请求获取内网目标主机 MAC 地址的广播包——这时,我们就可以对交换机发动 ARP 仿冒与欺骗攻击了。

2.4. 为什么 ARP 攻击只能发生在局域网

当我们在说“ARP 攻击”时,我们还常常和另外一个词连系在一起:“局域网”。为什么ARP 攻击只能发生在局域网呢?或者说为什么 ARP 协议只能在局域网内发挥作用?这和互联网通信的原理以及 ARP 协议的功能有关。简单的说,我们可以这样理解:

我们知道,IP 地址位于 OSI 模型的第三层(网络层),MAC 地址位于 OSI 模型的第二层(数据链路层)。而路由器工作在三层或者三层以上。由此看来,用于连接 IP 地址与 MAC 地址的 ARP 协议是不能跨越第三层的(ARP 工作在网络层),因此 ARP 广播包也不可能通过路由器到达其他网络。

图 1.

上面的这个解释很好理解,但是并不是很严密的解释,也没有触及到问题的核心。如果要完全解释“为什么 ARP 攻击只能发生在局域网内部?”这个问题,我们就必须更深入的理解 TCP/IP 协议和路由器的工作原理。

在 TCP/IP 协议中,数据的传输有三种方式:单播、组播和广播。单播就是一对一的通信,组播(也称多播)是一对多的通信(如视频直播)。单播和组播都是可以跨越物理网络进行通信的,也就是进行通信的主机之间可以不在一个子网内部。但是,广播就有一些特别了,由于广播域的存在(一般一个局域网就是一个广播域),所以路由器在收到广播数据时是会拒绝向其它网络转发的,路由器实际上起到了分离广播域,隔离广播数据的作用。

ARP 攻击之所以能够产生,就是因为伪造了对 ARP 广播的应答,综合上述分析可知,如果用于攻击的主机并不在目标网络中,就接收不到目标网络中 ARP 请求的广播,其伪造的 ARP 应答也无法到达目标网络。因此,ARP 攻击只能发生在局域网(子网)内部。正因如此,我们只能对目标主机 IP 地址网络号部分以及子网掩码与我们的攻击机器 IP 地址网络号部分和子网掩码相同的主机发动 ARP 攻击。

三、补充

3.1. RARP 协议

ARP 协议的作用就是在已知内网其他设备的 IP 地址的情况下,获取这些内网设备的 MAC 地址的协议。而 RARP 协议(RARP: Reverse Address Resolution Protocol, 即“反向地址转换协议”)则是为了让只知道自己的 MAC 地址的设备从网关那里获取自己的 IP 地址的协议。

和 ARP 协议一样,RARP 协议也工作在网络层。

3.2. IPv6 NDP 协议

ARP 协议是在 IPv4 中使用的地址解析协议,但在 IPv6 中,已经使用 NDP (NDP: Neighbor Discovery Protocol, 即“邻居发现协议”) 协议取代了 ARP 协议的功能。

和 ARP 协议一样,NDP 协议也工作在网络层。


荒原之梦网全部内容均为原创,提供了涵盖考研数学基础知识、考研数学真题、考研数学练习题和计算机科学等方面,大量精心研发的学习资源。

意见反馈 | 内容纠错 | 微信 | QQ | 公众号 | 知乎 | 微博 | 博客园 |CSDN | B 站 | 电子邮件
豫 ICP 备 17023611 号-1 | 公网安备 - 荒原之梦 豫公网安备 41142502000132 号 | SiteMap
Copyright © 2017-2024 ZhaoKaifeng.com 版权所有 All Rights Reserved.

Copyright © 2024   zhaokaifeng.com   All Rights Reserved.
豫ICP备17023611号-1
 豫公网安备41142502000132号

荒原之梦 自豪地采用WordPress