• Ladon插件编写之内网Web扫描C#源码


    PortScan

    获取网页标题、服务器Banner,例子仅探测80端口
    大家可自行修改添加其它端口识别定制Web扫描功能
    如识别出特定中间件或WEB后再检测是否存在漏洞等
    编译后的netscan.dll可改成任意名称Ladon均可加载

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Text.RegularExpressions;
    
    namespace LadonDLL
    {
        public class scan
        {
            public static string run(string ip)
            {
                if (string.IsNullOrEmpty(ip))
                    return "";
                else
                {
    
                    //192.11.22.10    Microsoft-IIS/10.0      IIS Windows
                    //192.11.22.1     H3C-Miniware-Webs       ER3200G2系统管理
                    return ip + "	" + getURLbanner(ip) + "	" + GetTitle(getHtml("http://" + ip,2));
                
                }
    
            }
    
            private static string getURLbanner(string url)
            {
                ////HttpWebResponse res;
                if (!url.ToLower().Contains("https://") && !url.ToLower().Contains("http://"))
                    url = "http://" + url;
    
                try
                {
                    var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
                    req.Method = "HEAD";
                    req.Timeout = 1000;
                    var res = (HttpWebResponse)req.GetResponse();
    
                    if (res.StatusCode == HttpStatusCode.OK || res.StatusCode == HttpStatusCode.Forbidden || res.StatusCode == HttpStatusCode.Redirect || res.StatusCode == HttpStatusCode.MovedPermanently)
                    {
                        return res.Server;
                    }
    
                    //res.Close();
    
                    return res.Server;
                }
                catch (WebException ex)
                {
                    return "";
                }
            }
    
            private static string GetTitle(string html)
            {
                if (html.Contains("<hTmlKErRor>"))
                {
                    //return html.Replace("<hTmlKErRor>", "");
                    return "";
                }
    
                html = html.Replace("<br>", "");
                html = html.Replace("<BR>", "");
                html = html.Replace("
    ", "");
                html = html.Replace("&nbsp;", " ");
                html = html.Replace("
    ", "").Trim();
    
                String regex = @"<title.+</title>";
    
                String title = Regex.Match(html, regex).ToString();
                title = Regex.Replace(title, @"[""]+", "");
    
                title = title.TrimStart('<');
    
                string regex2 = @">.+</title>";
    
                string title2 = Regex.Match(title, regex2).ToString();
                title2 = title2.TrimStart('>').Replace("</title>", "").Trim();
    
                if (title2.Length > 50)
                    return title2.Substring(0, 50);
    
                return title2;
    
            }
    
            private static string getHtml(string url, int codingType)
            {
    
                try
                {
                    if (!url.ToLower().Contains("https://") && !url.ToLower().Contains("http://"))
                        url = "http://" + url;
                    WebClient myWebClient = new WebClient();
                    if (url.ToLower().Contains("https://"))
                    {
                        System.Net.ServicePointManager.ServerCertificateValidationCallback +=
        delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                 System.Security.Cryptography.X509Certificates.X509Chain chain,
                 System.Net.Security.SslPolicyErrors sslPolicyErrors)
        {
            return true; // **** Always accept
        };
    
                    }
    
                    byte[] myDataBuffer = myWebClient.DownloadData(url);
                    //return Encoding.Default.GetString(myDataBuffer);
                    string strWebData = System.Text.Encoding.Default.GetString(myDataBuffer);
    
                    //自动识别编码  不一定有<meta  比如 百度开放平台 content="text/html; charset=gbk">
                    //Match charSetMatch = Regex.Match(strWebData, "<meta([^>]*)charset=(")?(.*)?"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
                    Match charSetMatch = Regex.Match(strWebData, "(.*)charset=(")?(.*)?"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    
                    string webCharSet = charSetMatch.Groups[3].Value.Trim().ToLower();
    
                    if (webCharSet != "gb2312" && webCharSet != "gbk")
                    {
                        webCharSet = "utf-8";
                    }
    
                    if (System.Text.Encoding.GetEncoding(webCharSet) != System.Text.Encoding.Default)
                    {
                        strWebData = System.Text.Encoding.GetEncoding(webCharSet).GetString(myDataBuffer);
                    }
    
    
    
                    //if (codingType == 1)
                    //    return Encoding.Unicode.GetString(myDataBuffer);
                    //else if (codingType == 2)
                    //    return Encoding.Default.GetString(myDataBuffer);//GBK 936
                    //else if (codingType == 3)
                    //    return Encoding.UTF8.GetString(myDataBuffer);//65501
    
                    return strWebData;
    
                }
                catch (Exception ex)
                {
                    //Console.WriteLine(url + " " + ex.Message);
                    return "<hTmlKErRor>" + ex.Message;
                }
    
                return "";
            }
    
        }
    }
    
    
    
  • 相关阅读:
    Codeforces Round #371 (Div. 1)
    Making the Grade(POJ3666)
    The trip(Uva 11100)
    Codeforces Round #370 (Div. 2) E. Memory and Casinos (数学&&概率&&线段树)
    [CodeForces
    勾股数组 学习笔记
    NOIP 2015 游记
    BestCoder Round #53 (div.1)
    北大信息学夏令营 游记
    Codeforces Round #313 (Div. 1)
  • 原文地址:https://www.cnblogs.com/k8gege/p/12307465.html
Copyright © 2020-2023  润新知