μΉ λ³΄μ - PHP λ§€μ§ ν΄μ(Magic Hashes) μ·¨μ½μ
νμ μ κΈλ§(Type Juggling)
PHPλ νμ
κ°λκ° μ½νκΈ° λλ¬Έμ μν©μ λ°λΌ νμ
μ΄ λμ μΌλ‘ λ³νκ² λλλ° μ΄λ₯Ό νμ
μ κΈλ§(Type Juggling)μ΄λΌκ³ νλ€.
νμ μΊμ€ν κ³Ό λ€λ₯Έ μ μ νλ‘κ·Έλλ¨Έκ° λͺ μμ μΌλ‘ μ§μ ex) (float) a νλ κ²μ νμ μΊμ€ν μ΄κ³ ,
νλ‘κ·Έλλ° μΈμ΄κ° μλμ μΌλ‘ λ³νν΄μ£Όλ κ²μ νμ μ κΈλ§μ΄λΌκ³ νλ κ² κ°λ€.
php > var_dump(5 * "2");
int(10)
μ μν(int) 5μ λ¬Έμν(string) 2λ₯Ό μ°μ°μν€λ©΄ μ μν(int) 10μ΄ λ°νλλ€.
λ§μ°¬κ°μ§λ‘ $a == $bλ₯Ό λΉκ΅ν λ λν νμ μ κΈλ§μ κ±°μΉκ² λλ€.
php > var_dump('1234'==1234);
bool(true)
php > var_dump("123" == "123.0");
bool(true)
λ¬Έμμ΄(string) 123κ³Ό λ¬Έμμ΄(string) 123.0μ λΉκ΅ κ²°κ³Όλ λλκ²λ κ°λ€κ³ λμ¨λ€.
λ§€μ§ ν΄μ(Magic Hashes)
νλ‘κ·Έλλ° μΈμ΄μμ μ§μλ₯Ό ννν λμλ ex) 1*10^2 = 1e2 μ΄λ° μμΌλ‘ μνλ²³ eλ₯Ό μ¬μ©νλ€.
ν΄μ ν¨μλ₯Ό κ±°μΉκ² λλ©΄μ μ΄λ° μ§μννμ²λΌ 보μ΄λ κ²½μ°κ° μλλ° μ΄λ₯Ό λ§€μ§ ν΄μ(Magic Hashes)λΌκ³ νλ€.
php > var_dump(md5("240610708"));
string(32) "0e462097431906509019562988736854"
λ§€μ° λλ¬Όκ² 0e{μ«μ} ννλ‘ μμνλ λ¬Έμμ΄μ΄λ€.
μ¬κΈ°μ λ¬Έμ κ° λ°μνκ² λλ€.
λ§μ½ md5λ₯Ό κ±°μΉ ν¨μ€μλκ° 0e{μ«μ} ννκ° λμμΌλ©°, μ¬μ©μλ‘ λΆν° λΉλ°λ²νΈλ₯Ό μ λ ₯λ°μ ν΄μλ₯Ό κ±°μΉ κ² λ 0e{μ«μ} ννμΌ κ²½μ°
μλμ μμ²λΌ == (Equal)λ₯Ό μ¬μ©νλ©΄ νμ μ κΈλ§μ κ±°μΉκ² λλ©΄μ λ μμ κ²°κ³Όλ 0κ³Ό 0μ΄λ―λ‘
(0e{μ«μ}μ κ²°κ³Όλ μΈμ λ 0 [0*10^μ«μ = 0])
μ°Έμ΄ λμ€κ² λλ€.
php > var_dump(md5("240610708") == md5("QNKCDZO"));
bool(true)
λμ² λ°©λ²
νμ μ κΈλ§μ κ±°μΉμ§ μλ μ¦ κ°μ νμ μΈ stringκ³Ό stringμΌλ‘ κ³μ°νλ === (Identical)μ μ¬μ©νλ λ°©λ²μ΄ μλ€.
php > var_dump(md5("240610708") === md5("QNKCDZO"));
bool(false)
ν΄μ ν¨μ μ’ λ₯λ³ λ§€μ§ ν΄μ(Magic Hashes) λͺ¨μ
μλ κΉνλΈ μ£Όμλ‘ κ°λ©΄ MD5, SHA-1, SHA-224, SHA-256 λ± λ€μν ν΄μ ν¨μλ€μ λ§€μ§ ν΄μλ₯Ό νμΈν μ μλ€.
https://github.com/spaze/hashes
GitHub - spaze/hashes: Magic hashes – PHP hash "collisions"
Magic hashes – PHP hash "collisions". Contribute to spaze/hashes development by creating an account on GitHub.
github.com
[MD5]
240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
...
[sha256]
34250003024812:0e46289032038065916139621039085883773413820991920706299695051332
TyNOQHUS:0e66298694359207596086558843543959518835691168370379069085300385
CGq'v]`1:0e24075800390395003020016330244669256332225005475416462877606139
\}Fr@!-a:0e72388986848908063143227157175161069826054332235509517153370253
|+ydg uahashcat:0e47232208479423947711758529407170319802038822455916807443812134
μΆμ² λ° μ°Έκ³ :
https://youtu.be/VCwiZ2dh17Q
https://www.tcpschool.com/php/php_basic_typeJuggling
μ½λ©κ΅μ‘ ν°μ¨νΌμ€μΏ¨
4μ°¨μ°μ νλͺ , μ½λ©κ΅μ‘, μννΈμ¨μ΄κ΅μ‘, μ½λ©κΈ°μ΄, SWμ½λ©, κΈ°μ΄μ½λ©λΆν° μλ° νμ΄μ¬ λ±
tcpschool.com
https://rootable.tistory.com/148
λ§€μ§ν΄μ(Magic Hashes) μ·¨μ½μ
* λ§€μ§ν΄μ(Magic Hashes)λ ? - λΉκ΅ μ°μ°μ ν λ Type Jugglingμ μ΄μ©νμ¬ μλ‘ λ€λ₯Έ κ°μ΄ κ°μ κ°μΌλ‘ μΈμλλλ‘ νλ νΉμν λμ - νμ κ°λ₯ν κ²μ΄ μλλΌ νΉμν κ²½μ°('0e'λ‘ μμνλ λ¬Έμμ΄μΌ
rootable.tistory.com
https://www.php.net/manual/en/language.operators.comparison.php