🏴文件管理和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?