.NET 一款获取内网共享机器的工具

01阅读须知

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面

02基本介绍

Sharp4Shares 是一个枚举内网所有共享主机的工具,用于列出当前域内所有机器的网络共享信息,并检查这些共享是否对当前用户可读。该工具还可以将所有计算机名称转换为 IP 地址。

03使用方法

该工具提供了两个参数,第一个参数是shares,用于查询每台计算机的网络共享并检查其是否对当前用户可读。命令及运行后的结果如下图所示。

.\Sharp4Shares.exe shares
Shares for WIN-E9V6E2B5IFM:
        [--- Unreadable Shares ---]
        IPC
    [--- Listable Shares --- ]
        ADMIN$
        C$
        NETLOGON
        SYSVOL

另一个参数是列出计算机的 IP 地址,具体命令如下所示。

.\Sharp4Shares.exe ips
WIN-E9V6E2B5IFM: 192.168.193.208

04编码实现

以下是 Sharp4Shares 的核心功能代码解析,首先获取域下所有计算机的共享信息,这块主要通过GetAllShares函数实现,具体代码如下所示

public static void GetAllShares(List<string> computers, bool publicOnly = false)
{
    List<Thread> list = new List<Thread>();
    using (List<string>.Enumerator enumerator = computers.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            string computer = enumerator.Current;
            Thread thread = new Thread(delegate()
            {
                Program.GetComputerShares(computer, publicOnly);
            });
            thread.Start();
            list.Add(thread);
        }
    }
    foreach (Thread thread2 in list)
    {
        thread2.Join();
    }
}

参数publiconly表示仅查询共享(可选,默认为 false)。接着,枚举指定机器的网络共享,此处需要传入一个服务器名,具体如下所示。

public static Program.SHARE_INFO_1[] EnumNetShares(string Server)
{
    List<Program.SHARE_INFO_1> list = new List<Program.SHARE_INFO_1>();
    int num = 0;
    int num2 = 0;
    int num3 = 0;
    int offset = Marshal.SizeOf(typeof(Program.SHARE_INFO_1));
    IntPtr zero = IntPtr.Zero;
    int num4 = Program.NetShareEnum(new StringBuilder(Server), 1, ref zero, uint.MaxValue, ref num, ref num2, ref num3);
}

底层还是通过调用 Windows API NetShareEnum 枚举指定服务器的共享资源,代码如下所示。

[DllImport("Netapi32.dll", CharSet = CharSet.Unicode)]
private static extern int NetShareEnum(StringBuilder ServerName, int level, ref IntPtr bufPtr, uint prefmaxlen, ref int entriesread, ref int totalentries, ref int resume_handle);

SharpShares 是一个强大的工具,可以用于列出域内所有计算机的共享信息,并检查这些共享是否对当前用户可读。

05.NET安全星球

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

图片

图片

图片

20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。

图片

我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。

图片

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值