那么开始第一部分,这一个章节主要讲一下基础部分,首先注意过去的kali 终端使用bash,而新的使用zsh,而视频是按照bash讲的,所以有一些地方要更改。

Terminal

Terminal是可以更改一些快捷键,配色方案等等,目前我就默认用kali 风格吧。

另外有一些内置的命令,比如netcat。官网给的解释是可以通过TCP UDP协议来做一些读写操作。我测试了一下没连上我们公司服务器看来是把端口关闭或者更改了。

A simple Unix utility which reads and writes data across network connections using TCP or UDP protocol. It is designed to be a reliable “back-end” tool that can be used directly or easily driven by other programs and scripts. At the same time it is a feature-rich network debugging and exploration tool, since it can create almost any kind of connection you would need and has several interesting built-in capabilities.

https://www.kali.org/tools/netcat/

一些其他的命令,

首先复制 粘贴,windows里一般是ctrl +c 之类的,但是kali linux里需要加shift,ctrl+shift+c

然后在终端里,想停止某个进程,之前我都是用ctrl + c,即kill command,这个是完全杀死该进程,我之前一直以为是c代表close。那么其实还一个命令是ctrl + z,即stop或者suspend command,使用该命令后,进程会暂停,然后会显示出一个数字代表该进程。

通过jobs可以查看当前悬挂或者暂停的进程有哪些,分别对应数字,而通过fg即foureground job[number]则可以继续该进程,这里注意新版的kali 数字前面加%才可以。

最后嫌弃界面太乱,可以用clear清屏,之前用过,而exit则是退出该终端。

接下来是一些其他命令,比如tab,可以自动补充剩余部分,这个比如某命令是dlkfjdlfkjd,然后输入前几个字母,按tab可以补充剩余的,在思科交换机啊之类的都有类似的情况。但是这里注意一点:有时候若干命令前面都是一样的,所以按一下tab是列出来全部有可能的命令。

shift +pgup/pgdown 和鼠标滚轮上下是类似的效果,看看上面的部分或者下面的部分。

up方向键则可以查看上一条命令,也是偷懒的办法,我经常用

histroy可以查看之前所有运行的命令,这个我之前没用过,可以用来追溯历史或者查看情况。我发现应该是只要电脑不重启,那么不管终端是不是关了,都会显示在这里。

顺着上面的命令,可以继续玩

ctrl + r,可以用来搜索command history,并且自带模糊搜索,只要是之前输入过得命令都可以搜索到

ctrl + a 和 ctrl + e 可以把光标移动到最左或者最右,这是个很好的命令。

ctrl + k 可以把目前光标右侧位置全部剪切,可以用于都删了或者是用来等下粘贴

ctrl + y 就是粘贴,这里不是用的p paste 而是 y yank

ctrl + l 就是把除了当前命令行以外的都清除掉

user有不同的级别,普通的或者root级别的,通过passwd可以更改密码,而通过sudo等可以更改其权限

Root Directory

linux的文件系统也是一个很大的话题,

从上图可以看到很多文件夹,其中很多比较重要,比如/bin /etc等等

/bin放的都是user binaries,里面存放的都是用户可以运行的程序,比如bash啊,7z,cp等等

/etc存放的都是配置文件,比如ssh服务器配置文件等等

/home 则保存的是用户的文件信息,每一个用户都有一个独立的文件夹

/sbin 即system binaries,区别于binaries,主要保存一些系统级别,或者可以对系统进行更改的程序,普通用户正常无法运行这里的程序,除非有su的权限,或者用root 用户才可以运行。

/tmp 则保存一些temperary的文件,即临时文件,可以用来保存一些不重要的可以等会儿随便删掉的东西,似乎有一个参数可以修改,默认情况下隔一定时间该文件夹会被清空。

/root 则是保存root的一堆东西或者说root的家,其中root用户的信息也在这里,普通用户是无法访问该文件夹的,除非有root权限

所以不要混淆,root 用户, root directory以及root home,这是三个东西。

Basic Command

其实命令没什么特别好讲的,但是有两个要注意的,一个是很多命令支持option,一般是加个小横线 - 然后后面接参数,比如 ls -a 比如 fdisk -l

另外就是很多命令支持arugment 自函数,比如 ls -a /Download 这样命令就会显示download文件夹中的内容。假如不带这个函数,则会显示当前所在文件夹的内容。

Basic Command-Navigating Directories

基础命令里有许多,首先我们在各个文件目录里跳来跳去,有一些基础命令。

pwd,即print working directory 打印出当前工作目录,即知道自己在哪里

cd,即change directory 后面跟着不同参数可以实现不同操作

cd /tmp/ 进入到tmp文件夹,注意前面有/因为/是最初始最根的目录

cd .. 进入到当前位置的上一级目录,当前在root 或者tmp 则进入到/目录,这个要记住

cd ~ 进入到用户home目录,我用的是root用户,所以到了root目录,普通用户则到普通user目录

cd 不加任何参数和上面一样也是到达用户home 目录

cd - 进入到之前一个目录,就是上次访问的目录,也要记住

Basic Command-Creating directories and files

接下来是用于新建文件目录和文件的命令

mkdir 用于创建 directory,父目录必须存在

mkdir -p 用于创建directory,父目录可以不存在,然后直接创建

touch 用于创建文件,似乎创建的也是无后缀文件

Listing directories content

然后是列出当前文件目录内容的命令,不过ls有许多的参数可以加进去

ls 列出当前目录内的内容

ls /tmp/ 列出/下tmp内的目录内容,以下每个命令都可以附加该参数来确定目标目录内容

ls -l 列出详细列表信息,比如时间,大小,权限等等,这里注意看颜色和第一个字母的区别,文件夹为蓝色并且第一个字母是d代表directory,而文件为白色并且第一个字母是-代表文件。除此之外,还有 l 代表link 以及 x 代表执行文件。

ls -a 列出隐藏文件,当然也可以 ls -al 列出所有文件包含隐藏文件,其他参数都可以这样重复用多个

从下图可以看出区别,-a把隐藏文件弄出来了,颜色上有区别,多了浅绿底色,而-al则显示的更加详细。

注意一下前两个目录名字分别是。和。。 我们之间说过cd 。。是上一级目录,而。则是本目录,所以可以理解一下linux的文件系统,下图也刚好测试证明了这一点。

最后就是查看的时候可以更改排列顺序,类似windoes里面文件排序可以按照名称,时间,大小等等。

ls -r 按照名字倒序排列

ls -t 按照最新时间顺序排列

ls -rt 按照最新时间倒序排列

这里留了一个小作业,其中有一个是touch的批量创建文件

touch /tmp/file{2,3,4}.txt,可以创建名字问file2.txt file3.txt和file4.txt 三个文件

Listing files content

好了,文件目录是可以查看的,那么同样文件也一样可以显示查看。这里首先讲一下实例文件。所有的Linux系统都会保存用户最近操作的500个命令,那么Kali也是一样的,在过去保存在root文件夹下隐藏文件 .bash_history里,而新的Linux系统用zsh因此保存在root文件下隐藏文件 .zsh_library里。那么我们就使用该文件作为实例。

cat .zsh_history,显示出该文件全部内容,并且光标位于结束位置,可以通过鼠标滚轮和 快捷键 Shift + Page Up/ Page Down 来上下翻动。

less .zsh_history,显示出该文件全部内容,光标位于初始位置,直接按方向键上下就可以来上下按条查看。按Page Up或者Page Down可以上下翻页。而按空格可以直接翻一页。这里注意,退出要按Q。

head .zsh_history,显示出该文件前10条内容加 -n 可以更改显示的条数

tail .zsh_history,显示出该文件后10条内容加-n 可以更改显示的条数 -f可以实时更新内容,也可以-5f这样一起用

Copying files and directories

同样,我们可以把文件,目录或者两者复制到新的位置,甚至重命名,只需要copy命令即可。

cp [files] [destination],复制文件到新的目的地,这里要注意是要区分大小写的,目的地后面可以跟新的名字

cp -r 复制文件和目录到新的目的地,目的地后可以跟新的名字

cp -i 互动模式下复制,例如可以询问是否覆盖等,Linux不像windows,默认情况下不会询问,直接文件覆盖,而windows则会询问,因此加上-i可以安全一些

Moving files and directories

刚才的cp命令有点类似windows里的复制加粘贴,而mv命令则类似剪切加粘贴。mv的另外一个作用就是rename,目的地不变,但是名字改一下

mv [source] [destination] 移动或者重命名某文件到某目的地

mv -i,和cp类似,不加-i是直接覆盖,加了i进入互动模式,会咨询

这里提一下,之前有说过 . 就代表本文件,因此使用cp或者mv命令 目的地可以用 . 来代表当前的文档。

当然,用..代表上一层目录也可以。

Removing files and directories

rm /tmp/testfile remove file,就是普通的移除文件

rmdir /tmp/testdir remove empty testdir,移除空的文件夹

rm -r /tmp/testdir 移除目录和目录内的内容

rm -r -i /tmp/testdir 移除目录和目录内的内容,并且是互动模式

rm -rf /tmp/testdir 强制移除,即便该文件或者文件夹正在使用

Adding/Removing and update Software

在Linux里,软件就是一个一个的安装包,所以安装软件也好,移除软件也好,就是对不同的包进行管理。不同的Linux发行版本有不同的包管理软件,比如红帽使用 yum,而Debian使用 apt

回到我们的Kali,也是用apt软件。这里注意,下面的apt-get /apt-cache都可以用apt代替,一样的功能,只不过apt的颜色会变化,但是移除的时候有点区别,apt autoremove才是移除全部。

apt-cache search 搜索包,如下图我搜索图形界面FTP软件

apt-cache show 显示包详细信息,如下图我显示一下filezilla的详细信息

apt-get install 安装包,这里我安装了filezilla。如果报错的话,一般先试一试 apt-get update把apt的包升级一下就可以解决问题

apt-get install -y 安装包并且全部选项都是yes

apt-get remove 移除包但是保留配置文件,这里我移除了filezilla

apt-get purge 移除包并且不保留配置文件,不做演示了。

和windows不一样的是,windows经常问你升不升级,Linux一般不问,但是可以输入命令完成升级过程。默认情况下,linux发行版所有包都放在容器里,也就是相应的linux服务器,保存在下图文件中,但是有时候可能会发生变化,因此可以升级更新。

apt-get update 升级系统中保存的这些容器信息,和容器内各个软件的供应商链接之类

apt-get upgrade 升级已经安装的软件到最新版

apt-get dist-upgrade 就是升级上面两个的合体

apt-get建立在有网络的基础上,那么假如没有网络怎么办,比如去现场做渗透测试,但是都是不连外网的。可以提前下载好deb的安装包放到U盘里之类的,但是这种本地安装包的方式和apt不一样,当然dpkg是一个办法

首先可以给自己的windows笔记本打开FTP 服务,当然这个测试结束后尽量关闭,因为其他人可以通过ftp进来。

然后就可以通过之前在kali里安装好的filezilla连接上该FTP服务器,要知道IP地址,端口号,然后账号密码不特意设置的话就是windows的登录信息,SSL证书什么的也可以根据要求来。

好啦,然后可以把需要的安装包下载到指定地点。

这里我们下载一下Nesses的安装包

dpkg -l 查看已经安装好包的版本

dpkg -i package.deb 安装包

这里注意Nessus的启动方式,需要启动服务然后去指定网站,感觉是云服务的样子。

dpkg -r package.deb 删除包

这个尝试了一下失败,我觉得可能是名字和路径的问题、

Archiving and Compressing files

文件和系统可以进行存档archive或者压缩compress,区别就是存档的文件和源文件大小一样,而压缩文件会小于源文件。根据不同的应用场景来选择使用哪一种工具。

存档类似于把文件保存到磁带内,硬盘内之类,可以使用tar命令,tape archive

tar c 创建存档

tar r 添加到存档

tar t 列出存档内存

tar x 解压存档

tar v 显示进程

tar f file 指定某个文件

上面几个命令是可以组合来用的,其中v一般都是要带的,而f似乎也是必须的。

tar cvf archive dir1 dir2 file1 file2 创建一个存档文件,名字为archive.tar(不带后缀也没有问题),然后把两个文件夹和两个文件放进去。

tar tvf archive.tar 列出存档文件的内容,这里可以到有没有V区别很大

tar rvf archive.tar file3 同时也可以继续增加存档中的内容

那么,接下来但就是文件的提取部分,每一个单独的文件或者目录都可以从存档中提取,

tar xvf archive.tar file3 只把file3提取出来

tar xvf archive.tar dir3 只把dir3目录提取出来

tar xvf archive.tar 把所有文件提取出来

tar xvf archive.tar -C /root/Desktop/newfolder 也可以提取并保存到新的目标文件夹内

好啦,上述都是存档的工作,那么压缩就是在此基础上多一点参数即可。

Kali Linux有两种压缩格式,一个是经典的gzip,还一个是压缩率更大的bzip2,两者并无好坏之分,根据具体情况来说选择使用,bzip2压缩率更大,因此再大文件上所需要时间更加多。

tar zcvf compressed.tar.gz file1 file2 想压缩gz格式,那么需求加z参数,我尝试了三种后缀,其实内容和大小都一样,当然还是标准一点加了比较好。

tar jcvf compressed.tar.bz2 file1 file2 而如果使用bzip2格式,参数则为j

tar ztvf compressed.tar.gz 把c改成t就成了列出信息,和之前存档一样

tar jtvf compressed.tar.bz2 bzip2也是一样的情况

这里注意,压缩文件是不能二次添加的,和存档文件不同,但是提取是没有区别的

tar zxvf compressed.tar.gz file1 提取压缩文件file1,不加文件则是提取全部, 加了-C newdirection 则是提取到新文件夹内

tar jxvf compressed.tar,bz2 file1 bzip2格式的命令没啥大区别。

上述命令基本都是一些功能性的,其中每次输入文件路径或者名称都需要一个一个输入,或者尽可能的输入。那么有没有一些提高效率的办法呢,例如利用符号来指代某一类,有的就是wildcard 通配符。

* 星号或者asterisk用来指代0或者全部字符,例如下图,直接一个*指代全部,而*.txt指代全部txt文件

比如可以批量移动一大堆类似名字的文件到某个文件夹

当然也可以批量复制,移除等等。

?问号或者questionmark 用来指代1个字符 如下图所示,问号和星号区别很大,所以根据情况来用,问号只能指代1个字符

[] 方括号或者bracket用来指代括号内的任意字符,比如 ls a[bcd]e,就会列出abe,ace和ade的内容。

\ 反斜杠 back slash 用来指代转义字符,例如*.txt 代表 各种后缀是txt的内容,而\*.txt则是有一个文件名字叫*.txt,把wildcard的功能不生效了。

!代表反义,比如ls a[bcd]e,就会列出除了abe,ace和ade的a*e内容

这里有一个工具tree,可以比ls更加详细的列出来当前文件情况,有点类似于图表化

而另外一个小工具是file,可以给出某一个文件的详细情况,例如这个文件是什么类型,修改时间等等。

而另外一个工具 apropos则可以查找手册来告诉我们某个关键字,然后给与我们相对的描述工具等等

而这个工具,which则可以帮助我们找到某一个工具的所在地

locate则可以定位所有包含gzip关键词的文件

man 则是manual的缩写,加上-k可以搜索关键字,然后找到对应的包,假如不带-k则可以直接进入到相应的包manual里查看各种说明

当然,这种用法类似于另外一个工具 --help或者-h

但是通过man进入的话是非常详细的说明书,另外有一些快捷键,例如g到达开头位置,shift+g到达末尾位置,以及/可以输入关键字搜索n可以跳到下一个关键字,shift+n跳到上一个关键字

最后一个小工具就是wc,即word count,可以计算某文件的内容有几个字,几行等等


Chao

一个三天打鱼两天晒网的博主 拖延症严重患者 干啥啥不行,学啥啥不会