ํ์ ์ ๊ธ๋ง(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