Linux实验

实验1-7实验报告

实验一

实验目的

1.熟悉VirtualBox等虚拟机用法,并配置Ubuntu Linux实验环境。

2.了解和使用Linux常用shell工具,并掌握通用的帮助或手册用法。

3.能够使用基础命令查看主机名、网络配置。

4.能够查看CPU、内存配置与使用状态以及系统内核版本与发行版本。

5.能够完成与宿主机的网络配置,理解不同网络配置类型的区别。

6.能够对常用软件镜像源进行修改。

7.能够在Linux环境中配置SSH服务。

8.熟练使用命令行或GUI工具通过SSH远程连接Linux。

实验过程

1.下载VirtualBox虚拟机并安装

图例1

图例2

2.下载Ubuntu系统镜像,并在虚拟机中安装

图例3

图例4

3.在Ubuntu系统中打开终端,使用常见的命令进行操作,尝试执行ls、ps命令观察输出结果。尝试"Tab”、“↑”、“↓"来进行补全和查看bash历史记录。

(1)打开终端

图例5

(2)执行ls、ps命令观察输出结果,尝试"Tab”、“↑”、“↓"来进行补全和查看bash历史记录。

图例6

4.使用man命令查看ls手册,执行ls --help查看帮助,观察两种不同的帮助文档的区别。进阶操作:查看任意一个命令的说明文档,并简述其功能.

(1)使用man命令查看ls手册。

图例7

(2)执行ls --help查看帮助

图例8

这两种命令的区别:

1)help命令用于显示shell内部的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看。

2)man命令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。

3)一般看信息都用查看man文档,而help只是一个简单的描述,方便,但man文档中都包含了。help 是内部命令的帮助,比如cd ,man 是外部命令的帮助,比如ls。

(3)进阶操作:查看man命令的说明文档,并简述其功能

图例9

man命令的功能是用于查看命令、配置文件及服务的帮助信息。

5.使用date、hostname、top、uname命令来查看系统时间、主机名、实时系统占用情况和内核版本。

图例10

图例11

6.通过cat命令查看当前系统中CPU信息(/proc/ cpuinfo)、内存信息(/proc/meminfo)验证是否与虚拟机配置相同。

图例12

图例13

观察数据和之前虚拟机配置的时候数据,与20GB配置相同。

7.在虚拟机中对所安装的系统进行网络配置,分别使用NAT网络、桥接网卡以及Host-Only来进行配置,使用ip命令来查看系统当前网络配置,比较不同配置的区别。在宿主机中使用ping命令来测试与虚拟机的连通性。最后使用一种合适的网络配置使虚拟机中系统可以连接互联网。

由于尝试ubuntu系统的网络配置失败(ping不成功),我又进行了VM下kali系统的网络配置

(1)NAT网络配置

主机ip地址为:192.168.251.1

图例14

图例15

图例16

在NAT模式下可以直接进行联网

(2)Host-Only网络配置

虚拟机设置为仅主机模式

图例17

图例18

图例19

然后打开虚拟机后,配置kali IP地址:192.168.254.10 子网掩码:255.255.255.0 ,在主机进行ping测试:

图例20

(3)桥接网卡网络配置

图例21

配置虚拟机,让它的IP地址192.168.254.200,子网掩码255.255.255.0和和主机处于同一个网段。

然后在主机进行ping命令测试:

图例22

8.进行apt软件源的更换,使用apt update命令进行更新。

执行命令sudo vim /etc/apt/sources.list并输入以下源:

图例23

然后执行命令sudo apt-get update进行更新

图例24

9.使用apt安装openssl服务端,进行ssh服务端配置.

执行sudo apt-get install ssh安装ssh服务

图例25

执行sudu apt-get install openssh-service安装openssh服务端

图例26

然后执行sudo service ssh restart重启ssh服务

10.在宿主机中使用支持ssh连接的程序(ssh、mobaxterm、windterm等)对Ubuntu进行远程连接。

在系统上下载并且安装mobaxterm

图例27

然后输入ip地址,用户名和端口号以及密码进行远程连接

图例28

实验二

实验目的

1.学习使用常用命令: ls,cd,cat,find,file

2.理解基本的用户与文件权限

实验过程

1.通过SSH远程连接给定目标

图例29

2.在登录账户的主目录中,查看文件名为"readme"的内容

先用ls命令发现文件名为"readme"刚好在主目录中,则可以直接执行命令cat readme进行查看文件内容为ieEWq6ht

图例30

3.lesson01-1用户密码为上一步骤中的文件内容,使用lesson01-1登陆,查看文件名为"-”的内容

先用ls命令发现文件名为"readme"刚好在主目录中,当我执行命令cat -时发现跟第二题的结果不同,通过搜索可知-是特殊字符,可以采取修改文件名的方式进行查看文件内容。

图例31

通过搜索Linux命令,发现mv命令可以修改文件名,则执行mv - wenjian,在执行cat wenjian获取文件内容为gy5f6rs7

图例32

4.lesson01-2用户密码为上一步骤中的文件内容,使用lesson01-2登陆,查看文件名为"spaces in thisfilename"的内容

先使用ls命令发现文件名为"spaces in thisfilename"的文件刚好在主目录下,则直接执行cat 'spaces in thisfilename'既可以查看文件内容为:iJpMOHR5

图例33

5.lesson01-3用户密码为上一步骤中的文件内容,使用lesson01-3登陆,查看主目录下隐藏文件内容

通过ls --help发现ls -a可以查看隐藏文件,先用ls -a,然后在执行命令cat .hidden查看文件内容为:S5O0FGZb

图例34

6.lesson01-4用户密码为上一步骤中的文件内容,使用lesson01-4登陆,查看主目录下ASCII格式的文本文件内容

先使用ls命令发现有几个文件

通过菜鸟教程里面的常用命令学习,发现-exec file命令可以显示出文件类型,则执行命令find -exec file {} \;

图例35

发现文件7是ASCII格式的,则执行cat 'File (7)' ,获取内容为s3XECIPV

图例36

7.lesson01-5用户密码为上一步骤中的文件内容,使用lesson01-5登陆,查找maybehere目录,查看该文件夹满足以下条件文件的内容:“文件大小为1008字节,文本文件,不可执行"

先使用ls发现有一个文件夹,在使用cd maybehere转入这个文件夹目录中,在使用ls命令,又发现许多文件夹。

图例37

使用命令find . -size 1008c可以筛选出在maybehere目录下文件大小是1008字节的文件。

图例38

发现竟然只有一个文件,现在去验证这个文件是不是文本文件并且不可执行,使用命令find . -exec file {} \;,发现有两个文本文件而且都不可执行。

然后使用cd /maybehere/maybehere (1),转入该文件所在目录,再使用命令ls -l发现文件7是8字节不符合题意。

图例39

则使用命令cat 'File (14)'获取文件内容

图例40

文件后八位是:gHm7YP4l

8.lesson01-6用户密码为上一步骤中的文件内容最后8字符,使用lesson01-6登陆,查找满足以下条件文件:“在/var路径下,属于用户lesson01-6、属于用户组lesson01-5、文件大小为50字节”,查看该文件内容

先使用ls发现没有文件,再使用cd /var命令转入/var路径,
然后使用命令:find . -user lesson01-6 -group lesson01-5
发现有一个文件./lib/6

图例41

图例42

现在看一下它的大小是否是50字节,先cd /var/lib转入文件所在目录,使用命令ls -l发现文件6确实是50字节,然后使用cat 6获取其内容:WXVxFCI2ZyrKIlmyGuqDdfmafvNspT9jZ9d1wWqTUnx4jYq8w0

图例43

后八位为:x4jYq8w0

9.lesson01-7用户密码为上一步骤中的文件内容最后8字符,使用lesson01-7登陆,获取/etc/lesson01_pass内容。观察主目录中文件内容及权限,使用md5sum来观察主目录下的两个文件是否相同,说明为什么会造成差异。

直接使用命令cat /etc/lesson01_pass发现无法获取其内容

图例44

然后使用ls命令发现两个文件,再使用ls -l命令获取文件权限,再分别使用命令md5sum newcat1md5sum newcat2获取文件内容

图例45

图例46

发现newcat1 和 newcat2 的内容相同,但是拥有者和所属群组都属于lesson01-8而不是lesson01-7,newcat1文件所属者lesson01-8不可执行,newcat2文件权限可以看出是’rws‘,s权限的作用:表示对文件具用可执行权限的用户将使用文件拥有者的权限或文件拥有者所在组的权限在对文件进行执行。就说明newcat2可执行。

执行命令./newcat2 /etc/lesson01_pass获取文件内容

图例47

实验三

实验目的

1.巩固使用常用命令: ls,cd,cat,find,file

2学习使用常用命令: grep,sort,uniq, strings,diff

实验过程

1.通过SSH远程连接到给定目标

图例48

2.查找文件data.txt中,单词“millionth”后到段落结尾的文本内容

通过命令grep --help发现:

`grep -n` 可显示文档行号

`grep -An`可显示该行后面n行的内容

图例49

则使用命令grep -n millionth data.txt可知:millionth在第12行,下一操作密码为:TESKZC0XvTetK0ObTUeMb5STk5iWrBvP

图例50

通过菜鸟教程常用命令的查询,发现wc命令可以知道文件有多少行

图例51

使用命令wc -l data.txt可知:data.txt一共有98567行,则使用命令grep -A99000 millionth data.txt,可以显示出单词millionth后面99000行,可以到达文件尾部

图例52

图例53

3.lesson02-1用户密码为上一步骤中得到的内容,使用lesson02-1登陆,查找文件data.txt中,仅出现一次的文本行。

通过命令grep --help发现:

`uniq -u` 可以筛选出来只出现一次的文本行

图例54

则使用命令cat data.txt | sort | uniq -u获取仅出现一次的文本行为:EN632PlfYiZbn3PhVK3XOGSlNInNE00t

图例55

4.lesson02-2用户密码为上一步骤中得到的内容,使用lesson02-2登陆,查找文件data.txt中, 查找以几个“=”开头的ASCII字符串。

通过命令strings --help发现:strings命令可以显示字符串

图例56

strings -a可以显示所有字符串,grep ==可以筛选内容含有多个"="的字符串

则使用命令cat data.txt | strings -a | grep ==获取字符串

图例57

内容为:thepasswordisT G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s

5.lesson02-3用户密码为上一步骤中结果的其中一个,使用lesson02-3登陆,查找文件passwords.old和passwords.new,比较password.old和password .new文件内容,获取已更改的行内容

对密码依次尝试,密码为:G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s

先用ls查找文件

图例58

通过diff --help可知:diff命令是以逐行的方式,比较文本文件的异同处。

则使用命令diff passwords.new passwords.old,比较两个文件

图例59

可知更改的内容在第42行

实验四

实验目的

1.学习使用常用命令:crontab

⒉能够阅读理解简单的Shell脚本

实验过程

1.通过SSH远程连接给定目标

图例60

2.在/etc/cron. d查找定时任务cronjob_lesson03_1,思考该任务的执行周期是多长?分析该定时任务写入临时文件的内容

cd /etc/cron.d然后在进行其他操作

图例61

图片中圈出的内容显示:该任务是每分钟定时执行一次。

然后执行命令cat cronjob_lesson03_1获取文件路径,在使用命令cat /usr/bin/lesson03_shell1.sh获取内容:

#!/bin/bash

cat /etc/lesson03_pass/lesson03_1 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

定时文件的内容是:将/etc/lesson03_pass/lesson03_1的内容复制到/tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

图例62

图例63

内容是:

3.在/etc/cron. d查找定时任务cronjob_lesson03_2,分析该定时任务写入临时文件的内容

cd /etc/cron.d,然后使用ls刚好查看到两个文件,然后执行命令cat cronjob_lesson03_2获取文件路径,在使用命令cat /usr/bin/lesson03_shell2.sh获取内容:

#!/bin/bash

myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)

echo "Copying passwordfile /etc/lesson03_pass/$myname to /tmp/$mytarget"

cat /etc/lesson03_pass/$myname > /tmp/$mytarget

图例64

图例65

定时内容2也是每分钟执行一次,内容为:

每分钟定时执行/usr/bin/lesson03_shell2.sh一次

第一步:将命令whoami的输出结果赋值给myname

第二步:执行命令echo I am user $myname 然后将其输出结果使用命令md5sumcut进行处理,然后将处理结果赋值给target

第三步:输出字符串Copying passwordfile /etc/lesson03_pass/$myname to /tmp/$mytarget

第四步:将/etc/lesson03_pass/$myname文件的内容复制到 /tmp/$mytarget

实验五

实验目的

1.理解cron配置文件和shell脚本

⒉编写简单的shell脚本

实验过程

1.通过SSH远程连接给定目标

图例66

2.分析已经存在的定时任务

先使用ls命令,发现没有任何文件,在使用ls -a命令,发现也没有隐藏文件。然后使用命令cd /etc转入/etc目录下,在使用ls命令,发现许多文件。

图例67

通过搜索发现,定时文件常放入/var/spool或者/etc/cron.d目录中;

首先,转入/var/spool,在ls -l发现三个文件夹

图例68

然后,转入/etc/cron.d,在ls -l发现定时文件

图例69

使用命令cd /etc/cron.d进去所在目录,在使用ls命令发现定时文件cronjob_lesson04_1,在执行命令cat cronjob_lesson04_1获取文件内容,在执行cat /usr/bin/lesson04_1.sh打开脚本文件,脚本内容为:

#!/bin/bash

cd /var/spool/lesson04-1
for i in * .*;
do
    if [ "$i" != "." -a "$i" != ".." ];
	then
		owner="$(stat --format "%U" ./$i)"
		if [ "${owner}" = "lesson04-1" ];then
        timeout -s 9 30 ./$i
        fi
        rm -f ./$i
fi
done

图例70

分析该脚本任务:
进入/var/spool/lesson04-1,然后使用for循环遍历该目录下的所有文件和文件夹;如果当前循环到的是一个文件或文件夹,且不是".""..",则获取该文件或文件夹的所有者名字并且将该值赋值给owner;如果owner的名字是"lesson04-1",则先执行,30秒后终止并删除这个文件。

3.获取/etc/lesson04-2_pass内容

先使用命令cd /etc转入该目录,然后使用命令ls,查看到文件lesson04-2_pass,然后使用命令cat lesson04-2_pass 发现获取不了文件内容,使用命令ls -l看一下该文件的权限,发现这个问的所有者和所属用户组都是lesson04-root,只有它可以执行,而且其他用户没有权限读写执行。

图例71

则可以按照第2题的方法来做,在/var/spool/lesson04-1下一个脚本,将/etc/lesson04-2_pass的内容输出到一个可读执行的文件p2中,脚本内容:

#!/bin/bash
touch /home/lesson04-root/p2
cat /etc/lesson04_2_pass > /home/lesson04-root/p2

图例72

如图所示,按照序号执行命令,得到答案:k6t69HILKC

实验六

实验目的

1.编写简单的shell脚本

2.理解linux中管道的使用

实验内容

1.通过SSH远程连接给定目标,密码为实验5所得结果

图例73

2.主目录有一个程序,他需要一个正确的口令来告诉你下一关的密码。提示:口令格式为lesson04-2xxxx,其中xxxx为纯数字

ls发现一个程序,运行程序得到提示只有五次尝试的机会,4个位置每个位置都有0到9,10种可能的选择,一共有10000种组合。采取手动遍历的方法是行不通的,于是我们编写脚本p.sh进行遍历暴力破解:

#/bin/bash

p='lesson04-2'

for i in {0..9}{0..9}{0..9}{0..9}
do
	echo $p$i >> aw.txt
done

使用命令./p.sh,需要等一小会,然后发现主目录下会出现aw.txt文件夹

图例74

打开这个文件,里面正是遍历的结果。

图例75

然后进行暴力破解:执行命令cat ./aw.txt | ./crackme,寻找密码

图例76

密码为:JlyZprXui1

发现很多nop,又想到前面命令uniq -u可以进行筛选,则执行命令cat ./aw.txt | ./crackme | uniq -u

图例77

密码直接出现在最后一行,密码为:JlyZprXui1

实验七

实验目的

1.编写简单的shell脚本

实验内容

1.通过SSH远程连接给定目标,密码为实验6所得结果

图例78

2主目录下有一个ssh登录日志文件,帮忙分析文件,将登录失败超过20次(不含20)的IP加入到主目录的ban_waitlist中,已有IP不重复加入

我们需要编写的脚本p.sh来帮助我们分析该日志文件,脚本内容为:

#!/bin/bash

#存ssh登陆日志的文件路径
logfile="./auth.log" 
#存失败超过20次的文件路径
ban_waitlist="./ban_waitlist"
ip_list=$(grep "Failed password" $logfile | awk '{print $(NF-3)}' | sort | uniq -c | awk '$1 > 20 {print $2}')

for ip in $ip_list; do
	if ! grep -q "^$ip$" $ban_waitlist; then
       echo $ip >> $ban_waitlist
    fi
done

该脚本解释:
1.使用grep命令在$logfile日志文件中搜索所有包含“Failed password”的行,awk '{print $(NF-3)}' 选取每行中倒数第四个字段,也就是IP地址,并将其提取出来。

2.使用sort和uniq -c 命令对提取出来的IP地址进行去重和计数。

3.使用awk '$1 > 20 {print $2}' 命令选取计数大于20的IP地址,并将这些IP地址保存到$ip_list变量中。

4.使用for循环依次遍历$ip_list中的IP地址。

5.对于每个IP地址,使用grep -q “^$ip$” $ban_waitlist命令在$ban_waitlist中查找是否已经存在该IP地址。

6.如果ban_waitlist中不存在该IP地址,就将该IP地址添加到ban_waitlist文件中。

图例79

ban_waitlist原来一共有9个ip地址

图例80

图例81

一共有95个ip地址。

图例82

3.执行主目录中check程序,获取下一关密码

执行命令./check,成功获取密码:nqFy6IxULl

图例83

posted @ 2023-03-26 16:41  harmor  阅读(112)  评论(0编辑  收藏  举报