|
|
Message-ID: <d8261b5cd2709036ed0e50762db152fe@smtp.hushmail.com>
Date: Mon, 10 Dec 2012 02:37:41 +0100
From: magnum <john.magnum@...hmail.com>
To: john-dev@...ts.openwall.com
Subject: Re: fixing the valid() methods
On 10 Dec, 2012, at 1:27 , Solar Designer <solar@...nwall.com> wrote:
> (...)and Dhiru is now working on fixing them, usually "by copying get_salt
> logic to valid" (in his words). Does this mean code duplication? If
> so, that's not great. Also, were not some of the crashes in get_salt()
> itself? If so, more robust code needs to be written for valid(), not
> the overly trusting code copied from get_salt().
I was going to raise a warning flag too. Here's an example:
diff --git a/src/ssh_ng_fmt_plug.c b/src/ssh_ng_fmt_plug.c
index b4c4f16..83ae58a 100644
--- a/src/ssh_ng_fmt_plug.c
+++ b/src/ssh_ng_fmt_plug.c
@@ -81,7 +81,34 @@ static void init(struct fmt_main *self)
static int valid(char *ciphertext, struct fmt_main *self)
{
- return !strncmp(ciphertext, "$sshng$", 7);
+ char *ctcopy = strdup(ciphertext);
+ char *keeptr = ctcopy;
+ char *p;
+ int ctlen;
+ if (strncmp(ciphertext, "$sshng$", 7) != 0)
+ goto err;
+ ctcopy += 7;
+ p = strtok(ctcopy, "$"); /* cipher */
+ if ((p = strtok(NULL, "$")) == NULL) /* salt len */
+ goto err;
+ if(atoi(p) > 16)
+ goto err;
+ if ((p = strtok(NULL, "$")) == NULL) /* salt */
+ goto err;
+ if ((p = strtok(NULL, "$")) == NULL) /* ciphertext length */
+ goto err;
+ ctlen = atoi(p);
+ if ((p = strtok(NULL, "$")) == NULL) /* ciphertext */
+ goto err;
+ if(strlen(p) != ctlen * 2)
+ goto err;
+
+ MEM_FREE(keeptr);
+ return 1;
+
+err:
+ MEM_FREE(keeptr);
+ return 0;
}
1. It's definitely suboptimal to do a strdup() before even checking the format tag. Is it not true that when loading eg. KoreLogic's millions-of-hashes files (and not specifying --format) each and every input line will be sent to every valid() of all the 200+ formats? I think that is what happens. Have this in mind when implementing valid()...
2. I dislike strdup/free if you can avoid allocating at all... but I'm not sure it's that much a problem provided you fix #1. I tend to use strchr/strrchr on the original string instead.
magnum
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.