那么开始第一部分,这一个章节主要讲一下基础部分,首先注意过去的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,可以计算某文件的内容有几个字,几行等等