
这是一个为开发、运维及安全从业者构建的:

系统的拆解Web安全的关键领域。
内容涵盖 “原理深入-实战驱动-体系构建”
为你提供一条清晰的进阶路径。
使你在面任何新型漏洞时,迅速定位问题,理解漏洞本质,形成有效的防御思路。
在Linux平台中,用户和组都扮演着非常重要的角色。它们为选定的用户提供了一种彼此共享文件的简便方法。
它们还使系统管理员可以更有效地管理用户权限,因为他们可以将权限分配给组而不是单个用户。
简单来说,用户组为其中的用户提供了一种共享文件的便捷方式。同一个组内的用户拥有该组的权限,所有成员都可以共享这些权限。此外,用户组还能帮助系统管理员更有效地管理用户:既可以按组为单位分配权限,也可以针对单个用户进行更灵活的权限设置。这正是区分用户和用户组的意义所在。
主要分为两类:
管理员:
即root账户,UID为0,拥有系统所有权限,
类似于Windows中的Administrator。
普通用户:
① 系统用户:由系统或软件安装时自动创建,通常用于特定服务或进程,无法用于登录操作系统。其UID范围因系统而异(例如,在早期或某些系统中为1-499,而CentOS 7中则为1-999)。例如sshd、pulse等账户。
② 自定义用户:由管理员(root)创建的用户账户。其UID通常从500开始(在CentOS 7等系统中则从1000开始),类似于Windows标准Users组中的用户。
系统中用户信息存储在/etc/passwd文件中。每一行代表一个用户,各字段由冒号(:)分隔.
(1)字段1
① 登录名:在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符的长度之内。并且要注意,通常在Limux系统中对字母大小写是敏感的,登录名中不能有冒号(:),因为冒号在这里是分隔符
② 密码占位符:通常显示为x。由于/etc/passwd文件对所有用户可读,出于安全考虑,加密后的实际密码已转移至仅root可读的/etc/shadow文件中。此处x仅为指示符。
(注:root用户可使用passwd命令为任何用户修改口令,普通用户也可用此命令修改自己的密码。)
(2)字段2:
① UID:一般情况下它与用户名是对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录ShelI等。取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
② GID:具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。
(3)字段3:
① 注释性描述:这个字段并没有什么实际的用途,在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用作finger命令的输出。
② 用户主目录:在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称默认就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
(4)字段4
① 登录Shell:Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。
常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。而当用户shell类型为/sbin/nologin,则是该用户无法登录系统。
用户的登录Shell可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束,用户就自动退出了系统。
有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
在Linux中的每个用户必须属于一个组,不能独立于组外。
在Linux中每个文件有所有者、所在组、其它组的概念
用户的主要组(primarygroup):用户必须属于一个且只有一个组
用户的附加组(supplementarygroup):一个用户可以属于一个或者零个附加组
由于各种原因,用户可以成为多个"组"的成员。
"组"的成员资格使用户可以访问组拥有的文件和目录,有时这种行为很关键。
要生成某些用户所属的组的列表,可以使用groups命令。
Linux操作系统中,一切皆文件。
普通文件、目录、设备、套接字
(1)文件权限种类
① 所有者
一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者也可以使用chown用户名文件名来修改文件的所有者。
② 所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组也可以使用chgrp组名文件名来修改文件所在的组。
③ 其他组
除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
(2)Linux 文件权限组成结构
第一个字符,代表文件类型:
① - 表示普通文件
② d 表示目录文件
③ l 表示符号链接文件
④ c 表示字符设备,如键盘、鼠标
⑤ b 表示块设备,如硬盘、软盘
⑥ s 表示套接字文件,用于数据通信
在 Linux 目录权限中,第一个横杠之后的 rwx 分别代表读(R)、写(W)、执行(X)权限。目录权限通常对应三个用户组:所有者、所属组以及其他组。
(3)权限缺失
① 当文件缺少 R(读)权限时:
其他用户将无法使用 ls 命令查看该目录下的文件列表,执行时会提示 “Permission denied”。但用户仍可以通过 touch 命令在该目录下创建文件,也能使用 cd 命令进入该目录。
无法使用 more 命令读取文件内容,系统返回 “Permission denied”。
仍可通过 echo 命令向文件写入内容。
由于无法读取内容,该文件也无法被执行。
② 当文件缺少 W(写)权限时:
在拥有 R 权限的情况下,用户可以查看目录内容,但无法通过 touch 等命令在目录中创建新文件,操作会返回 “Permission denied”。不过,用户仍可以正常进入该目录。
可以使用 more 命令正常读取文件内容。
无法通过 echo 命令向文件写入内容。
文件可以正常执行,因为它仍具备可读和可执行权限。
③ 当文件缺少 X(执行)权限时
即使拥有 R 和 W 权限,用户也无法执行 cd 命令进入该目录,同时无法在目录内创建文件。X 权限对于目录的访问至关重要,它的缺失会直接影响用户进入目录以及在目录中进行操作的能力。
more 命令可以读取文件内容。
echo 命令可以写入内容。
文件无法被直接执行。
缺少 X 权限的文件并非绝对无法运行。执行环境的不同会导致不同的结果。
通过修改脚本内容,使其打印当前执行环境的进程 ID,可以观察到:直接执行脚本与通过 sh 命令调用脚本,会运行在不同的进程环境中(例如进程 ID 从 494 变为 671)。这证明了执行环境会直接影响脚本的运行效果。
对于二进制文件,其能否执行取决于:
① 是具备可执行权限(X)
② 是文件内容格式必须正确
即使通过 dd 等命令赋予文件合理的权限,如果其二进制格式错误,仍然无法执行。
(4)修改权限
主要通过 chmod 命令实现修改文件权限和所属用户/组,它支持两种参数形式:符号表示法和数字表示法。
① 符号表示法(直观地通过操作符和符号组合来修改权限)
u 代表文件所有者
g 代表所属组
o 代表其他用户
+ 表示增加权限
- 表示取消权限
例如:chmod u+x, g-w, o=r 表示给所有者增加执行权,从所属组移除写入权,为其他用户设置只读权。
② 数字表示法(使用三位八进制数字来精确设置权限。其原理是将 rwx 权限位视为二进制位并转换为十进制)
r (读) 对应二进制 100,十进制为 4。
w (写) 对应二进制 010,十进制为 2。
x (执行) 对应二进制 001,十进制为 1。
将所需权限对应的数字相加,即可得到该用户组的权限值。例如,rwx 为 4+2+1=7,r-x 为 4+0+1=5。
以数字 536 为例:
第一位 5 (4+1):
表示所有者权限为 r-x(读和执行,无写)。
第二位 3 (2+1):
表示所属组权限为 -wx(写和执行,无读)。
第三位 6 (4+2):
表示其他用户权限为 rw-(读和写,无执行)。
以上所有关于普通权限的约束,均不适用于超级管理员 root 账户。root 用户在 Linux 及类 Unix 系统中拥有最高权限级别,可以超越普通的文件权限限制。
(5)隐藏权限
我们也可以利用隐藏权限同样限制root账号,隐藏权限在常规的 ls -l 查询中不可见。需要使用 lsattr 命令来查看,而其设置则需通过 chattr 命令(通常只有 root 权限才能执行)来完成。
chattr 命令通过不同的选项能为文件和目录附加强大的限制属性:
① +i (immutable,不可变):为文件设置此属性后,文件将不可被删除、修改、重命名或创建硬链接,即使是 root 用户也无法直接操作,从而提供了极高的保护级别。
② +a (append only,仅追加):为文件设置此属性后,文件内容仅能被追加写入,而无法被修改或删除已有内容,这常用于保护重要的日志文件。
(6)特殊权限
① SUID (Set User ID):当具有 SUID 权限(显示为 -rwsr-xr-x 中的 s)的可执行文件被运行时,进程将暂时获得文件所有者(而非执行者)的权限。如果文件所有者为 root,则该命令在执行期间将拥有 root 权限,这既是功能特性也构成了重大的提权风险点。
② SGID (Set Group ID):与 SUID 类似。对于可执行文件,进程会临时获得文件所属组的权限。当应用于目录时,在该目录下新建的文件将自动继承目录的所属组。
③ SBIT (Sticky Bit):通常用于公共目录(如 /tmp,显示为 drwxrwxrwt 中的 t)。在此目录中,每个用户只能删除或重命名自己创建的文件,从而防止用户随意删除他人的文件。
综上所述,虽然 root 权限强大,但通过 chattr 设置隐藏属性可以从底层文件系统层面施加限制。同时,深刻理解并审慎管理 SUID/SGID 等特殊权限,是系统安全加固和渗透测试防御中的关键环节。
自动化注入是指通过工具替代手工注入的方式。在SQL注入检测场景中,自动化工具通常十分有效。由于这类工具内部集成了大量测试Payload,因此往往具备强大的检测能力。
Sqlmap是一款功能强大集成了多种数据库识别及注入方式,多用于识别和利用 Web 应用程序注入漏洞的工具.
优点在于集成了大量 payload,对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)
payload 原理与前面 SQL注入相似,利用数据库执行非预期的语句,但更加复杂,由专门研究数据库的人编写。Kali内置,其他平台需下载脚本文件
不仅包含了前面所说几种MySQL的SQL注入利用方式,还包含了其他种类的数据库的。
① 对如下DBMS的全面支持:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBMDB2, SQLite, Firebird, Sybase, SAP MaxDB, Informix, MariaDB, MemSQL,TiDB, CockroachDB, HSQLDB, H2, MonetDB, Apache Derby, AmazonRedshift, Vertica, Mckoi, Presto, Altibase, MimerSQL, CrateDB, Greenplum,Drizzle, Apache Ignite, Cubrid, InterSystems Cache, IRIS, eXtremeDB andFrontBase
② 对六种SQL注入技巧的全面支持:
boolean-based blind, time-based blind, error-based, UNION query-based,stacked queries and out-of-band
③ 对直连数据库的支持:
不需要通过SQL注入,只需要提供DBMS的账户信息、IP地址、端口及数据库名称。
④ 对枚举功能的支持:
包括用户、密码HASH、权限、角色、数据库、数据表、数据列。
⑤ 密码 HASH相关支持:
自动识别HASH格式以及自动实施基于字典的破解攻击。
⑥ 对DUMP数据的功能支持:
⑦ 对搜索功能的强大支持:
该功能非常实用,可用于搜索特定数据库名、所有数据库中的特定名称数据表、所有数据表中特定名称的数据列。
⑧ 对下载/上传文件的支持:
有效支持的DBMS包括MySQL、PostgreSQL、MS SQL Server。
⑨ 对命令执行的支持:
有效支持的DBMS包括MySQL、PostgreSQL、MS SQL Server。
⑩ 对建立一个基于OOB的TCP连接的支持:
连接的Channel支持交互式命令行、Meterpretersession以及VNCsession。
⑪ 对数据库提权的支持:
该支持通过msf 中meterpreter 的getsystem命令
(1) 选项-v
0:只显示python的error和critical级别的信息
1:显示information和warning级别的信息
2:显示debug级别的信息
3:额外显示注入的payload
4:额外显示HTTP请求内容
5:额外显示HTTP响应头
6:额外显示HTTP响应页面内容
(2) 选项-d
通过sclmap直接连接一个数据库实例,该选项接收一个连接字符串作为参数
(3) 选项-u或--url
选定一个ur目标,并执行SQL注入攻击
(4) 选项-d或--data
默认的HTTP请求发送方式是GET,可以通过该选项指定为POST
(5) 选项suser-agent或--random-agent
默认情况下,sqlmap发送的HTTP请求中User-Agent值
如:sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)可通过该选项进行修改
(6) 选项 --cookie,--cookie-del,--load-cookies
设定Cookie流程:
① 通过浏览器登录WebApp;
② 从BurpSuite或浏览器内部取得Cookie;
③ 通过-cookie选项设置取得的Cookie;
说明:
在sqlmap执行注入攻击的过程中,如果浏览器返回了Set-Cookie的headers,那么sqlmap会自动识别这一指令,并更新对应的Cookie,如果我们已经通过-cookie设定了Cookie的数值,那么sqlmap会向我们确认是否进行更
(7) 选项--proxy
允许sqlmap的请求都通过我们设置的proxy进行发送,无论是出于隐藏自身IP地址的目的,还是绕过IP限制,都非常实用。
(8) 选项 --tor, --tor-port,--tor-type以及 --check-tor
通过配置TorClient以及Privoxy,我们就可以启用-tor选项。
该选项可以使得sqlmap的请求通过Tor网络进行发送,以达到匿名的目的。
同时,我们还可以通过--tor-port以及--tor-type设置所使用的的TorProxy类型。
--check-tor则是用来检测Tor网络是否配置且连接正常。
以上就是本篇文章的技术细节。
其实,每次写这类分析时,我都在想
“单篇文章就像一张漏洞快照,有价值,但也相对孤立。
真正的行业敏锐度,来自于漏洞背后的持续观察;海量告警的讨论分析;以及在真实环境中无数次历练形成的直觉。”
很难通过阅读单篇文章积累。
因此,我们构建了一个
”注重实战交流“与“深度共享”的
「知识星球」社区
目前星球已聚集了[52]名安全工程师、研究员和团队负责人。
我们刻意控制规模,并设有加入门槛,只为维持聚焦、务实、互信的交流氛围。

“安全是一个对抗性极强的领域,一个人闭门造车,视角终究有限。
如果你已不满足于碎片信息,渴望在一个高质量的环境中,构建可迁移的实战知识体系,并连接一群值得信赖的同行者,这里或许适合你。
PS.:为了确保大家目标一致,请务必阅读星球置顶的《社区公约》。
这是一个为深度学习和有效连接付费的社区。
更多内容
欢迎加入「网络安全技术交流群」免费分享>>我们专注漏洞研究、攻防实战与代码审计。
群内定期分享技术动态、实战资源与本文相关的工具资料,
让大家一起讨论、共同成长。

添加好友,备注「网络安全」获取入群邀请
更多问题1v1解答>>