赞
踩
本文介绍一下主机安全中目录、文件相关的命令,一些常用命令不详细介绍,仅仅列出,主要介绍的是安全相关的命令,方便做排查和防御。最后列出应急常看的目录。
file 直接后面加文件
-i 来查看MIME类型
-L 跟随链接
Access:atime,文件最后访问时间
Modify:mtime,文件最后修改时间
Change: ctime,文件最后状态(元数据,如所有者、位置、权限)改变时间
字段解释如下:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
path默认当前目录,expression默认-print
find 命令远比你想象的还要强大,后续suid提权时还会用到。
主要是测试、操作、全局、位置选项,这里仅看两个。
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-executable 匹配当前用户可执行的文件和可搜索的目录。
-false:将find指令的回传值皆设为False;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-iwholename 模式参见`-ipath`。此选项的可移植性较`-ipath`差。
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-lname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-newerXY<引用>:如果正在考虑的文件的时间戳 X 比文件引用的时间戳 Y 更新则成功。
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-readable:匹配当前用户可读的文件
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-samefile 名称 文件与名称指向相同的 inode。
-size<文件大小>:查找符合指定的文件大小的文件;
-type<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-writable:匹配当前用户可写入的文件。
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
-context<表达式>:仅限 SELinux。文件的安全上下文与全局模式匹配
-delete 删除文件或目录。
-exec 执行命令
-execdir 在包含匹配文件的子目录中执行命令
-ok 执行命令前询问用户
-okdir 在包含匹配文件的子目录中执行命令前询问用户
-fls 创建文件并将结果写入文件
-fprint 将完整文件名打印到指定文件中
查找目录下指定名称的文件
find . -name "*.txt" -o -name "*.pdf"
匹配路径或文件
find /usr/ -path "*local*" | head -n 5
查询指定类型文件
find . -type f
参数列表:
深度限制
find . -maxdepth 3 -type f
根据时间查找
find . -type f -atime -7
根据文件大小查找
查到大于10k的文件
find . -type f -size +10k
根据权限查找
find . -type f -perm 644
找出当前目录用户lady_killer拥有的所有文件
find . -type f -user lady_killer
否定参数
通过!来否定后面的参数,找出当前目录用户lady_killer拥有的所有文件,并且权限不是644
find . -type f -user lady_killer ! -perm 644
对找到的文件执行命令
对找到的文件,查看下前两行
find . -type f -user lady_killer ! -perm 644 -exec head -n 2 {} \;
存在数据库里面,主打一个快
locate 查找相关文件
-i 忽略大小写
-r 正则匹配
之前学linux基础时讲过,参考:kali-chmod修改权限
补充一下特殊权限:
给find添加suid权限
chmod u+s find
之后可以利用find在执行时或使用root权限来提权
find . -name suid.txt -exec cat /etc/shadow \;
可以看到lady_killer用户没有查看/etc/shadow的权限,通过find可以提权查看
可以用以下命令查找设置suid权限的二进制文件
find / -type f -perm /4000
一般tmp目录会设置Sticky Bit(粘着位)
umask一般是0022或0002,目录就是减去对应权限,文件的话再去掉执行
0022 的作用:022 的八进制表示为 000010010,它表示在默认权限中关闭了组和其他用户的写权限。因此,新文件的默认权限将会是 rw-r–r–,新目录的默认权限是 rwxr-xr-x。
0002 的作用:002 的八进制表示为 000000010,它只关闭了其他用户的写权限。因此,新文件的默认权限将会是 rw-rw-r–,新目录的默认权限是 rwxrwxr-x。
-p 查看当前掩码
直接加掩码是修改,-S是以符号的方式查看
a:让文件或目录仅供附加用途;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。
-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-v<版本编号>:设置文件或目录版本;
-V:显示指令执行过程;
+<属性>:开启文件或目录的该项属性;
-<属性>:关闭文件或目录的该项属性;
=<属性>:指定文件或目录的该项属性。
chattr +i umask.txt
通过这个命令可以保护目录或文件不可修改,在应急过程中可以设置。
-m, --modify=acl: 修改文件的当前 ACL(s)
-M, --modify-file=file: 从文件中读取要修改的 ACL 条目
-x, --remove=acl: 从文件的 ACL(s) 中移除条目
-X, --remove-file=file: 从文件中读取要移除的 ACL 条目
-b, --remove-all: 移除所有扩展 ACL 条目
-k, --remove-default: 移除默认 ACL
–set=acl: 设置文件的 ACL(s),替换当前 ACL
–set-file=file: 从文件中读取要设置的 ACL 条目
–mask: 重新计算有效权限掩码
-n, --no-mask: 不重新计算有效权限掩码
–restore=file: 恢复 ACL(与 getfacl -R 的相反操作)
–test: 测试模式(不修改 ACL)
-v, --version: 打印版本信息并退出
-h, --help: 显示帮助文本
setfacl命令可以识别以下的规则格式:
[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。
[d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定)
[d[efault]:] m[ask][:] [:perms] 有效权限掩码
[d[efault]:] o[ther] [:perms] 其他的权限
在文件permission的最后多了一个+号,当任何一个文件拥有了ACL_USER或者ACL_GROUP的值以后我们就可以称它为ACL文件,这个+号就是用来提示我们的。
-a, --access: 仅显示文件访问控制列表
-d, --default: 仅显示默认访问控制列表
-c, --omit-header: 不显示注释头部
-e, --all-effective: 显示所有有效权限
-E, --no-effective: 不显示任何有效权限
-s, --skip-base: 跳过只有基本条目的文件
-R, --recursive: 递归进入子目录
-L, --logical: 逻辑遍历,跟随符号链接
-P, --physical: 物理遍历,不跟随符号链接
-t, --tabular: 使用表格式输出
-n, --numeric: 打印数值用户/组标识符
-p, --absolute-names: 在路径名中不去掉前导的 ‘/’
-v, --version: 打印版本信息并退出
-h, --help: 显示帮助文本
一般直接加文件就行了
getfacl ./suid.txt
-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用; -a或--text:diff预设只会逐行比较文本文件; -b或--ignore-space-change:不检查空格字符的不同; -B或--ignore-blank-lines:不检查空白行; -c:显示全部内容,并标出不同之处; -C<行数>或--context<行数>:与执行“-c-<行数>”指令相同; -d或--minimal:使用不同的演算法,以小的单位来做比较; -D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集; -e或--ed:此参数的输出格式可用于ed的script文件; -f或-forward-ed:输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处; -H或--speed-large-files:比较大文件时,可加快速度; -l<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有所不同,而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异; -i或--ignore-case:不检查大小写的不同; -l或--paginate:将结果交由pr程序来分页; -n或--rcs:将比较结果以RCS的格式来显示; -N或--new-file:在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录,文件A 若使用-N参数,则diff会将文件A 与一个空白的文件比较; -p:若比较的文件为C语言的程序码文件时,显示差异所在的函数名称; -P或--unidirectional-new-file:与-N类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个文件与空白的文件做比较; -q或--brief:仅显示有无差异,不显示详细的信息; -r或--recursive:比较子目录中的文件; -s或--report-identical-files:若没有发现任何差异,仍然显示信息; -S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较; -t或--expand-tabs:在输出时,将tab字符展开; -T或--initial-tab:在每行前面加上tab字符以便对齐; -u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同; -v或--version:显示版本信息; -w或--ignore-all-space:忽略全部的空格字符; -W<宽度>或--width<宽度>:在使用-y参数时,指定栏宽; -x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录; -X<文件>或--exclude-from<文件>;您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件; -y或--side-by-side:以并列的方式显示文件的异同之处; --help:显示帮助; --left-column:在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容; --suppress-common-lines:在使用-y参数时,仅显示不同之处。
直接比较两个文件
diff /etc/shadow /etc/shadow-
可以看到增加了test用户
上下文形式
diff -c /etc/shadow /etc/shadow-
diff -u /etc/shadow /etc/shadow-
pid目录
cmdline 执行的命令
cwd 启动进程时所处的目录
exe 进程依赖的软链接
environ 运行时的环境变量
fd 进程申请的所有文件描述符,包括普通文件,标准输入输出,管道,socket。
cat /etc/passwd
passwd- passwd最后一次修改前的备份
diff passwd passwd-
cat /etc/shadow
root: 这是用户名,对应于 /etc/passwd 文件中的root用户。
$1$1AkgnRsNo$ngnWLhF8j5g4mZ6k1ZjAs/: 这部分是加密后的密码。在这个例子中,密码的加密形式是使用MD5算法加密的。具体来说:
19911: 这是密码最后修改日期(Epoch时间戳),表示自1970年1月1日以来的天数。这个字段指示密码最后一次被更改的时间。
0: 这是密码需要重新更改的最短天数。如果为0,则表示没有最短时间限制。
99999: 这是密码有效期的最长天数。在这个例子中,密码有效期为99999天,表示密码在不被强制修改的情况下可以使用很长时间。
7: 这是密码到期前的警告天数。当密码到期前的天数少于等于7天时,系统会开始发送警告通知用户密码即将过期。
空字段: 这些是未使用的字段,以前的Unix版本可能会在这些位置存储一些额外的信息,但在现代系统中通常是空的。
shadow- shadow最后一次修改前的备份
diff shadow shadow-
同上,不再展示
system下是系统级自启服务
cat /etc/sudoers
用户规则
user host=(runas) command
组规则
%group host=(runas) command
攻击者可能篡改这个dns服务器配置来劫持流量
cat /etc/resolv.conf
域名解析ip,优先级更高
cat /etc/hosts
crontab在应急响应-主机安全之系统及进程排查相关命令(Linux操作系统-初级篇)中说过了
除了这个系统定时任务,后面还有用户自定义的。
cat /etc/profile
audit.log 中记录了许多系统事件,包括:
tail -n 10 /var/log/cron
cat /var/log/maillog
tail -n 10 /var/log/messages
tail -n 10 /var/log/secure
常用于SSH爆破排查
使用lastlog、lastb、last、who命令来查看,直接查看文件存在乱码等不方便的情况。
tail -n 30 dmesg
tail -n 10 boot.log
根据用户来查看
cat /var/spool/cron/root
这里以lady_killer用户为例
其他排查命令学习:
应急响应-主机安全之系统及进程排查相关命令(Linux操作系统-初级篇
《网络安全应急响应技术实战指南》
/var/log下日志文件详解
linux提权大赏
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。