🏴󠁧󠁢󠁳󠁣󠁴󠁿文件管理和IO重定向

文件管理命令

stat命令

查看文件状态

每个文件有三个时间戳:

access time    访问时间,atime,读取文件内容
modify time    修性时间,mtime,改变文件内容
change time    改变时间,ctime,元数据发生改变
[root@controller ~]# stat /etc/passwd
  文件:"/etc/passwd"
  大小:1366       块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:33577573    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2021-07-10 02:24:21.759473069 -0400
最近更改:2021-06-14 07:47:23.549736484 -0400
最近改动:2021-06-14 07:47:23.551743477 -0400
创建时间:-

场景是:上传了WebShell,避免被find命令通过时间查找出来

touch命令

rename命令

删除文件

硬链接、软链接

硬链接和软链接的区别:

硬链接本质上就是给文件起一个新的名字,实质是同一个文件

软链接本质上不是同一个文件

  • Inode

    • 硬链接:相同

    • 软链接:不相同

  • 文件夹

    • 硬链接:不支持

    • 软链接:支持

  • 删除源文件

    • 硬链接:不受影响

    • 软链接:链接文件,和源文件无关

  • 文件大小

    • 硬链接:和源文件相同

    • 软链接:源文件的路径的长度

业务场景:/var/www/php1 -> /usr/local/php_v1.1 , 当发布新版本时,在不更改配置文件的情况下,将软链接指定到其它的版本中;

IO重定向

一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个文件分配一个编号(一个 ID),这个编号就是一个整数,被称为文件描述符(File Descriptor)。

标准输入和输出

Linux提供了三种I/O设备:

文件描述符

文件名

类型

硬件

0

stdin

标准输入文件

键盘

1

stdout

标准输出文件

显示器

2

stderr

标准错误输出文件

显示器

输出重定向是指命令的结果不再输出到终端上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来

以上重定向如果文件存在则文件内容会被覆盖

合并标准输出和错误输出为同一个数据流进行重定向

反弹Shell

反弹Shell本质是把bash进程的 0 1 2 输入输出重定向到远程socket,由socket中获取输入,重定向标准输出(1)和错误输出(2)到socket。

  • bash -i

    • Bash是linux较为常见的Shell,除此之外,还有zsh、sh、ksh等等,

    • -i 参数表示产生交互式的Shell

  • >&

    • 混合输出,将正确、错误都输出到一个地方,避免受害者机器上能看到在攻击者机器中执行的指令。

  • /dev/tcp/ip/port

    • Linux下一切皆文件,可以看成是一个设备文件,这个文件进行读写,就能实现与监听端口的服务器Socket通信。

  • 0>&1

    • 0表示输入,就将Attack输入,然后命令执行的结果为1,也会输出给攻击者,就形成了一个回路,实现了远程交互式Shell

管道符

Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。

Linux 管道使用竖线|连接多个命令,这被称为管道符。

当在两个命令设置管道时,管道符 | 左边命令的输出就变成了右边命令的输入,Linux大部分命令都可以用来形成管道;

重定向和管道的区别?

重定向操作符 “>” 将命令与文件连接起来

而管道符 “|” 将命令与命令连接起来

例如在无交换式的情况下添加root帐号密码;

Tips:

遇到不懂的命令怎么办?

:(){ :|:& };:

可以通过这个网站解析语法:https://www.explainshell.com/

Last updated

Was this helpful?