Bash
ls
- ls -1 将每个文件显示在一行 自动化!
- ls -la 使用长列表格式并包含所有文件,包括隐藏文件
文本输出命令
-
cat more less head tail 将文本输出到终端
-
cat -n 将显示文件的内容并显示文件的行数
-
more 简单查看文本文件,如果文件很大,一次显示一屏幕
-
less 显示内容允许前后翻页,+F可以监视文件变化
-
head 打印文件的前几行 head -n 3 file.txt 应用场景举例查看配置文件
-
tail 尾端几行 tail -n 3 file.txt 日志在底部写入最新时间
linux 文件系统
/bin/ 基本程序
/boot/ linux内核以及早期启动过程中所需的其他文件
/dev/ 设备文件 /etc/ 配置文件
/home/用户个人文件
/media/可移动设备挂载点
/root/ 管理员的个人文件
传统上,应用程序配置文件直接储存在用户主目录之下,文件名以点开头,因此会被隐藏,
某些程序狐疑将多个配置文件组织在一个目录中(例如~/.ssh/)
Zsh shell
echo $SHELL 可以知道我们在哪个shell环境下 操作
注意,此时的SHELL为变量概念,同时有其他的变量操作
learn=15
echo $learn(这里会输出15)
注意,我们的变量仅仅存储在当前shell环境,关闭终端后,15就被丢弃
注意SHELL是环境变量,全局公认。不一定反映当前正在运行的 shell 环境。相反,SHELL只是用户首选 shell 的名称,通常在/etc/passwd文件 中标识。
set
set命令可以列出其他环境变量
HISTFILE
Zsh将历史命令记录储存在HISTFILE变量中
kali@kali:~$ <cu>echo $HISTFILE</cu>
/home/kali/.zsh_history
但是要注意
虽然每个用户都有自己的.zsh_history,但是当查看别的用户历史记录
权限问题
history
同样效果
kali@kali:~$ <cu>history</cu>
example_command1
example_command2
example_command3
...
kali@kali:~$ <cu>cat ~/.zsh_history</cu>
example_command1
example_command2
example_command3
...
起别名
顾名思义,优化流程
kali@kali:~$ <cu>alias ll='ls -la'</cu>
kali@kali:~$ <cu>ll</cu>
total 40
drwxrwxrwt 10 root wheel 320 Apr 24 13:19 .
drwxr-xr-x 6 root wheel 192 Mar 18 20:10 ..
-rw-r--r--@ 1 kali wheel 0 Apr 21 19:56 MozillaUpdateLock-2656FF1E876E9973
-rw-r--r-- 1 kali wheel 10 Apr 21 15:18 a
...
不过这里的别名设置是临时别名,如果想要永久的话修改**~/.zshrc文件包含alias ll=‘ls -la’**完成之后,运行source ~/.zshrc来重置shell环境并适应新的别名,然后就可以直接运行ll了
渗透中,获得目标的访问权限之后,就要系统枚举(收集有关系统的信息,通常是为了提取)
可以使用/etc/issue获取版本
kali@kali:~$ <cu>cat /etc/issue</cu>
Kali GNU/Linux Rolling \n \l
uname打印内核名称
kali@kali:~$ <cu>uname</cu>
Linux
uname -v 打印内核版本
kali@kali:~$ <cu>uname -v</cu>
#1 SMP Debian 5.9.1-1kali2 (2020-10-29)
uname -a打印uname可以访问的内核相关信息
kali@kali:~$ <cu>uname -a</cu>
Linux academy 5.9.0-kali1-amd64 #1 SMP Debian 5.9.1-1kali2 (2020-10-29) x86_64 GNU/Linux
linux 文件管理
touch
touch创建新空文件,如果文件已经存在,那么只修改文件的访问时间戳
kali@kali:~$ <cu>touch newfile</cu>
kali@kali:~$ <cu>ls -l</cu>
total 0
-rw-r--r-- 1 kali kali 0 Jun 11 09:27 <cg>newfile</cg>
rm
删除文件 rm filename
注意没有回收站和垃圾桶,删除情报是真的
mkdir
创建目录
kali@kali:~$ <cu>mkdir newdir</cu>
kali@kali:~$ <cu>ls -l</cu>
total 4
drwxr-xr-x 2 kali kali 4096 Jun 11 09:31 newdir
-rw-r--r-- 1 kali kali 0 Jun 11 09:27 newfile
rmdir
删除空目录
mv
移动或者重命名文件 mv a b 移动a文件到b目录或者把a重命名为b
cp
复制
kali@kali:~$ <cu>cat hi.txt</cu>
hello
kali@kali:~$ <cu>cp hi.txt bye.txt</cu>
kali@kali:~$ <cu>cat bye.txt</cu>
hello
kali@kali:~$ <cu>ls</cu>
bye.txt hi.txt
symbolic link ||symlik
软链接
kali@kali:~$ <cu>touch original.txt</cu>
kali@kali:~$ <cu>echo 'hello world' > original.txt</cu>
kali@kali:~$ <cu>cat original.txt</cu>
hello world
kali@kali:~$ <cu>cd /tmp</cu>
kali@kali:/tmp$ <cu>ln -s ~/original.txt symlink.txt</cu>
kali@kali:/tmp$ <cu>ls -la</cu>
lrwxrwxrwx 1 kali kali 21 Jun 3 17:43 symlink.txt -> /home/kali/original.txt
kali@kali:/tmp$ <cu>cat symlink.txt</cu>
hello world
kali@kali:/tmp$ <cu>echo 'goodbye planet' > ~/original.txt</cu>
kali@kali:/tmp$ <cu>cat symlink.txt</cu>
goodbye planet
硬链接
简单来说就是复制为一个副本
ln ~/a b
b就和a一样了,而且删除a不会影响到b
通配符
*
kali@kali:~$ <cu>ls -l a*</cu>
-rw-r--r-- 1 root wheel 515 Jun 6 2020 afpovertcp.cfg
lrwxr-xr-x 1 root wheel 15 Mar 9 20:49 aliases -> postfix/aliases
-rw-r----- 1 root wheel 16384 Jun 6 2020 aliases.db
-rw-r--r-- 1 root wheel 1051 Jun 6 2020 asl.conf
-rw-r--r-- 1 root wheel 149 Oct 30 08:55 auto_home
-rw-r--r-- 1 root wheel 195 Oct 30 08:55 auto_master
-rw-r--r-- 1 root wheel 1935 Oct 30 08:55 autofs.conf
...
查找文件
which
which 在&PATH环境变量中搜索给定的文件名
找到之后,返回文件的完整目录
kali@kali:~$ <cu>echo $PATH</cu>
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
kali@kali:~$ <cu>which sbd</cu>
<cr>/usr/bin/sbd</cr>
locate
最快的方法,搜索域为local.db内置数据库,而不是硬盘本身,会通过自动任务定期自动更新
find
递归遍历文件层次结构
管道和重定向
在基于linux的系统中,每个命令行上运行的每个程序都会自动有三个数据流连接,每个数据流还分配有一个文件描述符整型值
STDIN(0) STDOUT(0) STDERR(2)错误信息
>将STDOUT重定向到后者,本质是1> 覆盖数据
kali@kali:~$ <cu>ls -lah > listing.txt</cu>
kali@kali:~$ <cu>cat listing.txt</cu>
total 1056
drwxr-xr-x 85 root wheel 2.7K Apr 19 17:41 .
drwxr-xr-x 6 root wheel 192B Mar 18 20:10 ..
-rw-r--r-- 1 root wheel 515B Jun 6 2020 afpovertcp.cfg
lrwxr-xr-x 1 root wheel 15B Mar 9 20:49 aliases -> postfix/aliases
-rw-r----- 1 root wheel 16K Jun 6 2020 aliases.db
...
>>附加形式重定向
(wc -m可以计数)
2>可以将错误信息重定向到文件
|将一个命令的输出作为输入传递给另一个命令。
kali@kali:~$ <cu>ls | sort</cu>
afpovertcp.cfg
aliases
aliases.db
apache2
asl
asl.conf
...
搜索与文本操作
grep
在文本中搜索给定的正则表达式-r在目录中进行递归搜索-i忽略文本大小写
kali@kali:~$ <cu>ls -la /usr/bin | grep zip</cu>
-rwxr-xr-x 3 root root 34480 Jan 29 2017 bunzip2
-rwxr-xr-x 3 root root 34480 Jan 29 2017 bzip2
-rwxr-xr-x 1 root root 13864 Jan 29 2017 bzip2recover
-rwxr-xr-x 2 root root 2301 Mar 14 2016 gunzip
-rwxr-xr-x 1 root root 105172 Mar 14 2016 gzip
sed
几乎为流编辑器
替换
kali@kali:~$ <cu>echo "I need to try hard" | sed 's/hard/harder/'</cu>
I need to try harder
cut
截取一段
-f(表示 我们要剪切的字段编号)和**-d**(表示字段分隔符)。
kali@kali:~$ <cu>echo "I hack binaries,web apps,mobile apps and just about anything else" | cut -f 2 -d ","</cu>
web apps
也可以提取一段
kali@kali:~$ <cu>cut -d ":" -f 1 /etc/passwd</cu>
root
daemon
bin
sys
sync
games
...
awk
kali@kali:~$ <cu>echo "hello::there::friend" | awk -F "::" '{print $1, $3}'</cu>
hello friend
和cut最明显的区别就是可以使用它多个字符作为分隔符
一般来说,更为灵活,最常用的是-F(字段分隔符)和print子命令(输出结果文本)
当涉及多个字符串操作的命令的时候,就考虑awk
比较文件
comm
comm比较两个文件,
第一列为第一个文件所特有,第二列为第二个文件所特有,第三列为共有
使用-n可以隐藏一列或多列(n=123)
kali@kali:~$ <cu>cat scan-a.txt</cu>
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
kali@kali:~$ <cu>cat scan-b.txt</cu>
192.168.1.1
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
kali@kali:~$ <cu>comm scan-a.txt scan-b.txt</cu>
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
kali@kali:~$ <cu>comm -12 scan-a.txt scan-b.txt</cu>
192.168.1.1
192.168.1.3
192.168.1.4
192.168.1.5
diff
检测文件之间的差异
-c上下文格式
-u统一格式
-表示只出现在第一个文件
+表示只出现在第二个文件
kali@kali:~$ <cu>diff -c scan-a.txt scan-b.txt</cu>
*** scan-a.txt 2018-02-07 14:46:21.557861848 -0700
--- scan-b.txt 2018-02-07 14:46:44.275002421 -0700
***************
*** 1,5 ****
192.168.1.1
- 192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
--- 1,5 ----
192.168.1.1
192.168.1.3
192.168.1.4
192.168.1.5
+ 192.168.1.6
kali@kali:~$ <cu>diff -u scan-a.txt scan-b.txt</cu>
--- scan-a.txt 2018-02-07 14:46:21.557861848 -0700
+++ scan-b.txt 2018-02-07 14:46:44.275002421 -0700
@@ -1,5 +1,5 @@
192.168.1.1
-192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
+192.168.1.6
终端编辑器
nano
C+o保存文件
C+x退出文件
C+w输入搜索词Enter搜索,C+w移动到下一个匹配项
用户和组
/etc/passwd或者/etc/shadow
passwd是全局可读
shadow
root<cr>:</cr>$6$pfiZTzNB1wav3OFG$GDwbvI44D7sBuX7Q.6LmNWx.RaU6nzxZWCCkkMNIXCkvANnNoYogV983NSLkG1cfpaW4mmyFuTOKkDf53hVkh/<cr>:</cr>18781<cr>:</cr>0<cr>:</cr>99999<cr>:</cr>7<cr>:::</cr>
根条目是纯文本形式用户名
下一部分是加密密码
下一部分18718是密码最后一次更改的时间,采用时间戳的形式
99999表示密码有效的最大天数
最后一个7表示密码到期前多少天会提醒用户更改密码
passwd
john<cr>:</cr>x<cr>:</cr>1002<cr>:</cr>1002<cr>:</cr>John Doe,,,<cr>:</cr>/home/john<cr>:</cr>/bin/bash
john是纯文本形式的用户名
x表示需要从shadow中提取密码
第一个1002表示用户ID,这是系统上每一个账户的唯一编号(UID)
第二个1002是用户所属的主要组ID(GID)
其他组成员身份在/etc/group文件中定义
John···位于可选字段,称为注释字符,通常包含用户的全名,用于提供信息
/home/john是用户的主目录位置
/bin/bash是用户的默认环境
aW4mmyFuTOKkDf53hVkh/:18781:0:99999:7:::
根条目是纯文本形式用户名
下一部分是加密密码
下一部分18718是密码最后一次更改的时间,采用时间戳的形式
99999表示密码有效的最大天数
最后一个7表示密码到期前多少天会提醒用户更改密码
# passwd
john:x:1002:1002:John Doe,:/home/john:/bin/bash
john是纯文本形式的用户名
x表示需要从shadow中提取密码
第一个1002表示用户ID,这是系统上每一个账户的唯一编号(UID)
第二个1002是用户所属的主要组ID(GID)
其他组成员身份在/etc/group文件中定义
John···位于可选字段,称为注释字符,通常包含用户的全名,用于提供信息
/home/john是用户的主目录位置
/bin/bash是用户的默认环境