Example #1
0
        /// <summary>
        /// Get all url (href of a tag) in a single page
        /// </summary>
        /// <param name="brw"></param>
        /// <returns></returns>
        public static async Task <IList <string> > GetPageUrlsWithSameOrigin(this ChromiumWithScript brw)
        {
            var urlHashSet = new HashSet <string>();
            await brw.EvaluateScriptAsync("var urls = \"\"");

            await brw.EvaluateScriptAsync(
                "Array.prototype.forEach.call(document.getElementsByTagName(\"a\"), (ele) => {urls += ele.href + \",\"})");

            await brw.EvaluateScriptAsync("console.log(urls)");

            var urls = brw.ConsoleOutput;

            //Filter null/empty href and different origins
            var result = urls.Split(',')
                         .Where(x => !string.IsNullOrEmpty(x) && x.IndexOf(brw.Origin, StringComparison.OrdinalIgnoreCase) != -1);

            //Remove same URL in the result by a hash set
            foreach (var ele in result)
            {
                urlHashSet.Add(ele);
                await Task.Delay(1);
            }

            return(urlHashSet.ToArray());
        }
Example #2
0
        public static async Task <IList <string> > GetAllPageUrlWithSameOrigin(this ChromiumWithScript brw)
        {
            var lstLevel = new List <IList <string> > {
                await brw.GetPageUrlsWithSameOrigin()
            };
            var urlHashSet           = new HashSet <string>(lstLevel[0]);
            var alreadyGetUrlHashSet = new HashSet <string>();
            var curUrls          = null as IList <string>;
            var isBrwDoneLoading = false;

            brw.LoadingStateChanged += BrwOnLoadingStateChanged;

            for (var i = 0; i < lstLevel.Count; i++)
            {
                foreach (var url in lstLevel[i])
                {
                    //If we already crawling the url, skip it
                    if (alreadyGetUrlHashSet.Contains(url))
                    {
                        continue;
                    }

                    curUrls          = null;
                    isBrwDoneLoading = false;
                    brw.Load(url);

                    //Wait for curUrls to be initialized
                    while (curUrls == null)
                    {
                        await Task.Delay(1);
                    }

                    foreach (var curUrl in curUrls)
                    {
                        urlHashSet.Add(curUrl);
                    }

                    lstLevel.Add(urlHashSet.ToArray());

                    alreadyGetUrlHashSet.Add(url);
                }
            }

            return(lstLevel[lstLevel.Count - 1]);

            //Local
            async void BrwOnLoadingStateChanged(object o, LoadingStateChangedEventArgs e)
            {
                // ReSharper disable once AccessToModifiedClosure
                if (e.IsLoading || isBrwDoneLoading)
                {
                    return;
                }
                isBrwDoneLoading = true;

                curUrls = await brw.GetPageUrlsWithSameOrigin();
            }
        }
Example #3
0
        public static void AddIcon(this Panel container, string name, string backgroundColor)
        {
            var brw = new ChromiumWithScript(Environment.CurrentDirectory + $"/motion/{name}.html", $"document.body.style.backgroundColor = \"{backgroundColor}\"")
            {
                Dock = DockStyle.Fill
            };

            container.Controls.Add(brw);
        }
Example #4
0
        private void XSSForm_Load(object sender, EventArgs e)
        {
            pnlLoading.CenterXIn(pnlInfo);
            lblWait.CenterXIn(pnlInfo);

            var brw = new ChromiumWithScript("http://testfire.net", "")
            {
                Dock = DockStyle.Fill
            };

            brw.LoadingStateChanged += BrwOnLoadingStateChanged;
            pnlBrowser.Controls.Add(brw);
        }
Example #5
0
        //load url và chờ nó load xong mới return hàm
        public static async Task <bool> loadurl(this ChromiumWithScript brw, String url)
        {
            brw.Load(url);
            var isBrwDoneLoading = false;

            brw.LoadingStateChanged += BrwOnLoadingStateChanged;
            //Local
            async void BrwOnLoadingStateChanged(object o, LoadingStateChangedEventArgs e)
            {
                // ReSharper disable once AccessToModifiedClosure
                if (e.IsLoading || isBrwDoneLoading)
                {
                    return;
                }
                isBrwDoneLoading = true;
            }

            while (isBrwDoneLoading == false)
            {
                await Task.Delay(1);
            }
            return(isBrwDoneLoading);
        }
Example #6
0
        // submit form số i
        public static async Task <String> SubmitForm(this ChromiumWithScript brw, int i)
        {
            await brw.EvaluateScriptAsync("document.forms[" + i + "].submit()");

            var isBrwDoneLoading = false;

            brw.LoadingStateChanged += BrwOnLoadingStateChanged;
            //Local
            async void BrwOnLoadingStateChanged(object o, LoadingStateChangedEventArgs e)
            {
                // ReSharper disable once AccessToModifiedClosure
                if (e.IsLoading || isBrwDoneLoading)
                {
                    return;
                }
                isBrwDoneLoading = true;
            }

            while (isBrwDoneLoading == false)
            {
                await Task.Delay(1);
            }
            return(brw.ConsoleOutput.ToString());
        }
Example #7
0
        public static async Task <string> findget(this ChromiumWithScript brw, String url)
        {
            bool isloaded = await loadurl(brw, url);

            int    soform     = -1;
            var    phuongthuc = "";
            String script     = "<Script> console.log(\"Hello World\") </Script>";
            String kq         = "";

            //Tìm số form
            await brw.EvaluateScriptAsync("var soform");

            await brw.EvaluateScriptAsync(
                "soform = document.forms.length");

            await brw.EvaluateScriptAsync("console.log(soform)");

            soform = Int32.Parse(brw.ConsoleOutput);

            if (soform > 0)
            {
                for (int i = 0; i < soform; i++)
                {
                    //Tìm phương thức của từng form
                    await brw.EvaluateScriptAsync("var phuongthuc");

                    await brw.EvaluateScriptAsync(
                        "phuongthuc = document.forms[" + i + "].getAttribute('method')");

                    await brw.EvaluateScriptAsync("console.log(phuongthuc)");

                    phuongthuc = brw.ConsoleOutput;
                    //phuongthuc += brw.ConsoleOutput;
                    //Tìm số input của từng form
                    await brw.EvaluateScriptAsync("var soinput");

                    await brw.EvaluateScriptAsync(
                        "soinput = document.forms[" + i + "].getElementsByTagName('input').length");

                    await brw.EvaluateScriptAsync("console.log(soinput)");

                    int soinput = Int32.Parse(brw.ConsoleOutput);
                    //phuongthuc += "----" + soinput;
                    //chèn script vào từng input
                    if (phuongthuc.ToString() == "get")
                    {
                        for (int j = 0; j < soinput; j++)
                        {
                            await brw.EvaluateScriptAsync(
                                "document.forms[" + i + "].getElementsByTagName('input')[" + j + "].value='" + script + "'");
                        }

                        if (await SubmitForm(brw, i) == "Hello World")
                        {
                            kq = "Co lo hong XSS tai form thu " + i;
                        }
                        bool loadagainurl = await loadurl(brw, url);
                    }
                }
            }



            return(url + " --------- " + kq);
        }