naya_hira’s diary

三日坊主の備忘録

Emdee five for life 【Hack The Box : Write up】

はじめに

自力で解けそうな問題があったので久しぶりの Hack the Box です。
自分は、セッションを使わずにやってたので詰んでました。

問題 概要

f:id:naya_hira:20200529174119p:plain
問題は、以上です。一番上に『MD5 encrypt this string』 と書いてあるため、MD5 ハッシュ値を下の input要素に想像できます。 では、真ん中の文字列の MD5 ハッシュ値を計算して入力してみました。
すると、
f:id:naya_hira:20200529174721p:plain
『Too slow! (遅すぎる!!)』と怒られてしまいました。
さて、どうすればよいのでしょうか。

これより下は、解法やネタバレを含みます。
自力で溶けそうな人は、ぜひ挑戦してください。

回答編

遅いようなので処理を自動化してみましょう。
今回は、 Python で書いていきます。

import requests
import hashlib
from bs4 import BeautifulSoup

#Specify url : url の指定
url = "your url"
r_session = requests.session()

# Get and parse page data. : ページのデータを取得し、解析する。
get_data = r_session.get(url)
get_data_parser = BeautifulSoup(get_data.text, 'html.parser')

# Get text to hash : ハッシュ化するテキストの取得
hash_text = get_data_parser.h3.get_text()

# Load hashed text into json : ハッシュ化するテキストをjsonに積める
hash_md5_text = hashlib.md5(hash_text.encode()).hexdigest()
post_data = {'hash' : hash_md5_text}

# Send text : テキストの送信
received_data = r_session.post(url=url,data=post_data)
output = BeautifulSoup(received_data.text, 'html.parser')

# get flag : yeah
print(output.p.text)

一気に書きましたが、これを実行するとフラッグを取得できます。
順に説明していきます。
Webページにアクセスして、ハッシュ化する文字列を入手します。
その後、ローカルでMD5ハッシュ化をします。
ハッシュ化したデータを、POSTします。
最後に、帰ってきたデータを解析してフラッグの部分だけ表示します。

おわりに

実は、HtBの初得点だったりします。
session のせいで少し詰みましたが、最後まで行けてよかったです。