这一节课主要讲解一些管理操作,例如配置网络啊,服务器啊,DNS啊,用户权限啊之类的。
首先我们知道Windows系统里有有线网,无线网等,还有本地循环地址127.0.0.1,但是从网络适配器那里看不出太大区别。但是Linux里是有明显差别的,wlan就是无线网络,eth就是有线网络,例如eth0,eth1等等,而本地循环地址就是lo代表loopback address。
首先是查看自己地址,不同于windows的ipconfig,这里是ifconfig
然后可以通过nslookup 随便解析一个地址来知道自己的DNS server是啥
之前有用过cat来查看文件内容,一般默认情况下 /etc/resolv.conf保存了当前的DNS服务器信息,因此可以查看
通过 ip route 和 traceroute也可以查看到了网关信息,这里我用的是虚拟机所以有一个默认网关,实际上如果是真实PC,网关应该是192.168.1.254才对
最后一个命令就是通过natstat查看网络信息
-a 可以显示all 所有链接
-n可以显示地址信息
-t可以限定为tcp
-p可以显示该程序名字
当然也有其他的很多参数可以使用
接下来我们了解一下一些文本编辑器,当然一些高级的工具有vi,vim,emacs等等,但是该课程不会讲解这些高级的工具。而是介绍入门的基础工具,Nano和Pico是一样的东西,只是名字不同,因此如果nano无法生效那么可以试一试pico。
我们主要了解一下nano
nano的使用很简单,直接输入nano然后后面跟着文件名即可,假如该文件不存在则新建该文档。
nano进入后可以直接输入内容,而下方则会显示出操作命令,ctrl加上对应的快捷键即可,不用去记。
通过cat也可以看到该文件的内容,
这里注意一下比如搜索时候,有多个关键词,那么转到下一个关键词需要按的是alt + w 而不是搜索的 ctrl + w,这里就可以知道下面快捷键里 ^代表ctrl,而M代表alt。
在一些日常应用中,经常需要用到SSH远程登录,以及apache(主要用于Linux的网页服务器)等等,因此接下来会做一些相关的练习。
首先Kali Linux是会安装apache2服务的,但是并未开启,因此必须手动开启服务。开启后局域网内用户也可以访问。
默认清下,网页的index.html是保存在/var/www/html文件夹内的
那么我们可以把文件放在该文件夹内,然后供其他用户下载,同理也可以上传到该文件夹内。
我们可以随便创建2个文件,echo是执行的意思,后续也会讲,>则是导向至某目标文件的意思,即把hello kali user 输入到downloadme和downloadme.txt里。
然后呢,通过访问该目标文件夹即可看到刚才我们创建的文件,这里我测试了txt格式,其实没啥区别
当然也可以通过wget来下载该文件,只要IP地址正确即可
然后我们来试一试ssh,默认情况下爱ssh服务是关闭的,但是也可以通过service命令将其启动。
ssh localhost dengyu ssh 127.0.0.1 ,虽然打开了ssh服务,但是默认情况下,ssh不允许root用户登录以保证安全性。
同样,默认情况下,ssh配置文件默认存储在/etc/ssh/sshd_config这里。
可以通过nano来修改该文件配置,这里有#代表是注释,后面跟的命令不生效
修改后,即可使用root用户来登录ssh本地服务器
最后退出即可
SSH服务器算是开启了,在默认情况下,ssh服务自带一些keys,但是假如我不想用的话,可以自己重新生成一些keys。
我们把自带的这些key先挪到一个文件夹内,
然后通过命令dpkg-reconfigure来再次生成密钥,
之前为什么系统默认不让root用户远程登录ssh呢,就是因为root权限太高,远程登录有风险,我们可以测试一下通过windows的一些工具来远程登录,比如putty和winscp
当然了,通过其他Linux系统也可以用SSH远程登录
Linux SSH远程登录,默认是登录root用户,除非申明
在开启了SSH和Apache2后,很明显再次输入netstat显示的当前运行服务不一样了,多了80的网页服务和22的ssh服务。
课后练习是让我们用SCP来测试一下下载目标文件地址,secure copy 命令
scp [option] [user_name@source_host:path/to/source/file] [user_name@target_host:target/path]
实际用法有很多,这里我一开始还是沿用之前的下载模式使用IP地址下载,但是实际上要加了冒号以及文件路径才行
scp root@192.168.1.118:/var/www/html/downloadme.txt /root/Desktop
SSH实验在我的电脑上运行毫无问题,但是假如有问题的话可以按照下列步骤检测。
Troubleshooting SSH Access
Here are some basic steps to troubleshoot SSH.
- Restart ssh: sudo service ssh restart
- Check SSH is working locally: ssh localhost
- (Optional and NOT recommended) If the above works, check you can SSH using root locally: ssh root@localhost
- From the computer you want to SSH from, ping Kali. If you get a response, proceed. Otherwise double check your network.
- Try SSH remotely using your non-root user. ssh Kali-IP
- If that works, after you SSH use sudo to run privileged commands. Or sudo su to switch to root.
- (Optional and NOT recommended) Finally if all that works, try SSH remotely using root user. ssh root@Kali-IP. This assumes that you have set the root password.
下面我们了解一下Kali Linux里用户和用户组的关系,其实和windows里不同的用户,组效果一样,可以给组或者用户不同的权限,便于管理。
Linux里每一个用户都会有一个ID,默认情况下root的ID是0,而新建的用户则是从1000开始,1001,1002以此类推。而默认组也会随着用户的创建而创立,默认是名字相同。
whoami是最常用的命令,用于查看自己的用户名。
另外一个命令是w,单一个字母,该命令可以显示当前正在登陆的用户以及查看他们的行为。这里我用windows的putty登陆了一下,立刻可以查看到区别。
而系统默认情况下,会把所有用户保存到/etc/passwd里,因此可以直接查看用户列表,每一个用户后面都跟着详细情况,其中最后一点uSr/bin/false或者usr/sbin/nologin这种都是不可以进行远程登录的。而可以登陆的则是 /usr/bin/zsh或者/usr/bin/bash
这些用户的密码则被加密并保存在另一个文件/etc/shadow内,而且这些只有root用户才可以访问该文件。未来我们可以通过工具来破解这些加密信息。
那么查看用户的组有两种方法,一种是查看当前用户所在的组,使用id命令,或者通过groups + 用户名字的方式查看该用户的组
默认情况下,用来储存用户组信息的文件是 /etc/group,可以直接查看
我们已经知道如何查看自己的用户,自己的组,某用户的的组等等,接下来则是如何添加删除用户和组。
用户的添加有两个方法,略有区别:
adduser tom 创建一个用户名字是tom,并且创建home目录
可以看到这种方式会创建home/tom 文件目录
进入到该用户的界面
useradd tom 创建一个用户名字是tom,但是不创建home目录,下文可以看出home目录里并没有jerry
登录到该用户的界面也有些许不同
我们可以查看一下新用户的创建情况,也是有一点点不一样,一个是bash一个是sh
同样的,删除用户也有连个方式:
userdel tom 只删除这个用户tom,但是其他不删除,可以看到home下文件目录还在
deluser tom --remove-home tom 除了删除用户tom以外,还把相应的文件夹删掉,我下文直接用的简写,还可以把邮箱信息页清除掉
新建一个组就只有一个办法,addgroup cats, 创建一个组名字叫cats
usermod可以对用户和组进行更改,usermod -g cats tom,可以把用户tom移动至cats组里
最后删除组就很简单,delgroup tom,删除tom这个组
了解了不同的用户和组之后,可以看一下权限问题,每一个文件,目录或者程序针对不同的用户和组都有不同的权限。
从下图可以看出,rwx一大堆代表不同的权限,第一个字母d或者-代表dirctory或者file。
r 代表read,file可以访问读取,而dirctory可以列出该目录下所有内容
w代表write,file可以修改,directory可以新建,添加,删除,移动该目录中内容
x代表execute,file可以执行,directory可以允许文件执行到该文件目录
此外也可以观察到这里面共有三组权限,有时候是四组,一般默认情况下就是ugoa
u代表user或者owner,当前用户权限,这是第一组
g代表group,当前用户所在组的权限,这是第二组
o代表others,除了当前用户和组的其他用户权限,这是第三组
a代表all,一般不显示这个
所有的权限都可以变更,通过+ 增加权限,-移除权限以及=设置为只有这个权限
一般使用chmod这个命令来更改权限,具体语法为
chmod ugoa +-= rwx filename
chmod u+x somefile, 这个就是给一个名字为somefile的文件加x执行权限到owner
chmod a+rw somefile,这个就是给一个名字为somefile的文件加rw阅读和写入权限到所有用户
下图为一个例子,通过tom给与tom文件夹不同的权限,直到最后给与了all用户x权限,另外一个同等级用户jerry才可以进入到tom文件目录。
渗透或者黑客通常都会根据这些用户的权限然后来偷偷加入一些代码执行然后提升权限,获取信息等等。所有的用户都可以通过命令前加sudo 然后以root权限的形式运行,但是需要知道密码。
sudo -l 列出该用户可以用root权限运行的程序
sudo nmap 以root权限运行程序nmap
此外还可以修改 /etc/sudoers中的内容来修改权限
默认情况下,root拥有所有权限
而我可以给与tom全权限,但是我测试了一下似乎并没有得到全权限。重启了以后 依然没有root那么大的权限。已经提问了,等待回复
用户和组的概念除了体现在文件和目录的操作以外,还可以体验现在process 即进程中,每一个进程都有一个独特的ID,以及是哪个用户,哪个组正在运行。不同的process也需要不同的权限,root运行的process就很危险,因为一旦被发现和找到漏洞,那么就会被攻击,而且由于权限最高,因此是最危险。所有的进程都可以被停止,暂停,查看等等进行操作。
用于查看process的命令是ps
ps 列出当前的processes
ps -f 列出当前的processes并且是详细列表
ps -e列出所有的processes
也可以组合起来用
ps -u [username] 列出相应用户的processes
ps -p [pid] 列出某ID得process信息
那么进程可以通过多种方式终结掉,
ctrl + c 结束当前进程
kill [pid] 结束某id的进程
kill 9 [pid] 强制结束某id的进程,这个很危险
那么有两种特殊情况,第一种是道德黑客或者渗透测试时候输入了一个命令,该命令需要若干时间比如几个小时才可以完成,那么这时候如果干等的话就是浪费时间,所以需要把程序后台运行,然后就可以继续其他命令的操作。第二种情况是远程登录的时候,可能某个命令也需要若干个小时,这时候下班了,需要关闭电脑,因此ssh之类的session就会关闭,而普通情况下一关闭,当前正在运行的程序也会关闭。但是如果让程序后台运行,则可以把电脑关闭,第二天上班重新连接,后台运行的程序不会受到影响。
这两种情况一般称为 back/foreground process
任何命令后跟 & command以后台运行某程序,看下图可以对比出区别,加了&后再按 ctrl +c 或者回车不会中断该程序
如果不想按回车之类的,可以直接忽略掉输出,使用nohup 放在command前面
jobs 列出当前后台运行的程序有哪些,可以看到刚才运行的
fg [n] 后台运行的程序加id可以把其提到前台,foreground,这里注意数字前加%表示数字
这个方式,关闭了终端后程序会自动结束,因此需要更好的办法,
除此之外还有其他方法可以实现程序的后台运行,比如利用工具tmux
tmux,让terminal进入到特有的界面,可以看到下面有一个颜色bar
输入命令后,
然后按 ctrl + b,然后再按d即可退出tmux界面,回到原始界面,而程序是在后台运行的
那么查看当前被tmux放置后台的命令是tmux list-sessions
而,使用tmux attach可以回到tmux的界面,注意如果再次使用tmux则是新开启一个tmux的界面
使用exit即可退出tmux,
同样注意,关闭该用户界面后再次登录不受到任何影响。
远程登录用SSH时一样的效果,如果会涉及到关闭终端,那么就用tmux,不然就简单的 &
在使用各种命令时候,有时候想把某些输出的信息保存到某个文件,或者想从某个文件中提取信息输出到终端或者其他命令里,就需要redirection命令
>输出到某个文件,假如该文件存在则覆盖内容
>>输出到某个文件,并且是把内容插入到后面
< 从某个文件中提取内容输出到某个命令,暂时没找到案例。
有的时候需要把某一个命令的输出作为另外一个命令的输入,当然可以复制粘贴这种操作,但是也可以同时使用2个命令。
| 即把不同的命令结合起来,前一个的输出作为后一个的输入。可以看一下下面三个图,分别是单命令,加more命令和加less命令。more和less都是分页浏览工具,让显示内容可以分页浏览,但是less更加强大,可以搜索等等。
也可以使用grep命令,该命令可以加一个关键字然后进行搜索
grep也可以抓取文件内某个关键字
有时候我们会遇到这种情况,抓取到某个关键字,但是其他内容太多了,不想显示全部
这个时候可以使用cut命令来进行信息的分割切割然后根据自定义来显示
cut -d ‘ ’ -f 2 这里-d代表自定义分隔符,然后两个单引号内是空格代表分隔符是空格,然后-f是配合-d一起使用的,后面的数字代表选择显示哪一个分隔符的内容,这里2 所以显示第二部分
这里还一个问题,因为有许多重复的IP地址,所以可以进一步筛选,让其只显示不重复的部分。
sort可以用来筛选和排序,可以进一步操作,下图中,sort -u代表只显示unique的部分
然后可以进一步将其输出到某个文件内,