Skip to content

Instantly share code, notes, and snippets.

@YangSeungWon
Last active November 21, 2020 08:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YangSeungWon/cfd13aca223f5ac5cddd44d30998486a to your computer and use it in GitHub Desktop.
Save YangSeungWon/cfd13aca223f5ac5cddd44d30998486a to your computer and use it in GitHub Desktop.

UIUCTF 2020 - Bot Protection IV

tags: machine learning

[name=whysw@PLUS]

Attachments

Attachments are uploaded on gist and google drive.

Challenge

When on website: +1 spam resistance +10 user annoyance

Gotta be fast! 500 in 10 minutes!

https://captcha.chal.uiuc.tf

Author: tow_nater

As you can see in the comments in index.html, there is captcha.zip file in https://captcha.chal.uiuc.tf/captchas.zip.

<!--TODO: we don't need /captchas.zip anymore now that we dynamically create captchas. We should delete this file.-->

There were 69696 PNG files, with True answer of captcha.


Additionally, these strange characters are Minecraft Enchantment Table Language. ttf file was in https://captcha.chal.uiuc.tf/static/mc.ttf.

It is just one-to-one correspondence with the alphabet, so after doing captcha for about an hour, I became possible to distinguish and type these characters in ~5 seconds. (which is not enough to get FLAG!)

Solution

Machine Learning?

I and my teammates tried hard to find other WEB vulnerabilities, but failed. So we thought that this challenge might be about machine learning...?(even though this chall is in web category) Then, captchas.zip must be dataset for machine learning.

There are 5 characters at once, so I searched Github for Tensorflow code for OCR on more than 2 characters.

https://github.com/JackonYang/captcha-tensorflow

And here it is!


Adapt github code to this challenge

Change Variable

That original code in github is about solving captcha for 4 digits. We are dealing with 5 (alphabet) characters, so changed like below.

Previous:

H, W, C = 100, 120, 3
N_LABELS = 10
D = 4

Changed to:

>H, W, C = 75, 250, 3
N_LABELS = 26
D = 5

Increase Accuracy

At first, we used exactly same layer setting with that code, but that fails at least once in 10 trials.

input_layer = tf.keras.Input(shape=(H, W, C))
x = layers.Conv2D(32, 3, activation='relu')(input_layer)
x = layers.MaxPooling2D((2, 2))(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D((2, 2))(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D((2, 2))(x)

x = layers.Flatten()(x)
x = layers.Dense(1024, activation='relu')(x)
# x = layers.Dropout(0.5)(x)

x = layers.Dense(D * N_LABELS, activation='softmax')(x)
x = layers.Reshape((D, N_LABELS))(x)

Improving it, we removed one layer,

x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D((2, 2))(x)

but it made the situation worse...

So we added one more layer from the first one!

input_layer = tf.keras.Input(shape=(H, W, C))
x = layers.Conv2D(32, 3, activation='relu')(input_layer)
x = layers.MaxPooling2D((2, 2))(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D((2, 2))(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D((2, 2))(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D((2, 2))(x)

The output was awesome. We rarely failed! But this is not the end.


Retrying + Human Learning

We don't have penalty even when we fails. This means we can try again just after we fails. We were able to sort answers by possibility. (because we used softmax)

    im = Image.open(BytesIO(base64.b64decode(data)))
    data = np.array([np.array(np.array(np.array((np.array(im) / 255.0))))])
    y_pred = model.predict_on_batch(data)
    res = tf.math.top_k(y_pred, k=3)
    prob = np.array(res[0][0])
    indices = np.array(res.indices[0])
    l = []

    
    beta = prob[0].size
    beka = prob.size // beta

    for i in range(beka):
        k = []
        for j in range(beta):
            k.append([indices[i][j], prob[i][j]])
        l.append(k)
    wasm = list(product(*l))

    def f(x):
        s = 0
        for i in x:
            s += i[1]
        return s

    res = sorted(wasm, key=f, reverse=True)

This challenge uses session cookie for counting 15 minutes. It means we can open multiple windows with same cookie. So we opened another window and used it in emergency situation.

def send(res):
    for arr in res[:30]:
        trial = ""
        for pair in arr:
            trial += toCh(pair[0])
        r = s.post("https://captcha.chal.uiuc.tf/", data = {"captcha":trial})
        ret = r.text.split('<h2>')[1].split('</h2>')[0]
        print(ret)
        if ret != "Invalid captcha":
            return True
    return False

while True:
    im, res = solve_captcha(get_img())
    if not send(res):
        input("ALEEEEEEEEEEEEEEEEEEEEEERT!!!!!!!!!!!!!")

When it eventually fails after 30 tries, we manually type the answer, and press enter in python in order to continue.

AND WE GOT...

output : uiuctf{i_knew_a_guy_in_highschool_that_could_read_this}

p.s. Now I can read this too! haha - whysw

Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
<!doctype html>
<!--TODO: we don't need /captchas.zip anymore now that we dynamically create captchas. We should delete this file.-->
<html>
<title>UIUCTF</title>
<link rel="stylesheet" href="/static/style.css">
<body>
<div class="bg"/>
<div class=overlay>
<h2>Level 0 is not high enough</h2>
<div class="container">
<img class="enchant" src="/static/img/overlay.png"/>
<img class="captcha" src="data:image/png;base64,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"/>
</div>
<form action="?" method="post">
<input type="text" id="captcha" name="captcha" placeholder="Captcha">
<input type="submit" value="Enchant">
</form>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment