• 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 页更详细内容”的字样。

  • 相关阅读:
    OC block声明和使用
    OC 内存管理(retain和release)
    OC @class关键字
    OC typedef(起别名)
    OC static 和函数
    OC static 和变量
    java【基础】日期操作
    java【基础】正则表达式
    理解String拼接,+运算符重载的实际效果
    swoole的EventLoop学习
  • 原文地址:https://www.cnblogs.com/20199304lbs/p/12343261.html
Copyright © 2020-2023  润新知