20199304 《网络攻防实践》 假期作业

作业要求

这个作业属于哪个课程 : 网络攻防实践
这个作业要求在哪里:作业要求
我在这个课程的目标是:学习网络攻防知识,熟练Linux的常用命令
这个作业在哪些具体方面帮助我实现目标:安装虚拟机、学习Linux的基础命令,编写博客等
作业正文如下:

作业一

(1)你对网络攻击和防御了解多少?该课程需要计算机和网络相关的基础知识,你原专业是什么专业,目前你掌握多少基础知识?

了解:常见的网络攻击主要有xss攻击,csrf攻击和sql注入等;

  • XSS,即 Cross Site Script,中译是跨站脚本攻击。
    • XSS的防御:
      • 1.输入检查 对来自用户的输入进行检查,过滤,转义 包括限制用户输入的内容的长度,限制服务器端存储的内容的长度等。
      • 2.输出检查
      • 3.设置cookie的http-only 设置了cookie的http-only属性后,将无法通过js脚本获取cookie
  • csrf攻击,即跨站请求伪造
    • CSRF的防范:
      • 1.请求时附带验证信息。 服务器下发一个随机 Token,每次发起请求时将 Token 携带上,服务器验证 Token 是否有效。
      • 2.禁止get请求更改数据(防止删除等恶意行为)
      • 3.验证码 在一些需要登录的页面 加入验证码
      • 4.referer http请求头有一个referer字段,它可以告诉服务器这个请求的来源页面 但是referer其实是不靠谱的,因为referer可以在客户端被篡改。
  • ssrf (Server-side Request Forge, 服务端请求伪造)。
    • 通用的解决方案:
        1. 过滤返回信息。验证远程服务器对请求的响应是比较容易的方法。如果 web 应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。比如请求的是一张图片,如果抓取回来的信息是一段文本,那就不返回。
      • 2) 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态;
        1. 禁用不需要的协议 只允许http,https协议(防止利用file协议读取本地文件)
        1. 添加内网黑名单,白名单,对输入地址进行限制。
        1. 限制端口,限制可以使用的端口为http,https常用的端口(443,80,8080,8090)

原专业:计算机科学与技术
基础知识:c,c++,计算机网络,计算机组成,操作系统,数据库设计,数据结构,计算机图形学等

(2)作业要使用Markdown格式,Markdown入门参考(需掌握)

上学期选修过Linux内核分析,对于markdown的编辑较为熟悉。

作业二

(1)学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统(也可以使用VMWare安装虚拟机,安装方法自己百度)

Ubuntu已安装过。从网上找到VMWare安装Ubuntu教程供其他同学参考。

(2)通过实践学习别出心裁的Linux命令学习法,掌握Linux命令的学习方法

列举下常见的Linux命令。

  • 系统信息

    • arch 显示机器的处理器架构(1)
    • uname -m 显示机器的处理器架构(2)
    • uname -r 显示正在使用的内核版本
    • dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
    • hdparm -i /dev/hda 罗列一个磁盘的架构特性
    • hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
    • cat /proc/cpuinfo 显示CPU info的信息
    • cat /proc/interrupts 显示中断
    • cat /proc/meminfo 校验内存使用
    • cat /proc/swaps 显示哪些swap被使用
    • cat /proc/version 显示内核的版本
    • cat /proc/net/dev 显示网络适配器及统计
    • cat /proc/mounts 显示已加载的文件系统
    • lspci -tv 罗列 PCI 设备
    • lsusb -tv 显示 USB 设备
    • date 显示系统日期
    • cal 2007 显示2007年的日历表
    • date 041217002007.00 设置日期和时间 - 月日时分年.秒
    • clock -w 将时间修改保存到 BIOS
  • 关机 (系统的关机、重启以及登出 )

    • shutdown -h now 关闭系统(1)
    • init 0 关闭系统(2)
    • telinit 0 关闭系统(3)
    • shutdown -h hours:minutes & 按预定时间关闭系统
    • shutdown -c 取消按预定时间关闭系统
    • shutdown -r now 重启(1)
    • reboot 重启(2)
    • logout 注销
  • 文件和目录

    • cd /home 进入 '/ home' 目录'
    • cd .. 返回上一级目录
    • cd ../.. 返回上两级目录
    • cd 进入个人的主目录
    • cd ~user1 进入个人的主目录
    • cd - 返回上次所在的目录
    • pwd 显示工作路径
    • ls 查看目录中的文件
    • ls -F 查看目录中的文件
    • ls -l 显示文件和目录的详细资料
    • ls -a 显示隐藏文件
    • ls [0-9] 显示包含数字的文件名和目录名
    • tree 显示文件和目录由根目录开始的树形结构(1)
    • lstree 显示文件和目录由根目录开始的树形结构(2)
    • mkdir dir1 创建一个叫做 'dir1' 的目录'
    • mkdir dir1 dir2 同时创建两个目录
    • mkdir -p /tmp/dir1/dir2 创建一个目录树
    • rm -f file1 删除一个叫做 'file1' 的文件'
    • rmdir dir1 删除一个叫做 'dir1' 的目录'
    • rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容
    • rm -rf dir1 dir2 同时删除两个目录及它们的内容
    • mv dir1 new_dir 重命名/移动 一个目录
    • cp file1 file2 复制一个文件
    • cp dir/* . 复制一个目录下的所有文件到当前工作目录
    • cp -a /tmp/dir1 . 复制一个目录到当前工作目录
    • cp -a dir1 dir2 复制一个目录
    • ln -s file1 lnk1 创建一个指向文件或目录的软链接
    • ln file1 lnk1 创建一个指向文件或目录的物理链接
    • touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)
    • file file1 outputs the mime type of the file as text
    • iconv -l 列出已知的编码
  • 文件搜索

    • find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录
    • find / -user user1 搜索属于用户 'user1' 的文件和目录
    • find /home/user1 -name *.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
    • find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件
    • find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
    • find / -name *.rpm -exec chmod 755 '{}' ; 搜索以 '.rpm' 结尾的文件并定义其权限
    • find / -xdev -name *.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
    • locate *.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
    • whereis halt 显示一个二进制文件、源码或man的位置
    • which halt 显示一个二进制文件或可执行文件的完整路径
  • 查看文件内容

    • cat file1 从第一个字节开始正向查看文件的内容
    • tac file1 从最后一行开始反向查看一个文件的内容
    • more file1 查看一个长文件的内容
    • less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作
    • head -2 file1 查看一个文件的前两行
    • tail -2 file1 查看一个文件的最后两行
    • tail -f /var/log/messages 实时查看被添加到一个文件中的内容

(3)参考上面的学习方法通过实践学习Linux 基础入门(新版)课程,掌握常用的Linux命令,重点是3/4/5/6/7/8节。

实验3 用户及文件权限管理

实验要求
请打开终端,输入命令:
who am i或者who mom likes

  • who 命令其它常用参数

    • 参数————说明
    • -a————打印能打印的全部
    • -d————打印死掉的进程
    • -m————同am i,mom likes
    • -q————打印当前登录用户数及用户名
    • -u————打印当前登录用户登录信息
    • -r————打印运行等级
      现在我们新建一个叫 lilei 的用户:
      sudo adduser lilei

      这个命令不但可以添加用户到系统,同时也会默认为新用户创建 home 目录:
      ls /home
      现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户:
      su -l lilei
      输入刚刚设置的 lilei 的密码,然后输入如下命令并查看输出:
      who am i
      whoami
      pwd

      在 Linux 里面如何知道自己属于哪些用户组呢?
      1.使用 groups 命令
      groups shiyanlou

      2.查看 /etc/group 文件
      cat /etc/group | sort

      用 shiyanlou 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限:

      删除用户
      sudo deluser lilei --remove-home

      查看文件权限:ls -l

变更文件所有者sudo chown <要变更的文件所属用户> <文件名>
修改文件权限
二进制数字表示:每个文件的三组权限(拥有者,所属用户组,其他用户,这个顺序是一定的)对应一个 " rwx ",也就是一个 “ 7 ” 。如 chmod 600 <文件名>
加减赋值操作:g、o 、u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。如 chmod go-rw <文件名>
adduser 和 useradd 的区别是什么?
useradd 只创建用户,创建完了用 passwd lilei 去设置新用户的密码。adduser 会创建用户,创建目录,创建密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。

实验4 Linux目录结构及文件基本操作

FHS标准
FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范:
第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。

绝对路径:以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径:相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)。
新建
新建空白文件:touch <文件名>
新建目录:touch <目录名>mkdir -p father/son/grandson(使用 -p 参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录)
复制
复制文件:使用 cp(copy)命令复制一个文件到指定目录,cp <文件名> <目录名>
复制目录:要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制,cp -r <被复制的目录名> <目录名>
删除
删除文件:rm <文件名>rm -f <文件名>(忽略提示,直接删除文件,可以使用 -f 参数强制删除)
删除目录:rm -r <目录名> 跟复制目录一样,要删除一个目录,也需要加上 -r 或 -R 参数
移动文件mv <源目录文件> <目的目录>
重命名文件mv <旧的文件名> <新的文件名>
查看文件cat -n passwd,-n 参数显示行号
查看文件类型file <文件名>
作业
创建一个 homework 目录,建立名为 1.txt~10.txt 文件,并删除 1.txt~5.txt 。

实验5 环境变量与文件查找

知识点总结
1.创建变量declare <变量名>,并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。
2.涉及到的变量类型有三种:

  • 当前 Shell 进程私有用户自定义变量,只在当前 Shell 中有效。
  • Shell 本身内建的变量。
  • 从自定义变量导出的环境变量。

3.三个用于打印环境变量信息的变量,区别在于涉及的变量范围不同

  • set 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。
  • env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。
  • ```export`` 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。

4.如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile,在最后加上你想添加的环境变量就好啦。
5.添加自定义路径到“ PATH ”环境变量:PATH=$PATH:<绝对路径>

6.搜索文件

  • whereis 简单快速:只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。
  • locate 快而全:它可以用来查找指定目录下的不同文件类型,如查找 /etc 下所有以 sh 开头的文件:
sudo apt-get update
sudo apt-get install locate
locate /etc/sh

7.查找 /usr/share/ 下所有 jpg 文件:
locate /usr/share/*.jpg

  • which 小而精:我们通常使用 which 来确定是否安装了某个指定的软件,因为它只从 PATH 环境变量指定的路径中去搜索命令,如:which man
  • find 精而细:注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option] [action]。如去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录:```sudo find /etc/ -name interfaces``
    作业
    寻找文件:找出 /etc/ 目录下的所有以 .list 结尾的文件。

实验六 文件打包与解压缩

  • zip

         - 打包 :zip something.zip something (目录请加 -r 参数)
    
         - 解包:unzip something.zip
    
         - 指定路径:-d 参数
    
  • tar

         - 打包:tar -cf something.tar something
    
         - 解包:tar -xf something.tar
    
         - 指定路径:-C 参数
    

作业
创建一个名为 test 的文件,分别用 zip 和 tar 打包成压缩包,再解压到 /home/shiyanlou 目录。

实验7 文件系统操作与磁盘管理

查看磁盘和目录的容量
使用 df 命令查看磁盘的容量

  # 默认同样以 块 的大小展示
   df 
  # 加上`-h`参数,以更易读的方式展示
   df -h     

使用 du 命令查看目录的容量

  # 默认同样以 块 的大小展示
   du 
  # 加上`-h`参数,以更易读的方式展示
   du -h
  # 只查看1级目录的信息
   du -h -d 0 ~
  # 查看2级
   du -h -d 1 ~
  du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
  du -a #同--all 显示目录中所有文件的大小。
  du -s #同--summarize 仅显示总计,只列出最后加总的值。

dd命令用于转换和复制文件,不过它的复制不同于cp。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。
用dd命令从标准输入读入用户的输入到标准输出或者一个文件中:

# 输出到文件
 dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1
# 输出到标准输出
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
# 注
在打完了这个命令后,继续在终端打字,作为你的输入

上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count用于指定块数量。

dd在拷贝的同时还可以实现数据转换,那下面就举一个简单的例子:将输出的英文字符转换为大写再写入文件:

dd if=/dev/stdin of=test bs=10 count=1 conv=ucase
使用 dd 命令创建虚拟镜像文件
使用dd命令来完成创建虚拟磁盘的第一步。

# 从/dev/zero设备创建一个容量为 256M 的空文件
 dd if=/dev/zero of=virtual.img bs=1M count=256
 du -h virtual.img

然后我们要将这个文件格式化(写入文件系统),这里使用 mkfs 命令格式化磁盘(我们这里是自己创建的虚拟磁盘镜像)

 #将我们的虚拟磁盘镜像格式化为ext4文件系统
 sudo mkfs.ext4 virtual.img

作业
小明在管理服务器的时候发现空间不足了,他找到了一个目录,这个目录占用的空间异常的大,他需要找到这个目录中占用最大的前10个文件,但是这个目录下面的内容太多了,或许一条命令就能够帮助到他,这条命令该怎么写呢?
简而言之:找出当前目录下面占用最大的前十个文件。

实验8 Linux下的帮助命令

  • 内建命令与外部命令

    • 内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。

    • 外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。

  • 几个常用的帮助命令

    • help 命令:只能用于显示shell内建命令的帮助信息。外部命令基本上都有一个参数--help:ls --help

    • man命令:得到的内容比用 help 更多更详细,而且man没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。

    • info命令:man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的 GNU 工具信息。若 man 页包含的某个工具的概要信息在 info 中也有介绍,那么 man 页中会有“请参考 info 页更详细内容”的字样。

原文地址:https://www.cnblogs.com/20199304lbs/p/12343261.html