声明
学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章
笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负
一,linux目录简介
1,根目录(/)
根目录是Linux文件系统的起点,所有的文件和目录都在这个根目录下,它类似于Windows系统中的C盘根目录,但Linux是将整个硬盘统一管理,只有这一个根目录2。
2,/bin
含义:Binaries(二进制文件)的缩写。
内容:这个目录存放着最经常使用的命令,包含一些启动Linux时使用的核心文件,如连接文件以及镜像文件,像bash、cat、cp、ls、mkdir、rm等基本的可执行命令,这些命令可在任何时候使用,无需先加载其他程序
3,/etc
含义:Etcetera(等等)的缩写。
内容:这个目录用来存放所有的系统管理所需要的配置文件和子目录,例如网络配置、用户管理、软件包管理等方面的配置文件,不建议在此目录下存放可执行文件,像/etc/inittab、/etc/fst等是重要的配置文件
4,/etc/rc.d
系统启动和运行级别相关的重要目录
5,/home
含义:用户主目录的默认位置。
内容:每个用户都有自己的主目录,用于存储个人文件和设置
6,/lib
含义:包含系统启动和运行时需要使用的共享库文件。
内容:这些文件包含了程序和应用程序所需的函数和代码库,通常是由编译器和链接器生成的
7,/sbin
含义:Superuser Binary(超级用户二进制文件)的缩写。
内容:这个目录包含了系统管理员需要使用的一些基本二进制文件,通常只有root用户才能够使用这些文件
8,/tmp
含义:临时文件存放的目录,可用于存储临时文件,不过系统可能会定期清理该目录下的文件
9,/root
含义:root用户的主目录。
内容:root用户是系统管理员,具有最高的权限,所有其他用户不能访问/root目录
10,/mnt
含义:可用于临时挂载文件系统目录,例如在安装新的文件系统或备份数据时,可以将其挂载到/mnt目录下进行操作
11,/lost+found
它的主要作用是存放系统在发生错误时所产生的一些遗失的数据片段。这些数据片段通常是由于文件系统错误或突然断电等原因导致文件丢失后产生的
12,/proc
含义:是一个虚拟文件系统。
内容:它提供了关于系统进程和内核相关的信息,这些信息可以通过读取/proc目录中的文件来获取
与传统的文件系统不同,/proc目录中的文件并不存储在磁盘上,而是动态地从内存中生成的。用户和应用程序可以通过读取和写入/proc目录中的文件来获取系统信息和修改内核设置
13,/var
含义:某些大文件的溢出区,包含经常变化的文件。
内容:如系统日志文件、邮件和缓存文件等
14,/usr
系统中用户程序和相关文件的主要存储位置。它主要用于存放那些并非系统启动所必需的,但对大多数或全部用户有用的文件和数据。/usr目录下的结构划分细致,包含了许多子目录,每个子目录都有特定的用途
15,/usr/bin
作用:存放用户和系统管理员使用的大多数可执行文件。这些文件不是系统启动时必须的,而是日常操作和应用软件需要用到的命令。
示例:如ls、cp、mkdir等命令。
16,/usr/sbin
- 作用:类似/usr/bin,但存放的是主要供系统管理员使用的系统级别的命令和工具。
- 示例:如ifconfig、iptables等系统管理工具
二,linux目录演示
1,根目录详情
2,/bin二进制文件目录详情
/bin和/usr/bin的关系与区别
在Linux系统中,/bin和/usr/bin目录都是用来存放可执行文件(命令)的,但它们之间有一些重要的区别和关系。以下是关于这两个目录的详细解释:
1. /bin目录
- 作用:/bin目录包含了一些基本的系统命令,这些命令在系统启动时就需要使用,因此它们被放在一个相对较小且容易访问的位置。这些命令对于系统的基本操作和维护至关重要。
- 特点:/bin中的命令通常是系统启动后立即可用的,并且这些命令对于所有用户都是可访问的。
- 示例:如ls、cp、mv、rm等基本命令。
2. /usr/bin目录
- 作用:/usr/bin目录包含的是用户级的命令和应用程序,这些命令和应用程序不是系统启动所必需的,但对系统的日常使用非常重要。
- 特点:/usr/bin中的命令通常在系统启动后才变得可用,因为它们依赖于/usr文件系统的挂载。这些命令对于所有用户都是可访问的。
- 示例:如gcc、g++、python、java等编程语言和工具。
3. 关系与区别
- 系统启动顺序:/bin中的命令在系统启动的早期阶段就可以使用,而/usr/bin中的命令需要等到/usr文件系统挂载后才能使用。
- 命令的重要性:/bin中的命令通常是系统启动和基本操作所必需的,而/usr/bin中的命令则是为了增强系统的功能和用户体验。
- 文件系统布局:/bin通常位于根文件系统中,以确保在系统启动的早期阶段就可以访问这些命令。而/usr/bin则位于/usr文件系统中,这个文件系统可能会在系统启动的稍后阶段才被挂载。
三,文件操作基本命令
1,ls 显示当前目录所有文件
2,clear 清屏
3,cd 切换目录(相对路径方法/绝对路径方法)
Linux中的相对路径与绝对路径概念
1. 绝对路径
- 定义:绝对路径是从根目录(/)开始,描述到目标文件或目录的完整路径。无论当前的工作目录是什么,绝对路径总是唯一的。
- 特点:
- 始终以`/``开头。
- 提供了文件或目录的确切位置。
- 在任何位置都可以准确地找到文件或目录。
- 示例:/home/user/Documents,这个路径表示用户user的Documents目录,从根目录开始依次进入home、user和Documents目录。
2. 相对路径
- 定义:相对路径是从当前工作目录开始,描述到目标文件或目录的路径。相对路径依赖于当前的工作目录。
- 特点:
- 不以/开头。
- 表示的是相对于当前目录的路径。
- 使用.表示当前目录,..表示上一级目录。
- 当前工作目录改变时,相对路径可能会有所不同。
- 示例:
- 如果当前目录是/home/user,那么Documents就是一个相对路径,表示的是/home/user/Documents。
- ./Documents也是一个相对路径,.表示当前目录,所以这个路径也指向/home/user/Documents。
- ../Projects表示的是上一级目录中的Projects目录,即/home/user/../Projects,简化后为/home/Projects。
3. 区别总结
- 起点不同:绝对路径从根目录开始,而相对路径从当前工作目录开始。
- 表示方式不同:绝对路径以/开头,相对路径不以/开头,可以使用.和..来表示当前目录和上一级目录。
- 适用场合不同:绝对路径适用于需要精确找到文件或目录的场合,而相对路径适用于当前目录或其子目录下的工作场合。
- 查找速度不同:绝对路径查找速度相对较慢,因为它需要从根目录开始逐级查找;相对路径查找速度相对较快,因为它只需要在当前目录或其子目录下进行查找。
- 复杂性不同:绝对路径通常比相对路径更复杂,因为它需要表示全路径;相对路径则较为简单,因为它只需要表示相对于当前目录的路径。
- 风险程度不同:使用绝对路径的风险较低,因为它不会因为当前目录的改变而影响文件或目录的查找;而相对路径的风险较高,如果误操作改变了当前目录,可能会导致文件或目录的查找出错。
4,pwd 显示当前所在目录
-L 或 --logical | 显示逻辑上的工作目录,如果有符号链接,则显示符号链接的路径。 |
-P 或 --physical | 显示物理上的工作目录,如果有符号链接,则显示符号链接所指向的实际路径。 |
--help | 显示帮助信息。 |
--version | 显示命令的版本信息。 |
5,vim文本编辑器
Vim具有三种主要的工作模式:
- 命令模式:默认模式,允许你移动光标、复制、粘贴、替换、删除等操作。可以通过方向键或h, j, k, l键来移动光标。
- 输入模式:用于输入文本。可以通过在命令模式下输入i, I, a, A, o, O等命令进入输入模式。按Esc键可以返回命令模式。
- 编辑模式:用于执行保存、查找或替换等操作。可以通过在命令模式下输入:进入编辑模式。
Vim命令常用:
- 保存文件:在编辑模式下输入:w。
- 关闭文件:在编辑模式下输入:q。
- 查找文本:在命令模式下输入/abc查找单词abc,配合n和N来寻找下一个或上一个匹配项。
- 替换文本:在编辑模式下输入:s/old/new/g可以将当前行中的所有old替换为new。
- 删除文本:在命令模式下输入dw可以删除当前光标所在的单词。
Vim还支持多种启动方式和文档操作命令,例如:
- vim -c "cmd":在打开文件前,先执行指定的命令。
- vim -r file:恢复上次异常退出的文件。
- vim -R file:以只读的方式打开文件。
- vim +num file:从第num行开始打开文件。
6,touch创建文件夹
7,mkidr -p 递归创建文件夹
8,rm 删除文件
9,cp copy的简写,复制文件
10,mv move的简写,移动文件或重命名文件
11,cat 查看文件内容
12,head 查看文件的前半段内容,默认前10行。允许加上各种参数及后缀
13,tail 查看文件的后半段内容,默认后10行。允许加上各种参数及后缀
14,more 查看大文件内容并翻页(分页显示)
more命令的主要功能是分页显示文件内容。与cat命令不同,more命令不会一次性显示所有内容,而是显示一页内容后暂停,等待用户输入进一步的操作
常用操作命令:
- 空格键: 向下滚动一屏。
- Enter键: 向下滚动一行。
- B键: 返回上一屏。
- Q键: 退出more命令。
- H键: 显示帮助信息
命令参数:
- -num: 定义屏幕显示num行为一屏。
- +num: 从第num行开始显示。
- -d: 在每屏的底部显示更友好的提示信息。
- -c: 从顶部清屏然后显示。
- -s: 把连续的多个空行显示为一行。
- -u: 禁止下划线
15,ssh
远程登录 使用SSH远程登录到另一台计算机,可以使用以下命令:
ssh username@hostname
指定端口 如果远程主机的SSH服务运行在非默认端口(默认端口是22),可以使用-p参数指定端口:
ssh -p port_number username@hostname
执行远程命令 可以通过SSH在远程主机上执行命令:
ssh username@hostname command
文件传输 使用SCP(Secure Copy)或SFTP(Secure File Transfer Protocol)可以安全地传输文件
scp local_file username@hostname:/path/to/remote_directory
sftp username@hostname
SSH密钥认证 SSH支持使用密钥对进行认证,相比传统的密码认证更加安全。生成密钥对并将其配置在远程主机上,可以实现无密码登录:
ssh-keygen -t rsa -b 4096
ssh-copy-id username@hostname
SSH隧道 SSH隧道是一种通过SSH连接转发特定端口流量的技术,可以用来绕过防火墙限制或加密特定流量:
ssh -L local_port:remote_host:remote_port username@hostname
SSH代理 SSH代理允许将多个SSH连接集中管理,避免在多个终端会话中重复输入密码或密钥:
ssh-agent bash
ssh-add /path/to/private_key
常见的SSH配置文件包括:
- 客户端配置文件:~/.ssh/config
- 服务器配置文件:/etc/ssh/sshd_config
四,渗透测试提权与linux权限
1,利用 ls -la 和 chmod 的提权方式流程
对一个linux系统进行渗透测试时,利用ls和chmod提权是一个简单并且常见的方法。该方法涉及到一个完整的流程:
1,在低权限的shell环境内进行信息收集
uname -a 用于显示系统的多项信息
内核名称(Kernel Name):通常为Linux,表示系统所使用的内核名称。
主机名(Host Name):标识计算机在网络中的名称,可用于在网络中识别这台计算机。
内核版本号(Kernel Release):例如像3.10.0 - 957.21.3.el7.x86_64 这样的信息,其中主版本号、次版本号等都包含特定含义。主版本号反映了内核的重大更新;次版本号中奇数可能表示开发版本,偶数为稳定版本;修订版本号表示修改的次数等,最后的x86_64表示编译框架(64位)3。
内核版本(Kernel Version):包含关于内核构建的更多详细信息,如构建时间等。
硬件名(Hardware Name):可以获取到硬件相关的标识信息。
处理器类型(Processor Type):例如i686等,能让用户了解系统所使用的处理器类型信息2
cat /etc/issue 这些信息可以包括系统的名称、版本、硬件架构等
\n:代表主机名。
\l:代表登录的终端设备。
\S:代表系统名称。
\r:代表系统的版本号。
\m:代表硬件架构。
\o:代表域名。
\s:代表操作系统名称。
\v:代表操作系统的版本。
2,查找可以利用的文件或目录
攻击者会使用 ls -la 命令来查找具有特殊权限的文件或目录
需要特别关注那些具有写权限(writable)的文件或目录
3,利用文件或目录的特殊权限
一旦找到具有写权限的文件或目录,攻击者就可以尝试利用它们来提权。例如,如果发现某个Web目录具有写权限,攻击者可以上传一个WebShell来获取更高的权限
4,修改文件权限
攻击者可以通过修改文件或目录的权限,以便执行恶意代码或上传恶意文件
chmod 777 /var/www/html/upload.php
这个命令会将 /var/www/html/upload.php 文件的权限设置为777,即所有用户都可以读写和执行这个文件。
5,执行恶意代码
一般这个文件夹是存储着web网站收到的上传文件,成功修改文件权限后,攻击者可以上传并执行恶意代码来提权。例如,可以上传一个包含恶意命令的PHP文件,然后通过Web浏览器访问这个文件来执行恶意代码,攻击者就完成了提权利用
6,权限维持
提权成功后,攻击者通常会采取措施来保持其高权限状态,例如创建新的管理员账户、修改系
统配置或安装后门程序。
注意事项
- 在进行提权操作时,攻击者需要非常小心,以免引起系统的异常行为或崩溃。
- 提权操作可能会触发系统的安全警报,因此攻击者需要尽量隐蔽自己的操作。
- 使用 chmod 命令修改文件权限时,攻击者需要注意不要影响系统的正常运行。
2,chown
用于更改文件或目录的所有者。所有者是指对文件或目录拥有完全控制权限的用户。通过更改所有者,可以控制谁有权访问和修改文件或目录
chown [选项] 用户:组 文件...
- [选项]:可选的命令选项,例如 -R 表示递归地更改目录及其内容的所有者。
- 用户:组:指定新的所有者和组。如果只需要更改所有者,可以省略组的部分。
- 文件...:要更改所有者的文件或目录列表。
3,sudo命令
sudo命令是Linux系统中用于执行特权命令的超级用户工具。它允许特定用户以超级用户或其他特权用户的身份执行特定的命令或任务。使用sudo命令时,用户需要输入自己的密码,然后在一定时间内(通常是5分钟),用户可以继续执行sudo命令而无需再次输入密码。
主要功能
- 临时提升权限:用户可以通过sudo临时获得超级用户的权限,执行一些需要高权限的操作,例如安装软件、修改系统设置等。
- 安全审计和跟踪:sudo提供了日志记录功能,管理员可以通过查看日志来追踪谁在何时执行了哪些特权命令。
- 灵活的权限管理:通过配置/etc/sudoers文件,管理员可以精细控制哪些用户可以执行哪些命令,从而实现最小权限原则,减少滥用和错误操作的风险。
常用选项
- -H:将HOME环境变量设为目标用户的HOME环境变量。
- -k:结束密码的有效期限,下次执行sudo时需要重新输入密码。
- -l:列出用户权限或检查某个特定命令。
- -s:以目标用户运行shell。
- -u <user>:以指定的用户身份执行命令。
正是因为sudo命令能够短暂的使一个普通用户获得root权限,所以才及其危险,不正确的赋予sudo权限会成为攻击者的提权利用点
权限提升测试:测试人员可以使用sudo命令尝试提升权限,看看是否能够绕过系统的安全机制,获得超级用户权限。
漏洞利用:在发现系统存在某些漏洞后,测试人员可以使用sudo命令来验证这些漏洞是否可以被利用来提升权限。
配置文件检查:通过检查/etc/sudoers文件,测试人员可以了解哪些用户可以执行哪些特权命令,从而评估系统的安全配置是否合理。
五,渗透测试权限维持和 useradd 命令
在渗透测试中,权限维持是一个关键步骤,它涉及到在目标系统中建立持久的访问权限,以便在后续阶段继续利用这些权限进行进一步的测试和操作。
权限维持的方法
- 创建隐藏用户:通过在用户名后添加 $ 符号来创建隐藏用户,这样用户在常规的用户列表中不会被显示出来。
- 注册表克隆:在 Windows 系统中,通过修改注册表来隐藏用户,使得用户只能在注册表中看到。
- 计划任务和启动项:在系统启动时自动运行恶意代码,以维持对系统的控制。
- 服务维持:通过创建或修改系统服务来维持权限
- 利用 useradd 命令:在 Linux 系统中,通过 useradd 命令创建新用户,并设置特定的权限和属性,以实现权限维持的目的
useradd 命令的使用
useradd 命令在 Linux 系统中用于创建新用户。以下是一些常见的选项和用法:
- 基本用法:
useradd username
这个命令会创建一个名为 username 的新用户。 - 指定用户 ID (UID):
useradd -u UID username
这个命令会创建一个新用户,并指定其用户 ID (UID)。 - 指定主组:
useradd -g groupname username
这个命令会创建一个新用户,并将其分配到指定的组。 - 指定附加组:
useradd -G group1,group2 username
这个命令会创建一个新用户,并将其分配到多个附加组。 - 指定家目录:
useradd -d /path/to/home username
这个命令会创建一个新用户,并指定其家目录。 - 指定默认 Shell:
useradd -s /path/to/shell username
这个命令会创建一个新用户,并指定其默认 Shell。
结合权限维持的策略
在实际的渗透测试中,可以结合上述权限维持的方法和 useradd 命令来实现对目标系统的持续控制。例如,可以创建一个隐藏用户,并将其分配到高权限组,以便在系统重启后仍然能够获得系统的访问权限。
adduser命令
adduser 是一个在 Linux 系统中用于添加新用户的命令。它通常会提供一个交互式界面,帮助你
输入新用户的信息,并在创建用户时自动创建用户的家目录。
adduser username
这个命令会创建一个名为 username 的新用户,并提示你输入新用户的密码以及其他信息(如全名、房间号、电话号码等)。
常见选项
- 指定用户组:
adduser username groupname
这个命令会将新用户添加到指定的用户组中。 - 创建用户并设置密码:
adduser username
passwd username
这个命令会创建一个新用户,并为其设置密码。
命令useradd和adduser的区别:
在CentOS系统下:
- useradd与adduser没有实质性的区别,两者功能相同,都会创建用户并在home目录下自动创建与用户同名的目录。不过,这两个命令在创建用户时都不会设置密码,需要使用passwd命令来为用户设置密码。
在Ubuntu系统下:
- useradd:
- 在使用该命令创建用户时,不会在/home下自动创建与用户名同名的用户目录。
- 不会自动选择shell版本。
- 创建的用户没有设置密码,因此不能直接登录,需要使用passwd命令来设置密码。
- adduser:
- 在使用该命令创建用户时,会在/home下自动创建与用户名同名的用户目录。
- 会自动选择系统默认的shell版本。
- 创建用户的过程中会提示输入密码,使得用户创建后能够直接登录。
- adduser实际上是一个Perl脚本,它提供了一个更友好的人机交互界面,让用户在创建用户时可以填写和选择相关信息。
其他注意事项:
- userdel命令用于删除用户。在删除用户时,如果只使用userdel命令,那么不会删除用户的家目录和相关文件。如果想要同时删除用户及其家目录,需要使用userdel -r命令。
linux资源耗尽病毒
linux病毒基于bash编程,winodows病毒基于dos编程
使用alert和notify-send等工具发送通知
#! /bin/bash
while true
do
notify-send "无限弹窗病毒" "这是一个无限循环的弹窗"
sleep 2 #保护机制,真病毒需要去掉
done
代码分析
这段代码是一个简单的Bash脚本,其功能是无限循环地发送通知弹窗。每次循环中,脚本会调用notify-send命令来显示一个标题为“无限弹窗病毒”、内容为“这是一个无限循环的弹窗”的通知。然后,脚本会暂停2秒钟(通过sleep 2命令),接着再次执行相同的操作。
潜在风险
- 无限循环:由于while true条件始终为真,这个脚本会无限循环执行,直到手动终止。这可能会导致系统资源(如CPU和内存)的过度消耗。
- 用户干扰:无限弹窗会不断打断用户的工作流程,造成用户体验的严重下降。
- 系统稳定性:在某些情况下,过度使用通知系统可能会影响系统的稳定性,尤其是在资源有限的环境中。
如何终止
要终止这个脚本的执行,可以采取以下几种方法:
- 使用Ctrl+C:在终端中运行脚本时,按下Ctrl+C可以中断当前正在运行的进程。
- 查找并终止进程:
- 使用ps aux | grep bash命令查找正在运行的Bash进程。
- 找到对应的进程ID(PID)后,使用kill -9 [PID]命令强制终止该进程。
- 关闭终端:如果脚本是在终端中运行的,直接关闭终端窗口也可以终止脚本的执行。
保存这个脚本到一个文件中,改名1.sh,然后再给它执行权限 chmod +x 1.sh
再运行这个脚本 ./1.sh,因为文本是直接从windows拖进来的,使用需要转换格式
成功完成实验效果