尖REN 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 在某些情况下,访问Web服务器的资源需要通过HTTP协议上的NTLM进行NTLM身份验证。当我们在这样的Web服务器中使用Webshell时,我们不仅需要考虑NTLM认证的实现,还需要能够在命令行下使用它。 本文仅从技术研究、开源代码、分享脚本开发细节的角度介绍一种实现方法。 0x01 简介 本文将介绍以下内容: 设计理念 脚本开发详细信息 开放源代码 0x02 设计思路 有许多Web服务器通过HTTP协议由NTLM认证。这里以Exchange和SharePoint为例。 (1)交换测试环境 保存文件的绝对路径: c:\ Program Files \ Microsoft \ Exchange Server \ V15 \ client access \ auto discover \ test . aspx 相应的URL是: https://URL/自动发现/test.aspx (2)SharePoint测试环境 保存文件的绝对路径: c:\ Program Files \ Common Files \ Microsoft shared \ Web服务器扩展\15\TEMPLATE\LAYOUTS\test.aspx 相应的URL是: http://URL/_layouts/15/test.aspx Test.aspx要求通过HTTP协议上的NTLM进行NTLM身份验证。 这里以一个支持cmd命令的webshell为例进行测试。webshell的地址是: https://github . com/tennc/webshell/blob/master/aspx/ASP . net-backdoors/cmd exec . aspx 如下图 这个webshell需要通过浏览器来操作,首先完成NTLM认证,然后填写正确的Auth Key和cmd命令来执行。 我们的目标是能够在命令行下使用它,它可以作为一个模板进行修改。设计思路如下: (1)exec MD . aspx 接收表单请求作为验证身份验证密钥的参数。 如果验证失败,则返回空结果。 如果验证成功,执行传入的cmd命令并返回执行结果。 (2)aspxCmdNTLM.py 命令行脚本 首先,NTLM认证由NTLM Over HTTP协议完成,该协议需要支持明文和用户密码哈希两种登录方式。 通过Form form请求发送Auth Key和要执行的cmd命令,并接收cmd命令的执行结果。 execCmd.aspx和aspxCmdNTLM.py之间的通信内容是用Base64编码的,所以在程序实现中要考虑Base64的编解码。 0x03 脚本开发细节 1.execCmd.aspx 使用Page_Load方法接收表单请求,其中data1用作Auth Key,data2用作cmd命令。 Base64编码的实现: byte[] enbytes=编码。default . GetBytes(string 1); 字符串string2=Convert。to base 64 string(enbytes); Base64解码的实现: byte[] outbyte=Convert。from base 64 string(string 1); string string2=编码。default . GetString(outbyte); 的完整实现代码如下: %@页语言='C#'% %@导入名称空间='System。诊断' % %@导入名称空间='System。IO'% 2.aspxCmdNTLM.py NTLM认证的实施可以参照前面的代码: https://github . com/3g student/Homework-of-Python/blob/master/check EWS . py 支持两种登录方法:明文和用户密码哈希。 表格请求通过邮件发送。 Base64编解码需要注意字符串的格式。 的完整代码已上传至github,地址如下: https://github . com/3g student/Homework-of-Python/blob/master/aspxcmdntlm . py ExecCmd.aspx需要保存在Web服务器中。 AspxCmdNTLM.py在命令行执行,连接execCmd.aspx执行Cmd命令并获取返回结果。 AspxCmdNTLM.py支持两种登录方法:明文和用户密码哈希。 对于Exchange服务器,对应的Webshell权限是System。 如下图 可以直接打Exchange PowerShell。 命令示例: python aspxcmdntlm . py 192 . 168 . 1 . 1 443 https://192 . 168 . 1 . 1/auto discover/exec MD . aspx明文test.com用户1密码123!powershell-c ' Add-PSSnapin Microsoft。exchange . management . powershell . snap in;Get-MailboxServer ' ' 结果如下 对于SharePoint服务器,相应的Webshell权限是用户权限。 如下图 您可以尝试调用SharePointServer PowerShell。 命令示例: python aspxcmdntlm . py 192 . 168 . 1 . 1 443 https://192 . 168 . 1 . 1/auto discover/exec MD . aspx明文test.com用户1密码123!powershell-c ' Add-PSSnapin Microsoft。SharePoint . PowerShellGet-SPSite ' ' 这里应该注意的是,用户需要配置为能够访问数据库,然后才能执行SharePointServer PowerShell命令。 与可以访问数据库的用户列表相对应的Powershell命令如下: Add-PSSnapin Microsoft。SharePoint . PowerShell Get-SPShellAdmin 将与用户访问权限相对应的Powershell命令添加到数据库,如下所示: Add-PSSnapin Microsoft。SharePoint . PowerShell Add-SPShellAdmin域\用户1 与删除用户对数据库的访问权限相对应的Powershell命令如下: Add-PSSnapin Microsoft。SharePoint . PowerShell remove-spshell admin Domain \ user 1-Confirm:$ false 正常结果如下 0x04 小结 以Exchange和SharePoint为例,介绍了支持HTTP协议NTLM的Webshell的实现思路、开源代码和共享脚本开发细节。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子