読者です 読者をやめる 読者になる 読者になる

WTF!?

オンサイトCTFのWriteupとか書いてく.

年賀状CTF 2017(お年玉付き)

CTF

新年あけましておめでとうございます.

新年といえば年賀状.年賀状といえば年賀状CTF.

ということで今年もお年玉付き年賀状CTFを開催します!

お年玉の金額は

0x1337円(4919円)です!

ルール

  • ステージ1〜ステージ3の合計3問です.

  • 途中点などはありません.

  • ステージ1, ステージ2のフラグフォーマットはNYC{.*}です.

  • ステージ3のフラグがAmazonギフト券のコードなので,一番早く解いた人のみが受け取れるようになっています.

  • ギフト券獲得者は @_N4NU_ 宛にDM又はリプを送ってください.

  • 質問がある場合も @_N4NU_ 宛にDM又はリプを送ってください.

  • Write upなど解法の公開は大歓迎です.

問題

www.dropbox.com

First blood

murachueさん (2017/1/2 3:20)

おめでとうございます!

また,お年玉は若手の方に使って欲しいというご本人の意向でまだ残っています!

他の参加者の方々は是非お年玉獲得を目指してがんばってください!

[追記]

お年玉はakiymさんが獲得しました!おめでとうございます!

TWCTFで作問したやつの解説のようなもの

TWCTFで作問したやつの解説のようなものです.

github.com

の公開に合わせて投稿しました.

解けなかった方はこれとGitHubのsolverを参考にして解いていただけたら嬉しいです.

あと今のところUnpackGoとSteganographerのWriteupが見つかっていないので見つけた若しくは書いたという方が居らっしゃいましたら教えていただけると嬉しいです.

解いたチームが多い順に解説していきます.

ReverseBox (Reversing, Warmup 50)

$ ./reverse_box ${FLAG}
95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a
reverse_box.7z

Solved: 148 teams

解説のようなもの

Warmupの中ではdeadnasに次いで2番目に解けた人が少なかったです.

こんな感じで,作り始めるまで一番時間がかかり,

作り始めて完成するまでは一番早かった問題です.

ツイートにも書いてあるように中身はランダムに初期値(?)を選択した

AES(Rijndael)のS-BOX(と言っていいのか分からない変な変換テーブル)です.

シードにあたるものが256通りしか無いのでどうにでもなるでしょう.

煮るなり焼くなり好きにしてあげてください.

Cocktail (Misc 200pts)

Is the order a cocktail??
cocktail.7z

Solved: 27 teams

解説のようなm(ry

自分が作った問題の中で唯一Reversingではないものです.

9人の声とホワイトノイズを異なる比率で混ぜた音源が10個用意されていて,

フラグが読み上げられていくのでどうにかして聞き取ってねという問題です.

これは最初作ったときはホワイトノイズが乗っておらず人の声も5つしかありませんでした.

検証してもらったら素でも4人まで聞き取れたらしかったので,声の数を増やしてホワイトノイズを乗っけることで対処しました.

この問題のモデルとしては人混みの中で盗聴するにはどうすればいいかな的なものを想定しながら作っていました.

作り方が適当だったのでホワイトノイズの大きさから音量の比率を定めた(ランダムに生成された)行列の逆行列を求めるという解き方が生まれてしまいました.

個人的にこの解き方は面白かったので良いと思っています.

この解き方をしたチームが殆どで,想定解法で解いたチームは居なさそうという気はしています.

想定解法のヒントとしては

  • 混ざった音源が混ざる前の音源の数だけ存在する
  • カクテルパーティ

といったところでしょうか.

まあリスニングの練習にでも使ってやってください.

Cello Rule (Reversing 250pts)

cello_rule.7z

Solved: 12 teams

解説のようn(ry

いきなりSolvedが減りましたね.

日本のチームではkatagaitaiのbataさんとdodododoのakiymさんが解いて下さいました. 本当に有難うございます.

作る経緯としては↓こんな感じです.

Celloっていう頭おかしいライブラリ(変数をvarで宣言したりforeachが使えたり簡易GCが実装されてたり)があって,

色々作ってバイナリで見てみると結構面白かったのでこれでrev問作りたいなっていうところから始まりました.

あとセル・オートマトンを絡めた何かも作りたいと思っていたので,

この二つをくっつけた結果,あのよくわからないバイナリが出来上がりました.

解くときは,セル・オートマトン使った乱数生成あたりを調べたら参考になると思います.

UnpackGo (Reversing 350pts)

unpack_go.7z

Solved: 3 teams

解s(ry

更にSolvedが減りました.

解いたのは毎度お馴染みPPPとangrで解いたのかもしれない(無いな)Shellphishとルーマニアキチガイ集団PwnThyBytesです.

これは名前からも分かるようにunpack meとgolang問をくっつけた問題です.

動機としてはgolangGUIのプログラム作りたかったというだけです.

綺麗にunpackさえ出来ればシンボルが残ってるgolang問なので比較的解きやすいほうかな(Solvedが10チームぐらい出る)と思っていたのですが,意外と解かれませんでした.

Goという文字が忌避を誘ってしまったのかもしれないですね.

解く為のヒントとしては

  • パッカーはUPXを少しだけ書き換えたもの
  • アンパックしたら処理を2つ取り除くだけでフラグが得られる

と言ったところです.

シンボル情報を参考にしながらできるだけ読み飛ばせれば解けると思います.

解けた時のインパクトは良い問題なので解けたら楽しいかも.

Steganographer (Reversing 400pts)

steganographer.7z

Solved: 2 teams

k(ry

解いたチームは案の定のPPPと台湾の変態集団217です.

作問した中で一番のお気に入りの問題です.

これは素のcのプログラムをコンパイルしてるだけ(最適化はかかっています)なのでCello RuleとUnpackGoに比べたら解析はやりやすいと思います.

使われている技術としては電子透かしとかでよく使われているやつです.

これが解ければksnの人間問題も解けるかも(?)

これだけヒント出せば後は気合で解けるでしょう.

(個人的には)とても面白い問題なので是非解いて下さい.

まとめ

TWCTFに参加して下さった皆様本当にありがとうございます!!!

今回のTWCTFのvotingのレートが良いのはインフラが安定していたことや良質なCrypto問などのおかげであって,自分の問題は評価に繋げられていないと思っています.

次回開けたらもっと良い問題を出してTWCTF全体の評価に繋げられるよう,

今のうちにコツコツと作問していく所存です.

年賀状CTF(お年玉付き)解説

CTF

年賀状CTFの解説をしていこうと思います.

Write upはBono(@Bono_iPad)さんが書いてくださっているので,

想定解を問題のソースなどを交えて紹介していきます.

BonoさんのWrite up

年賀状CTF2016 (by @_N4NU_) writeup by Bono-iPad

問題

年賀状CTF(お年玉付き) - WTF!?

Stage1

ジャンルとしては Forensic + Reversing ( + Steganography ) ですかね.

年賀状の画像が渡されるところから始まります.

fileコマンドを叩くと

$ file wc16g_tf_0003.png
wc16g_tf_0003.png: PNG image data, 1748 x 1181, 8-bit/color RGBA, non-interlaced

binwalkで叩くと

$ binwalk wc16g_tf_0003.png

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 1748 x 1181, 8-bit/color RGBA, non-interlaced
54            0x36            Zlib compressed data, default compression
2662          0xA66           Zlib compressed data, default compression
3402577       0x33EB51        gzip compressed data, from Unix, last modified: 2015-12-31 14:26:13

何か後ろにくっついてますね.

gzipで展開するとtarであることが分かるのでtarで展開すると,stage1というフォルダが現れました.

$ ls stage1
stage1.pyc  stage2.tar.gz.gpg

stage1.pycの元のコードは

#!/usr/bin/env python2
import sys
from os.path import getsize, basename
import random
try:
    from PIL import Image
except ImportError:
    import Image

if len(sys.argv) < 3:
    sys.stderr.write('Usage: {0:s} png_file message\n'.format(sys.argv[0]))
    sys.exit(1)

im = Image.open(sys.argv[1])
width, height = im.size

message = sys.argv[2]

for i in xrange(len(message)):
    pix = list(im.getpixel((i % width, i / width)))
    pix[random.randint(0, 3)] ^= ord(message[i])
    im.putpixel((i % width, i / width), tuple(pix))

im.save(basename(sys.argv[1]).split('.')[0].encode('rot13') + '.png')

pythonのデコンパイラを使うとほぼ同じ内容のコードを復元できると思います.

こいつを少し変えるとsolverになります.

#!/usr/bin/env python2
import sys
from os.path import getsize, basename
try:
    from PIL import Image
except ImportError:
    import Image

if len(sys.argv) < 3:
    sys.stderr.write('Usage: {0:s} original_file stegged_file\n'.format(sys.argv[0]))
    sys.exit(1)

im1 = Image.open(sys.argv[1])
im2 = Image.open(sys.argv[2])

width, height = im1.size

message = ''

i = 0
while not '\x00' in message: 
    pix1 = list(im1.getpixel((i % width, i / width)))
    pix2 = list(im2.getpixel((i % width, i / width)))
    message += chr(max([t[0] ^ t[1] for t in zip(pix1, pix2)]))
    i += 1

print message.strip('\x00')

こいつにネットから探してきた元の画像とwc16g_tf_0003.pngを渡せばflagが出てきます.

Congratz!!! Password: D3c0mpilin6_4nd_R3v3rs1n6_pyc_15_700_345y

Stage2

ジャンルとしては (Javascript) Reversing です.

この問題はStage1〜Stage3の中で最も年賀状CTFらしいネタが詰まっています.

問題のLife GameはMonkey Xという,クロスプラットフォームプログラミング言語を用いて作成しました.

なおLife Game本体はサンプルコード*1から引用しました.

実行すると普通のLife Gameが始まります.

Javascriptで動いているのでコードを見てみると難読化がかけられているので,

気合で人力デコードしたり,ブラウザにデコードさせたり,難読化解除ツールを使ったりしてコードを復元します.

元のコードを解析すると盤面がある条件を満たした状態でキーボードのFを押すとflagが現れることが分かります.

実はこのある条件を再現すると2016という文字が浮かび上がります.

Stage3

ジャンルは Reversing です.

$ file stage3
stage3: ELF 32-bit LSB  executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped

Statically LinkedでStrippedという面倒な設定ですが,

その代わり32bitだったり元のコードが1612バイトと小さかったりすることで,

ある程度の難しさに調整しています.

こいつはUPXでパックされていますが,

単純にupx -dではアンパックできないようになっています.

UPXがパックされるとき独自のヘッダーがくっつき,

upx -dではその独自のヘッダーを解釈してアンパックしています.

この独自ヘッダーの一部を書き換えてやると動くのにupx -dでアンパックできないというバイナリが出来ます.

想定解ではメモリ上に展開された状態でダンプを取って解析することを想定していました.

このプログラムの元ソースは次の通りです.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

unsigned char key_matrix[4][4];
unsigned char flag_matrix[4][4];
unsigned char enc_matrix[4][4] = {0};

unsigned char correct_matrix[4][4] = {{0xd0, 0x3f, 0x3e, 0x08},
                                      {0x5b, 0x37, 0x79, 0x1e},
                                      {0x46, 0xe1, 0x10, 0x50},
                                      {0xb1, 0xe6, 0x73, 0xa7}};

int
is_valid_matrix()
{
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 4; j++) {
            if(enc_matrix[i][j] != correct_matrix[i][j]){
                return 0;
            }
        }
    }
    return 1;
}

void
mul_matrix()
{
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 4; j++) {
            for(int k = 0; k < 4; k++) {
                enc_matrix[i][j] += key_matrix[i][k] * flag_matrix[k][j];
            }
        }
    }
}

void
gen_key_matrix()
{
    srand(735);
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 4; j++) {
            key_matrix[i][j] = rand() % 0x100;
        }
    }
}

void
flag2matrix(unsigned char *flag)
{
    for(int i = 0; i < 4; i++) {
        for(int j = 0; j < 4; j++) {
            flag_matrix[i][j] = flag[i * 4 + j];
        }
    }
}

int
is_valid_flag(unsigned char* flag)
{
    if(strlen(flag) != 16) return 0;
    if(flag[4] != '-' || flag[11] != '-') return 0;
    flag2matrix(flag);
    gen_key_matrix();
    mul_matrix();
    if(is_valid_matrix()) return 1;
    return 0;
}

int
main(int argc, char* argv[])
{
    if(argc != 2)
    {
        fprintf(stderr, "Usage: %s flag\n", argv[0]);
        exit(1);
    }

    if (is_valid_flag(argv[1]))
    {
        puts("Congrats! You got the amazon code.");
    } else {
        puts("Invalid. Try again.");
    }

    return 0;
}

randで生成した行列と入力したアマゾンギフト券のコードを行列として解釈した2行列の積が

correct_matrixになればいいというプログラムです.

想定解ではkey_matrixの逆行列を求めてcorrect_matrixにかけてflagを復元することを想定していました.

まとめ

結構な人に参加していただけたようで主催及び作問者としてはとてもうれしく思っています.

来年の年賀状CTFは2017/1/1 12:00(JST)に開催しようと考えています.

また来年は1位の人だけでなく3位の人ぐらいまでお年玉を出せればいいなと考えています.

年賀状CTF(お年玉付き)

CTF

新年あけましておめでとうございます.

新年といえば年賀状.年賀状といえば年賀状CTF.

ということでお年玉付き年賀状CTFを開催します!

お年玉の金額は

1337円(8進数表記)です!

ルール

  • ステージ1〜ステージ3の合計3問です.

  • 途中点などはありません.

  • ステージ3のフラグがAmazonギフト券のコードなので,一番早く解いた人のみが受け取れるようになっています.

  • ギフト券獲得者は @_N4NU_ 宛にDM又はリプを送ってください.

  • 質問がある場合も @_N4NU_ 宛にDM又はリプを送ってください.

  • Write upなど解法の公開は大歓迎です.

問題

www.dropbox.com

First blood

akiymさん (2016/1/1 2:36)

おめでとうございます!

サイバー甲子園 Write up

SECCONのintercollegeの予選のサイバー甲子園に参加した.

2015.seccon.jp

193sと一緒にscryptosとして出場し優勝した.
自分の解いた問題のwrite upを書く.

Find from binary - Bin 100

fileコマンドを叩いてみると

questions: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0ae2183f11574b7147809273d6069958ff21eb70, not stripped

とりあえずIDAに喰わせてみる.

f:id:nanuyokakinu:20151108101921p:plain

絶対通らない分岐先でflagを表示する処理に入っている.
バイナリ書き換えたりデバッガで値変えたりするという方法もあるが,
動かすのが面倒だったのでIDAのHex Viewからコピーしてsubmitした.

flag: SECCON{Can U read me?}

Guess the flag - Bin 200

fileコマンドを叩いてみると

guess: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=f1a2e385b6a77f23bf5528c7303300309e8d827a, not stripped

IDAに喰わせてみる.

f:id:nanuyokakinu:20151108102003p:plain

fgetsで受け取った文字列にNOT演算を掛けて,
0x8048700にあるバイト列と比較して,32バイト一致していたらいいらしい.
bin100と同様にIDAのHex Viewからコピーしてpythonでゴチャゴチャやってflagを出した.

flag: SECCON{XOR_encryption_message}

XOR encription ……?

Invisible message - Net 100

pcapファイルが渡された.
HTTPの通信をしてるのでHTTPで受け渡しされたhtmlとか色々見てみるが,
どれも特に怪しい感じがしなかった.
しばらくpcapを眺めていると,パケットのヘッダー部分にSECC...という文字列が見えた.
よくよく見てみるとクライアントからサーバーへSYNを飛ばし,
SYN/ACKが帰ってきたらすぐにRSTする通信が度々行われており,
これにflagが乗っかっているらしい.

f:id:nanuyokakinu:20151108102055p:plain

wirwsharkの条件式の使い方がわからず,
これに気づいたのが終了15分前ぐらいで
調べる時間もなかったので目grepでflagを出した.

flag: SECCON{Data_is_included_NOT_ONLY_in_payload_but_also_header_field.}

これ絶対100ptsじゃないだろ……

Follow the mail - Net 300

pcapを開くとsmtpの通信があるが,
文字コードISO-2022-JPだったりUTF-8だったりしてそのままでは読めない.
Follow TCP StreamでShow data as Hex Dumpとし,
メール本文のバイト列をコピー,
バイナリエディタに貼っつけてテキストエディタで読んだ.
全部のメールを読むと,flag.zipがメールに添付されており,
zipを解凍するためのパスワードはseccon2015_takesako
zipの中身の文書を開く時のパスワードはtakesako_tessy_sonodam
とのことらしい.

取り敢えずpcapからflag.zipを取り出してseccon2015_takesakoで解凍した.
すると中から出てきたのは,またflag.zipだった.
出てきたflag.zipにfileコマンドをかけてみると.
flag.zip: Composite Document File V2 Document, No summary info
だった.
これは.docだったり.xlsだったりを指しているので,
flag.docとしてMicrosoft Wordに開かせ,
パスワードにtakesako_tessy_sonodamを入力するとflagが現れた.

flag: SECCON{Sending_File_Password_with_Followed_Mail_is_bogus.}

前にもTDUCTFでメールの問題が出たが, その時も人力でメール本文のバイナリを引っこ抜いた.
どうにかこうにか簡単にメール本文だけ引っこ抜くことは出来ないのだろうか.
イケメンパケリスト各位に教えて頂きたい.

Excel

エクセルファイルが渡された.
開いてみるとこんな感じ.

f:id:nanuyokakinu:20151108102232p:plain

多分,値の部分に何か隠れているのだろうと適当にセルを見た.
すると#が値に入っているセルがあったので色の付いたセル全体をコピーして,
「形式を選択してペースト」で値だけをペーストしてやると

f:id:nanuyokakinu:20151108102301p:plain

横幅を調整してやると

f:id:nanuyokakinu:20151108102311p:plain

flag: SECCON{NIRVANA_KA1}

エスパーやな

感想

Bin300ふぁっく

ScrapChallenge 2015 に参加した

ScrapChallengeとは

mixiの社員の方がmixiサービスのクローンに対して脆弱性を仕込み,
その脆弱性をいかに早く発見し,攻撃できるかというイベント.

alpha.mixi.co.jp

前々からWebセキュリティの知識が足りてないところがあり,
また実際のサービスの脆弱性は何処に目をつけて探せばいいのか知りたかったので
Webセキュリティの人権を得るために参加した.


始まる前

会場に着くと既にチーム分けがされており,
農工大の方々(2人)との3人構成のチームだった.
(後から聞いた話によると今回は地域別にチーム分けをしたらしい.)


Webセキュリティ概論

Webセキュリティの基礎的な説明を受けた.


チュートリアル

小手試しにXSSを見つける問題が出た.


ランチ

8月29日(焼き肉の日)ということで,叙々苑の焼肉弁当を用意されていた.
ここまで豪華な昼ご飯は久しぶりだった.


競技開始

最初は5問公開された.
取り敢えず取れそうな問題を解こうとしたがなかなか解けず,
Hintが出されてからやっと1問解けた.他の二人もその内に何問か解けていた.
その後6問公開され,そっちのほうが解きやすそうだなとやってみたところ,
時間はかかったものの1問解けた.
その頃には他2人が前半の問題をある程度解いてくれていた.
隣の席の人に後半の問題をバトンタッチし,
前半の解けていなかった問題をギリギリsubmitしたところで競技終了となった.


問題解説

自分の担当しなかった問題や解けなかった問題の解説が聞けた.


結果発表

残念ながらTop3には入れなかった.
結果発表の後,話を聞くと3位と1ポイント差の4位だったらしく,
あと1問解けていればという感じだったらしい.


懇親会

運営の方や前からよく知っているが遠方に住んでいるため中々会えない
某某某氏と話をしたり出来てよかった.
社員の方に自分の学校のOBが居たのには驚いた.


まとめ

ちゃんとしたサービスに対し攻撃する感じは,
CTFのWeb問とは異なりとても面白かった.
このScrapChallengeでWebセキュリティをもっと学びたいと思えたので
参加してよかったと思う.


常設CTFまとめ

CTF

ある程度の需要があるっぽいのでまとめておいた.
Twitterとかで広めて頂けるとありがたい.
CTFをこれから始める人にはpicoctfがおすすめ.


国内サイト

ksnctf

http://ksnctf.sweetduet.info

kusano(@kusano_k)さんが運営するCTF

CTFを始めるならこれと紹介されている事が多い気がする

akictf

http://ctf.katsudon.org

akiym(@akiym)さんが運営するCTF

Web問多し

ED CTF

https://ctf.npca.jp

EpsilonDeltaが運営するCTF

1度npca.jpドメインが死んで以降復旧されていないらしい

MMA CTF

https://ctf.mma.club.uec.ac.jp

電気通信大学MMAが運営するCTF

CryptoやPPCが得意なチームなのでそのジャンルの問題は良問揃い

ES CTF

http://s01.elliptic-shiho.xyz/ctf/

Shiho Midorikawa(@elliptic_shiho)さんが運営するCTF

問題投稿,正答者間でのWrite up共有が可能

2017/1/23(月) 現在閉鎖中

Flaggers

http://ctf.nash-dev.com

nash(@nash_fs)さんが運営するCTFの問題を出し合うコミュニティサイト

MNCTF

MNCTF2015

http://mnctf.info/mnctf2015/

とっきー(@tokky_cpp)さんから教えていただきました.
ありがとうございます.

Macnica Networks DAY 2015で行われたCTFが公開され常設化したもの

MNCTF2016

http://mnctf.info/mnctf2016/

柚子胡椒CTF

http://ctf.mzyy94.com

かの有名な柚子胡椒氏のCTF

CpawCTF

https://ctf.cpaw.site

プロのプロによる初心者のためのCTF
CTFのプロのぱろっく氏(@porisuteru)が主導で運営している
初心者向けCTFサイト

YEHD 2015 CTF

https://2015-yehd-ctf.meiji-ncc.tech

明治大学中野キャンパスで活動するNakano Computer Club(NCC)が開催した,

Year End’s Hack Dayの中で行われたCTFが常設化したもの

MAGURO β

https://score.maguro.run

サイバーディフェンス研究所が運営するCTF


海外サイト

初心者向け

picoctf

picoctf 2014

https://2014.picoctf.com

ゲームモードでやると面倒なので問題を解くときは下の方にある

Switch to the basic problem viewer

を押すのがおすすめ.

picoctf 2013

https://2013.picoctf.com

pwn専門

pwnable.kr

http://pwnable.kr

pwnable.tw

https://pwnable.tw

Exploit Exercises

https://exploit-exercises.com

Web専門

Wargame.kr

http://wargame.kr

Stereotyped Challenges

https://chall.stypr.com

Web, Pwn

CODESHELL.KR

http://codeshell.kr

Reversing専門

Reversing.Kr

http://reversing.kr

Embedded Security CTF

https://microcorruption.com

総合

LSE CTF

http://ctf.lse.epita.fr

PwnerRank

https://www.pwnerrank.com

Solve Me

http://solveme.kr

Root Me

http://www.root-me.org

RingZer0 Team Online CTF

http://ringzer0team.com

OverTheWire

http://overthewire.org

CTF All The Time

https://ctfs.me

canyoupwn.me

https://ctf.canyoupwn.me

Тренировки

http://training.hackerdom.ru

Security Shepherd

https://ec2-35-162-97-34.us-west-2.compute.amazonaws.com/login.jsp

UOSEC CTF

https://ctf.uosec.info

CTFLearn

https://ctflearn.com

Net-Force

https://www.net-force.nl

::SuNiNaTaS::

http://suninatas.com

NewbieContest

https://www.newbiecontest.org/index.php

CanYouHack.It

http://canyouhack.it

EnigmaGroup

http://www.enigmagroup.org

W3Challs

https://w3challs.com/

Challenge Land

http://challengeland.co

Valhalla

http://halls-of-valhalla.org/beta/challenges

HACKTHIS!!

https://www.hackthis.co.uk

HellBound Hackers

https://www.hellboundhackers.org