LoginSignup
0
1

More than 5 years have passed since last update.

Hash me if you can[RingZer0]

Last updated at Posted at 2017-07-08

問題ページ
SnapCrab_NoName_2017-7-8_22-48-25_No-00.png
-----BEGIN MESSAGE-----から-----END MESSAGE-----にあるメッセージをSHA512でハッシュ化し、https://ringzer0team.com/challenges/13/[ここ]にいれてアクセスすれば良いみたい。さっそく、適当なツールサイトでハッシュ化を行いアクセスしてみたところ
SnapCrab_NoName_2017-7-8_22-53-22_No-00.png
と、言われた。どうやら2秒で送り返さないとならないようだ。人力では無理そうなのでプログラミングをするしかなさそうである。今回は「Python」を用いてプログラムを作成する。プログラムの流れは次のようにする。
SnapCrab_NoName_2017-7-8_23-1-47_No-00.png
最後のフラッグゲットは実際どのようにフラッグが送られてくるのかわからないため少し変更があるかもしれない。とりあえず上からどのように実装していけばいいのか考える。調べてところ、requestslxml.htmlを使う方法が出てきた。のでその方法で少しコードを書いてみた
SnapCrab_NoName_2017-7-8_23-56-55_No-00.png
requests.get(URL)でウェブページが取得でき、ウェブページのHTML文章はtextメゾットに入っているのでこれを取得することでソースが全て見ることができる。しかし、取得できたソースを一度htmlファイルを作成し、そこにコピーをしてブラウザで開くと困ったことになっていた。
SnapCrab_NoName_2017-7-8_23-9-56_No-00.png
ログインページに戻されているわけである。なので一度ログインをしなければいけないのであろう。

 このウェブページのソースの一部を見ると、
SnapCrab_NoName_2017-7-8_23-18-22_No-00.png
送信形式はPOSTで、usernamepasswordを送り付ければ良いと考えれれる。ログインをした後に問題ページに移動して動作を行うため、問題ページに移動後もログイン状態が保たれるようにしなければならないため、同じセッションで行う必要がある。そこで書き直したコードは次のようになる。
SnapCrab_NoName_2017-7-9_1-4-55_No-00.png
requests.session()Sessionのインスタンスが作成され、ハッシュや連想配列と呼ばれるものに似た機能を持つdictkey=valueのようにPOSTで送信するデータを設定し、その設定したデータをLogin_URLに添付し、ログインさせる。同じセッションなのでログイン情報は保たれ、問題のURLにアクセスすることができる。

あとは、r2.textからメッセージの部分を抜き出せば良い。さて、どうしよう。とりあえず、パッと思いついた方法でやって書いてみた。
SnapCrab_NoName_2017-7-9_1-5-10_No-00.png
説明はコメントで書いておいた。これでmessageにメッセージの部分だけが入った。

messageSHA512でハッシュ化する方法は、まず、importの部分にhashlibを追加する。
SnapCrab_NoName_2017-7-9_0-37-13_No-00.png
次に、追加したhashlibを用いて、次のようにすれば良い。
SnapCrab_NoName_2017-7-9_0-45-39_No-00.png
ちなみに、.encode('utf-8')は、Unicode-objects must be encoded before hashingとエラーが出るので必要である。hexdigest()は名前にとおり、16進数にしてくれる。
SnapCrab_NoName_2017-7-8_23-1-47_No-00.png
ここまで、できた。あとはハッシュ化したメッセージanswerを送り付ければよい。

SnapCrab_NoName_2017-7-9_0-53-51_No-00.png
実行して、r3.textの内容をブラウザで見てみる。
SnapCrab_NoName_2017-7-9_0-54-56_No-00.png
駄目らしい。ハッシュ化が間違ってるとは思えないので、URLの書き方が悪かったのだろうか、[ ]を除いてリトライしてみる。
SnapCrab_NoName_2017-7-9_0-57-12_No-00.png
同様に、実行してブラウザで見てみる。
SnapCrab_NoName_2017-7-9_0-58-31_No-00.png
フラッグを手に入れた。

同じ要領でこれとほぼ同じ問題「Hash me reload」も少し改変すれば解ける。この問題は、メッセージが2進数で送られてくるので、8bitごとに区切ってchar型に変換してからハッシュ化すればすればよいだけである。一応改変したコードを載せておく。SnapCrab_NoName_2017-7-9_1-45-55_No-00.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1