Avatar billede brandborg Nybegynder
31. januar 2002 - 16:41 Der er 11 kommentarer

Sikkerhed på dette javascript?

Hejsa... Jeg har fået stillet til opgave af en IT administrator fra min fars
arb. at se om jeg kunne bryde ind igennem dette script:
http://www.stidsholt.dk/kkleups/index.htm
Jeg har tidligere leget med Java scripts... Men har så senere droppet dem
igen da jeg for det meste har kunne se både Username og password i de filer
der bliver gemt i min temp mappe... =/
Nu har jeg siddet og studeret dette lidt i et par dage... Og det eneste jeg
har kunne finde frem til er at brugernavnet er "knud"
Jeg har ikke kunne finde / decryptere et password nogenstede fra...
Jeg har dog frarådet Administratoren at bruge scriptet da man med et
username forholdsvist hurtigt kunne lave et Brute-Force attack...
Men nu vil jeg gerne høre om nogen herinde evt. kan komme igennem scriptet
og ind på siden hvor Administratoren har lagt en besked til mig?
Og hvis det er muligt evt. forklare mig hvordan...
Hvis i mener at scriptet er sikkert nok (Kan stadig ikke få mig selv til at
tro på et Javascript skulle være sikkert!)
Så også lige sende et svar...
Enten via mail, ell. her i gruppen

På forhånd mange tak for hjælpen
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 16:46 #1
2. sek...
Avatar billede jonatand Nybegynder
31. januar 2002 - 16:52 #2
Tja, en ting er jo helt sikkert, de kan komme ind på de sikrede sider ved at skrive adressen i adresselinjen!...
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 16:53 #3
jeg sidder lidt fast i..


public class loader extends password
{

    public loader()
    {
        setStartURL("");
        setPswURL("");
    }
}
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 16:56 #4
// Decompiled by DJ v2.9.9.61 Copyright 2000 Atanas Neshkov  Date: 31-01-2002 16:55:20
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name:  password.java

import java.applet.Applet;
import java.applet.AppletContext;
import java.awt.*;
import java.io.*;
import java.net.URL;
import java.util.Vector;

public class password extends Applet
    implements Runnable
{

    public void init()
    {
        if(startURL == null)
        {
            String s = getParameter("start_url");
            startURL = s != null ? s : new String();
        }
        String s1 = getParameter("bgcolor");
        int i;
        try
        {
            i = s1 != null ? Integer.parseInt(s1, 16) : Color.white.getRGB();
        }
        catch(Exception _ex)
        {
            i = Color.white.getRGB();
        }
        setBackground(new Color(i));
        s1 = getParameter("home_url");
        if(s1 != null)
            try
            {
                if(s1.indexOf(":") == -1)
                    homeURL = new URL(getDocumentBase(), s1);
                else
                    homeURL = new URL(s1);
            }
            catch(Exception exception)
            {
                System.err.println(exception);
            }
        if(homeURL == null)
            try
            {
                homeURL = new URL(getDocumentBase(), "./");
            }
            catch(Exception exception1)
            {
                System.err.println(exception1);
            }
        s1 = getParameter("error_url");
        if(s1 != null)
            try
            {
                if(s1.indexOf(":") == -1)
                    errorURL = new URL(getDocumentBase(), s1);
                else
                    errorURL = new URL(s1);
            }
            catch(Exception exception2)
            {
                System.err.println(exception2);
            }
        if(errorURL == null)
            try
            {
                errorURL = new URL(getDocumentBase(), "./error.htm");
            }
            catch(Exception exception3)
            {
                System.err.println(exception3);
            }
        if(pswURL == null)
        {
            s1 = getParameter("psw_url");
            if(s1 != null)
                try
                {
                    if(s1.indexOf(":") == -1)
                        pswURL = new URL(getDocumentBase(), s1);
                    else
                        pswURL = new URL(s1);
                }
                catch(Exception exception4)
                {
                    System.err.println(exception4);
                }
        }
        if(pswURL == null)
            try
            {
                pswURL = new URL(getDocumentBase(), "./users.txt");
            }
            catch(Exception exception5)
            {
                System.err.println(exception5);
            }
        s1 = getParameter("use_base");
        if(s1 != null)
            useBase = !s1.equalsIgnoreCase("false");
        setFont(new Font("SansSerif", 0, 14));
        navpan = new NavPanel(this);
        navpan.setVisible(false);
        add(navpan);
    }

    public void start()
    {
        if(pswMon == null)
        {
            pswWin = new PswFrame(this, pswURL);
            pswMon = new Thread(this);
            pswMon.start();
        }
    }

    public void run()
    {
        for(int i = 0; pswWin.isShowing() && i < 120;)
            try
            {
                Thread.sleep(500L);
                i++;
            }
            catch(Exception exception)
            {
                System.out.println(exception);
            }

        if(pswWin.isValid())
        {
            pswWin.dispose();
            navpan.setVisible(true);
            goStart();
            return;
        } else
        {
            pswWin.dispose();
            redirect(errorURL, "_top");
            return;
        }
    }

    public void stop()
    {
        pswMon = null;
    }

    public void setStartURL(String s)
    {
        if(s != "")
            startURL = s;
    }

    public void setPswURL(String s)
    {
        if(s != "")
        {
            try
            {
                if(s.indexOf(":") == -1)
                {
                    pswURL = new URL(getDocumentBase(), s);
                    return;
                } else
                {
                    pswURL = new URL(s);
                    return;
                }
            }
            catch(Exception exception)
            {
                System.err.println(exception);
            }
            return;
        } else
        {
            return;
        }
    }

    public synchronized String getURL()
    {
        String s = new String();
        if(load)
        {
            URL url = (URL)list.elementAt(curr);
            s = getContent(url);
        }
        load = false;
        return s;
    }

    public synchronized void setList(int i, URL url)
    {
        if(i == 2)
        {
            if(curr > 0)
            {
                curr--;
                load = true;
            }
        } else
        if(i == 1)
        {
            if(curr < list.size() - 1)
            {
                curr++;
                load = true;
            }
        } else
        if(i == 3)
            load = true;
        else
        if(i == 4)
            if(curr == list.size() - 1)
            {
                if(list.size() < 50)
                {
                    list.addElement(url);
                    curr++;
                } else
                {
                    list.removeElementAt(0);
                    list.addElement(url);
                }
            } else
            {
                list.insertElementAt(url, curr + 1);
                curr++;
                for(int j = list.size() - 1; j > curr; j--)
                    list.removeElementAt(j);

            }
        if(curr > 0)
            navpan.setEnabled("Back", true);
        else
            navpan.setEnabled("Back", false);
        if(curr < list.size() - 1)
        {
            navpan.setEnabled("Next", true);
            return;
        } else
        {
            navpan.setEnabled("Next", false);
            return;
        }
    }

    private void goStart()
    {
        System.out.println("Loading start page...");
        int i = startURL.charAt(0) - 100;
        String s = startURL.substring(1, i + 1);
        String s1 = startURL.substring(i + 1);
        s1 = c3.decode(s1, s);
        try
        {
            URL url;
            if(s1.indexOf(":") == -1)
                url = new URL(getDocumentBase(), s1);
            else
                url = new URL(s1);
            setList(4, url);
            setList(3, null);
            return;
        }
        catch(Exception exception)
        {
            System.err.println(exception);
        }
        redirect(errorURL, "_top");
    }

    public String fetchURL(String s)
    {
        int i = Integer.valueOf(s.substring(0, 2)).intValue();
        String s1 = (String)keys.elementAt(i);
        String s2 = s.substring(2);
        return loadPage(s2, s1);
    }

    private String loadPage(String s, String s1)
    {
        String s2 = new String();
        s = c3.decode(s, s1);
        try
        {
            URL url;
            if(s.indexOf(":") == -1)
                url = new URL(getDocumentBase(), s);
            else
                url = new URL(s);
            setList(4, url);
            s2 = getContent(url);
        }
        catch(Exception exception)
        {
            System.err.println(exception);
            s2 = s2 + "<hr><h3>Invalid URL</h3>";
        }
        return s2;
    }

    private String getContent(URL url)
    {
        StringBuffer stringbuffer = new StringBuffer();
        navpan.setEnabled("Reload", false);
        try
        {
            DataInputStream datainputstream = new DataInputStream(url.openStream());
            if(useBase)
            {
                int i = url.toString().lastIndexOf('/');
                String s1 = url.toString().substring(0, i + 1);
                stringbuffer.append("<BASE HREF=\"" + s1 + "\">\n");
            }
            keys = new Vector(10);
            do
            {
                char c = (char)datainputstream.readByte();
                if(c == '<')
                {
                    String s = readTag(datainputstream);
                    s = checkTag(s);
                    stringbuffer.append(s);
                } else
                {
                    stringbuffer.append(c);
                }
            } while(true);
        }
        catch(EOFException _ex)
        {
            System.out.println("Done loading page " + curr + ": " + stringbuffer.length() + " bytes");
        }
        catch(Exception exception)
        {
            System.err.println(exception);
            stringbuffer.append("<hr><h3>Error Opening Input Stream</h3>");
        }
        navpan.setEnabled("Reload", true);
        return stringbuffer.toString();
    }

    private static String readTag(DataInputStream datainputstream)
    {
        StringBuffer stringbuffer = new StringBuffer("<");
        char c = '<';
        try
        {
            while(c != '>')
            {
                c = (char)datainputstream.readByte();
                stringbuffer.append(c);
            }
        }
        catch(EOFException _ex) { }
        catch(Exception exception)
        {
            System.err.println(exception);
        }
        return stringbuffer.toString();
    }

    private String checkTag(String s)
    {
        StringBuffer stringbuffer = new StringBuffer(s);
        for(int l = 0; l < stringbuffer.length(); l++)
            if(stringbuffer.charAt(l) == '\r' || stringbuffer.charAt(l) == '\n')
                stringbuffer.setCharAt(l, ' ');

        String s1 = stringbuffer.toString();
        try
        {
            String s2 = s1.toUpperCase();
            int i;
            if(s2.startsWith("<A HREF"))
                i = s2.indexOf("PARENT.NAVPANE.FETCH(");
            else
            if(s2.startsWith("<TITLE>"))
            {
                s = "<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">\n" + s1;
                return s;
            } else
            {
                return s;
            }
            if(i == -1)
                return s;
            int j;
            for(j = i + 21; Character.isWhitespace(s2.charAt(j)); j++);
            if(s2.charAt(j) == '\'')
                j++;
            int k;
            for(k = j + 1; !Character.isWhitespace(s2.charAt(k)) && s2.charAt(k) != '\'' && s2.charAt(k) != ')'; k++);
            String s3 = s.substring(j, k);
            String s4 = c3.getKey(s3);
            keys.addElement(s4);
            s3 = c3.encode(s3, s4);
            String s5 = Integer.toString(keys.size() - 1);
            s3 = s5.length() >= 2 ? s5 + s3 : "0" + s5 + s3;
            s = s1.substring(0, j) + s3 + s1.substring(k, s1.length());
        }
        catch(StringIndexOutOfBoundsException _ex) { }
        catch(Exception exception)
        {
            System.err.println(exception);
        }
        return s;
    }

    public void home()
    {
        redirect(homeURL, "_top");
    }

    private void redirect(URL url, String s)
    {
        try
        {
            InputStream inputstream = url.openStream();
            inputstream.read();
            inputstream.close();
            getAppletContext().showDocument(url, s);
            return;
        }
        catch(Exception exception)
        {
            System.out.println(exception);
        }
    }

    public password()
    {
        useBase = true;
        c3 = new cipher3();
        list = new Vector(10);
        curr = -1;
        load = false;
    }

    protected final int FWD = 1;
    protected final int BWD = 2;
    protected final int GET = 3;
    protected final int ADD = 4;
    protected final int MAX = 50;
    private String startURL;
    private String name;
    private String password;
    private boolean cancel;
    private NavPanel navpan;
    private URL homeURL;
    private URL errorURL;
    private URL pswURL;
    private boolean useBase;
    private Vector keys;
    private cipher c3;
    private PswFrame pswWin;
    private Thread pswMon;
    private Vector list;
    private int curr;
    private boolean load;
}
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 16:57 #5
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 16:58 #6
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 17:01 #7
Nu har du jo algoritmen
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 17:03 #8
Desuden var det ikke javaScript, men derimod en java-applet..
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 17:16 #9
Jeg kan kun fraråde alle at bruge java-applets og i den grad javascripts som password-beskyttelse...
Ikke fordi et brute-force-attack er så farligt, hvis bare passwordet er langt nok, men mere fordi evt. krypterings-algoritmer ligge frie...
Derimod er asp, php eller cgi mere sikkert, da de kører serverside...

// ThA FooDProCeSSor, 2600dk
Avatar billede brandborg Nybegynder
31. januar 2002 - 19:30 #10
Att: Foodprocessor
Ja... Havde godtnok fundet de filer... Dog i min temp internet cache...
Mit problem er mere at jeg har ledt på nettet efter steder der kan forklare eller hjælpe med at give en bedre forståelse for hvordan en sådanne algoritme fungere, og hvordan jeg kan afkode den. Har fundet nogen toturials etc. men i dem der er de password der skal decodes bare i en fil med en 4-5 linier hvor det er meget specifikt hvilke linier der er password og som skal dekrypteres.
Kan det være fordi jeg skal bruge et andet program end Notepad til at åbne class filen?
Avatar billede foodprocessor Nybegynder
31. januar 2002 - 20:30 #11
Class-filer er compilet med en java-compiler, og er derfor i binær kode... Derfor skal du bruge en java-decompiler... (f.eks. den jeg brugte)...
Men det er ikke nok at kunne se koden for at kunne se og føle dig frem via fremgangsmåden og stille de samme funktioner op (bare så det går den anden vej)...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester