前言
本节简单纪录了一些linux常用命令和linux敏感文件
linux 文件
home目录
.bash_history 文件是记录用户在shell中输入的所有命令历史的文件,可以通过输入 history 命令查看。它通常存储在当前用户的 home 目录中
读取/etc/passwd文件内容
www:x:1002:1002::/home/www:/sbin/nologin
记录用户名www及其workdir:/home/www/;读取/home/www/.bash_history,发现服务器的历史命令:
etc目录
/etc/passwd
文件是Linux系统保存用户信息及其工作目录的文件,权限是所有用户/组可读,一般被用作Linux系统下文件读取漏洞存在性判断的基准。读到这个文件我们就可以知道系统存在哪些用户、他们所属的组是什么、工作目录是什么
/etc/shadow 用于存储用户的加密密码和与密码相关的其他安全信息
/etc/(cron.d/*|crontab)
定时任务文件
etc/environment是环境变量配置文件之一,可能存在大量目录信息的泄露
/etc/hostname表示主机名
/etc/hosts是主机名查询静态表,包含指定域名解析IP的成对信息。通过这个文件,参赛者可以探测网卡信息和内网IP/域名
proc目录
/proc 目录是一个虚拟文件系统,提供了关于系统内核、进程、硬件以及系统状态的实时信息。/proc 目录中的文件和子目录并不存储在磁盘上,而是由内核动态生成和维护的。它为用户和程序提供了一个与内核交互的接口。
/proc/version 内核信息
/proc/sched_debug 正在运行的进程信息
/proc/net/wireless 无线网卡信息和基础信息
pid是进程的标号:
/proc/pid/cmdline 是一个只读文件,包含进程的完整命令行信息
/proc/pid/cwd 包含了当前进程工作目录的一个链接
/proc/pid/environ 包含了可用进程环境变量的列表
/proc/1/environ
self即当前进程
/proc/self/cmdline 当前进程的完整命令
/proc/self/maps 查看当前进程的内存映射关系
cat /proc/self/cmdline 当前进程的完整命令
ls -al /proc/self/cwd 获取目标当前进程环境的运行目录
ls -al /proc/self/exe 获得当前进程的可执行文件的完整路径
cat /proc/self/environ 获取当前进程的环境变量信息
cat /proc/self/fd/{id} 获取当前进程打开的文件内容
/proc/net/arp
/proc/net/fib_trie
其他目录
- apache
/var/log/apache2/
/var/log/apache2/access.log 如果是静态靶场的化可以查看别人的poc
/var/log/apache2/error.log
/var/www/html Apache默认Web根目录
2. php session目录
/var/lib/php7/sessions/
linux命令
在类 Unix 系统中,PATH 是一个环境变量,它告诉 shell(如 Bash、Zsh)在哪些目录下查找可执行的命令。当你输入一个命令时,系统会按照 PATH 变量中的路径顺序,逐一查找该命令对应的可执行文件。
如果 /usr/bin 目录包含在 PATH 中(通常是默认配置),那么你可以直接在终端中输入该目录下的命令,系统会自动在 /usr/bin 目录中找到并执行它
echo $PATH
查看 PATH 环境变量
/bin 存放的是系统引导和修复所需的基础命令,例如 ls, cp, mv, rm, cat, sh 等
/usr/bin 存放的是常用的用户命令和应用程序,例如,文本编辑器(如 vim)、编译器(如 gcc)、各种脚本语言的解释器(如 python, perl)等。
shell命令
bash -c 命令
1 | root@kali: bash -c whoami |
bash -i 命令
以交互方式运行shell
1 | # 目标主机: |
输出命令
1.printf
printf 命令模仿 C 程序库(library)里的 printf() 程序,功能相近$(printf "\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64")
也可以简化 $'\154\163'
ls
管理目录
- cd命令(change directory)
~ 也表示为当前用户的家目录,. 则是表示目前所在的目录, .. 则表示目前目录位置的上一层目录。
cd 进入用户主目录
cd - 返回进入此目录之前所在目录
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd !$ 把上个命令的参数作为cd 参数使用
cd . 当前目录 - ls命令(list)
ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限1
2
3
4
5
6
7
8
9ls 文件名,若文件存在,输出文件名
ls -a 列出目录所有文件,包含以.开始的隐藏文件
ls -r 反序排列
ls -R 递归处理,将指定目录下的所有文件及子目录一并处理;
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -l(ll) 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
蓝色表示目录; 绿色表示可执行文件; 红色表示压缩文件; 浅蓝色表示链接文件; 灰色表示其它文件; 红色闪烁表示链接的文件有问题了; 黄色是设备文件
3. dir命令(和 ls 命令类似)只不过用ls写入文件中时,每个文件名都是单独一行,它会自动换行,但dir就会全部写入一行中,并且会自动加空格
4. pwd 命令(print work directory)
用于查看当前工作目录路径,查看软链接的实际路径pwd -P
目录和文件操作
mkdir命令(make directory) 用于创建文件夹
rmdir命令
注意:rmdir删除的目录dir必须是空目录,否则删除不掉dir这个目录。touch 用于创建文件,相等于>
mv 命令(move)
移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;
如文件,则以此文件名重命名文件,并覆盖同名的原文件)
移动目录或修改目录,根据第二参数是否存在(目录名已存在,将移动目录到目录 中;
目录名不存在,则重命名目录并移动到目录所在位置使目录存在.)cp 命令(copy)
-f:覆盖已经存在的目标文件而不给出提示。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r或-R:递归处理,将指定目录下的子文件和子目录一并处理(复制目录的时候使用)[root@tjf328 ~]# cp /root/a.txt /tmp/
6. find命令
用来在指定目录下查找文件 find [path] [expression]
实例:
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:# find . -name "*.c"
寻找根目录下所以flag开头的文件find / -name flag*
三天内新加或修改的文件:
find . -type f -mtime -3
- rm 命令(remove)
可以直接使用 rm 命令删除文件;
-r :是 rm 命令的可选项,表示递归处理,将指定目录下的所有文件与子目录一并处理;
-f :是 rm 命令的可选项,表示强制删除文件或目录
8. sh命令
将文件中的内容当作命令来执行,同时.也可以执行命令
例如:
. \a=sh \a
文本操作
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理
- grep 命令
grep 指令会把含有范本样式的那一列显示出来,常用于文本搜索和选择输出
格式: grep -ira “flag{“ / 2>/dev/null
-i: 不区分大小写。
-r: 递归查找子目录。
-a: 不要忽略二进制的数据
-v: 显示不包含匹配文本的所有行。
-n: 显示匹配行及 行号
-o: 只输出匹配到的文本。
-h: 不输出匹配行所在的文件名。
-H: 显示匹配的行所在文件的文件名。
-E: 使用扩展正则表达式grep -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" -r xxx --color=auto
awk 命令
sed 命令
-e 脚本命令 该选项会将其后跟的脚本命令添加到已有的命令中。例如sed -e “1p” -e “5p” 1.txt
-f 脚本命令文件 该选项会将其后文件中的脚本命令添加到已有的命令中。
-n 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。
-i 此选项会直接修改源文件,要慎用。
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,例如sed ‘/1/,/3/d’ data6.txt
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如sed -n ‘s/test/trial/p’ data5.txt
- tr
tr命令可以对来自标准输入的字符进行替换
tr [选项] 字符集合1 [字符集合2]
例:echo “HELLO WORLD” | tr ‘A-Z’ ‘a-z’ - tee
用于读取标准输入的数据,并将其内容输出成文件,常用做写日志
-a或–append 附加到既有文件的后面,而非覆盖它
文件读取
- cat 命令(concatenate)
用于连接文件并打印到标准输出设备上 - tac
Linux常用命令tac 刚好是将 cat 反写过来,所以他的功能就跟 cat 相反啦,
即tac 则是“ 由最后一行到第一行反向在屏幕上显示出来,行内的顺序不变 - more 命令
cat的升级版, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。
(1)显示文件中从第3行起的内容
more +3 text.txt
(2)在所列出文件目录详细信息,借助管道使每次显示 5 行
ls -l | more -5 - less
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。 - head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。 - tail
tail 命令可用于查看文件的结尾部分的内容,tail -f filename ,会跟踪名为 filename的增长情况,会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。 - nl
nl可以将输出的文件内容前自动的加上行号,整体来说,nl主要是对行号做更多的修饰。 - rev命令
把每一行字符的顺序颠倒过来显示文件内容
若其后跟的是文件,则将文件每一行颠倒,但行的顺序不变
文件所有权和访问权限
ll命令详解
文件类型
常规文件(-) :文本文件和二进制文件
目录文件(d) :目录文件是文件系统中一个目录所包含的目录项所组成的文件
设备文件(c or b) :每种I/O设备对应一个设备文件,存放在 /dev 目录中。
管道文件(p) :主要用于在进程间传递数据 ,又称先进先出(FIFO)文件
链接文件(L) :链接又可以分为软链接(符号链接)和硬链接,它提供了共享文件的一种方法。
r:目录执行ls以列出目录内容; 文件可读
w:目录创建、删除文件; 文件可写
x:可以cd切换进此目录,也可以使用ll查看内部文件的详细信息; 文件可执行
ls -l(ll) 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
7 rw 5 r 3 w x
文件类型 u所有者,g组群,o其他人的权限 一级目录个数 所有者 所属的组 文件的大小 最近修改文件的最后日期 文件名rwx rx wx. 1 root root 0 Sep 29 19:36 as
----------a-------------
- 改变所属的用户组
chrgp [选项] 组名 文件名 - 改变所有者
chown [选项] 用户:组 文件名 - 修改文件访问权限
文字法
chmod a+w,o-x,ug–r 1.txt
数字法
chmod 644 2.txt文件编辑
vi与vim的区别
vi编辑器只能运行于unix中,而vim不仅可以运行于unix,还可用于windows、mac等多操作平台。
vim可以用不同的颜色来加亮你的代码。vi使用于文本编辑,但是vim更适用于coding模式转换
正常–>输入
i:在当前光标所在字符的前面,转为输入模式;
o:在当前光标所在行的下方,新建一行,并转为输入模式
输入–>正常:
ESC
正常–>末行:
:(英文冒号)
末行–>正常:
ESC
末行模式
- 保存退出
:q 退出; :w 保存; :wq 保存退出 :wq! 强制保存并退出
- 到指定一行
:$ 最后一行; :# 第#行; :+# 向下的#行 :n1,n2d 删除指定范围的行
- 查找
:/查找内容 从光标所在行向下查找
:?查找内容 从光标所在行向上查找
n 下一个
N 上一个
- 替换
:1,10s/old/new/g
:%s/old/new/g(% 是一个变量,在这里代表整篇文档)正常模式
- 行内跳转:
0: 绝对行首; $: 绝对行尾
- 翻屏
Ctrl+f: 向下翻一屏; Ctrl+b: 向上翻一屏;
- 行操作
u:撤消前一次的编辑操作;(连续u命令可撤消此前的n次编辑操作;)
dd 剪切单行
p 粘贴到光标的后面
用户权限
使用id 用户名,查看指定用户所属组
1 | $ id |
普通用户只能改变自己的文件或文件夹权限
root用户可以更改所有用户的权限
其他
- ln命令
在链接目标目录中修改文件都会在源文件目录中同步变化。
软连接:ln –s 源文件 链接文件
是在选定的地方生成一个文件的映射,映射文件不占用磁盘空间,软链接可以 跨文件系统 ,硬链接不可以
修改存在的软连接: ln -nsf 源文件 链接文件
硬链接:ln 源文件 链接文件
是在选定的位置生成一个文件的镜像,镜像文件与源文件同样大小,但不占用实际空间,不允许给目录创建硬链接。
删除链接:unlink 链接文件
常见符号
\ 转义字符
放在特殊符号前,则该特殊符号的作用消失,放在指令的最末端,表示指令连接下一行
<输出重定向
1 | 命令 < 文件 将指定文件作为命令的输入设备 |
> 表示覆盖内容
1 | 1, 通过>来创建文件 |
‘’,””引号
单引号’’剥夺了所有字符的特殊含义,单引号’’内就变成了单纯的字符。
双引号””则对于双引号””内的参数替换($)和命令替换(``)是个例外。
{}花括号
如touch {a,b}.txt 结果为a.txt b.txt。
如:touch {a…d}.txt 结果为a.txt b.txt c.txt d.txt。
Linux中$ {}
、$()
、$(())
的功能
${}
- 对变量的替换,同$var。
1
2
3
4
5
6
7
8
9[root@cn21 ~]# var=login
[root@cn21 ~]# echo "aa$var"
aalogin
[root@cn21 ~]# echo "$varaa"
[root@cn21 ~]# echo "$var aa"
login aa
[root@cn21 ~]# echo "${var}aa" #注意此时大括号作用
loginaa - 变量间接引用
1
2
3
4
5
6ubuntu@VM-12-3-ubuntu:~$ echo $0
-bash
ubuntu@VM-12-3-ubuntu:~$ echo ${!?}
-bash
ubuntu@VM-12-3-ubuntu:~$ echo ${!#}
-bash - 计算字符串长度
1
2
3
4
5
6
7
8
9
10
11
12ubuntu@VM-12-3-ubuntu:~$ a=2
ubuntu@VM-12-3-ubuntu:~$ echo ${a}
2
ubuntu@VM-12-3-ubuntu:~$ echo ${#a}
1
ubuntu@VM-12-3-ubuntu:~$ echo ${##}//$#的值是0
1
ubuntu@VM-12-3-ubuntu:~$ echo ${#}
0
ubuntu@VM-12-3-ubuntu:~$ echo ${###}
0 - 返回上一条命令执行结束后的传回值
${?}
//表示0 用途:上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。
**$()
**:对命令的替换,同``(反引号),查询失败返回就空,wh$(f1hgb)oa$(f1hgb)mi
$(())
:对内部内容进行整数运算$((var1*var2)),输出结果为十进制
进制转换
将其他进制转换为十进制$((N#var)),其中N为进制。位运算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17ubuntu@VM-12-3-ubuntu:~$ echo $((~$(())))
-1
ubuntu@VM-12-3-ubuntu:~$ echo $((~0))
-1
ubuntu@VM-12-3-ubuntu:~$ echo $((~1))
-2
ubuntu@VM-12-3-ubuntu:~$ echo $((~11))
-12
ubuntu@VM-12-3-ubuntu:~$ echo $((1<<1))
2
ubuntu@VM-12-3-ubuntu:~$ echo $((1<<1<<1))
4
ubuntu@VM-12-3-ubuntu:~$ echo $((2#10001))
17
ubuntu@VM-12-3-ubuntu:~$ echo $(( $((1<<1))#10001 ))
17分隔符
windows:
‘|’ 在前面命令的结果上,执行后面的指令
‘||’ 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
‘&&’ 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令,例如?cmd=cd ..&&ls&&ca$@t ffff$@llllaaaaggggg
‘&’ 前面和后面命令都要执行,无论前面真假
Linux:
Linux系统包含了windows系统上面四个之外,还多了一个 ‘;’ 这个作用和 ‘&’ 作用相同