Litchiwaterの日記

備忘録として書いています。

CTFのWeb分野まとめ

Cross-Site Scripting(XSS)

SQL Injection

CSS Injection

Remote Code Execution(RCE)

Cross-Site Request Forgeries(CSRF)

Server-Side Template Injection(SSTI)

Server-Side Includes (SSI) Injection

Server-Side Request Forgery(SSRF)

XML External Entity(XXE)

Directory Traversal

Cache Poisoning

Insecure Deserialization

PHP Generic Gadget Chains

Regular expression Denial of Service(ReDoS)

Side Channel Attack

アクセス制御の不備

polyglot

言語仕様系

文字入力チェックのバイパス

Tools

tips

RSA暗号

RSA暗号とは

 1977年にリベスト(Rivest)、シャミア(Shamir)、エーデルマン(Adleman)が提唱した。公開鍵暗号の1つ。

 

RSA暗号を理解するための数学知識

最大公約数 ユークリッドの互除法 拡張ユークリッドの互除法 整数の合同 合同式の逆元 既約剰余類 オイラー関数 フェルマーの小定理 

 

CTFから見たRSA暗号への攻撃方法

Wiener's Attack 

eの値が大きい時に成立

Boneh-Durfee's low private exponent Attack

eの値が小さい時に成立

weak rsa

Common Modulus Attack

同一の平文を異なるeで暗号化した暗号文があるときに成立。

Common Private Exponent Attack

Franklin-Reiter Related Message Attack

暗号文c1、c2を持ち、それに対する平文がm1、m2の上位ビットが共通するとき成立。

このとき

 m2=a*m1 + b が分かり、・・・

Coppersmith's Attack

素数pの上位ビットまたは下位ビットが分かる時に成立。

秘密鍵dの下位ビットが分かるとき成立。

平文mの上位ビットまたは下位ビットが分かる時に成立。

Coppersmith's short pad Attack
Partial-key exposure Attack / High-bit known Attack

 Haste'd Broadcast Attack

同一の平文を異なるnで暗号化した暗号文があるときに成立。中国人剰余定理を用いることで平文mが求まる。

LSB Decryption Oracle Attack

任意の暗号文を復号した結果の偶奇(下位1bit)が分かるときに成立。

mの偶奇が分かるので、二分探索によってmが求まる。

 RSA暗号における各値の一般的な値

e=65537(0x10001) or 3

これはバイナリ・ユークリッドの互除法を用いて高速化しやすいために選ばれている。

N

2048ビット以上。512ビットぐらいだとECMを利用して1分程度で素因数分解できるらしい。

 

 

 

Tool

pythonの各種モジュール

factordb.com

素数のデータベース(素因数分解してくれる!)
http://www.factordb.com/


参考文献

Wikipedia:RSA暗号

https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%AD%A6%E7%9A%84%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

暗号技術のすべて:IPUSIRON(著)

暗号技術入門:結城浩(著)

「CTF Crypto」

https://raintrees.net/projects/a-painter-and-a-black-cat/wiki/CTF_Crypto#RSA%E6%9A%97%E5%8F%B7

公開鍵暗号

公開鍵暗号とは

 秘密鍵を事前に共有する必要ない暗号。このため通信先が誰であっても暗号化を行える。これが最大のメリット。

 暗号化するには、相手が公開している鍵を使用して行う。その後、その暗号を相手が持つ秘密鍵で復号化する。

 

公開鍵が満たす性質

 正当性

 秘匿性

公開鍵暗号に対する攻撃

公開鍵のすり替え

 そもそも通信先が盗聴者になれば、復号化も容易である。なので通信内容の送信先を変えてしまうことを用いた攻撃。

 この攻撃の対策として、公開鍵暗号基盤PKI)と呼ばれるユーザーのに対応する公開鍵であることを保証する証明書を発行する機関がある。これにより、公開鍵の正当性が検証できる。

全数探索攻撃

 公開鍵暗号は、その性質上鍵となる可能性のある数kが2^kより少なくなるので、有効な場合が存在する。例えば、RSA暗号では、公開鍵Nの素因数p,kが秘密鍵となる。そのためp,kは素数という条件がある。また現実的には、p,kは十分大きな数でなくてはならないので、該当する素数はより少なくなる。

 

参考文献

暗号技術のすべて:IPUSIRON(著)

暗号技術入門:結城浩(著)

Merkle-Damgard構造

Merkle-Damgard構造とは

ハッシュ関数ハッシュ値を生成する際に用いられる構造。いくつかの固定長のハッシュ値を結合して、より大きな固定長を出力する。SHA-1/SHA-2 family MD4/MD5で利用されている。

わかりやすいスライド

https://www.slideshare.net/trmr105/katagaitai-ctf-5-crypto

スライドP35 参照

 

CTFとして

length-extension(レングスエクステンション)攻撃やgenerate-and-paste(ジェネレート・アンド・ペースト)攻撃が可能


参考文献

Wikipedia:暗号学的ハッシュ関数

https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%AD%A6%E7%9A%84%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

MD4

MD4とは

 ハッシュ関数の内の1つ。出力するハッシュ値は128ビットになる。後続ののハッシュ関数の設計に大きな影響を与えた。(例:MD5やSHA-1など)衝突を見つける方法が、Dobbertinによって考案されたため、安全ではない。そのため、他のハッシュ関数の使用が推奨されている。Merkle-Damgard構造を利用している。

Tool

「CyberChef」:   https://gchq.github.io/CyberChef/

関連したctf

 

参考文献

暗号技術のすべて:IPUSIRON(著)

暗号技術入門:結城浩(著)

シーザー暗号

 

シーザー暗号とは

 すでにわかりやすい解説があるので、そちらを参照してください。

 https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7

tool

 ・様々な暗号化・復号化を行える神ツール

 「CyberChef」:   https://gchq.github.io/CyberChef/

     ・特化した物

  :https://rot13.com/

関連したctf

https://ctf.cpaw.site/questions.php?qnum=6

参考文献

暗号技術のすべて:IPUSIRON(著)

暗号技術入門:結城浩(著)

 

//パンくずリスト用