μƒˆμ†Œμ‹

Game/Bee-box

[Bee-box] SQL μΈμ μ…˜ - Login Form/Hero

  • -
λ°˜μ‘ν˜•

 μ΄λ²ˆ ν¬μŠ€νŒ…μ€ SQLμΈμ μ…˜  Login Form/Hero 방법 μž…λ‹ˆλ‹€.

SQLμΈμ μ…˜μ΄ 곡격 κ°œμš”λ„λŠ” 거의 λΉ„μŠ·ν•˜μ§€λ§Œ μ—¬λŸ¬ μ’…λ₯˜κ°€ μžˆμœΌλ‹ˆ 잘 μˆ™μ§€ν•˜μ—¬ μ‹€μŠ΅ν•˜λ„λ‘ ν•©μ‹œλ‹€~

 

μ‹€μŠ΅ν•˜λŠ” λͺ¨λ“  곡격은 μ‹€μ œλ‘œ μ‚¬μš©ν•˜μ‹œλ©΄ μ•ˆλ©λ‹ˆλ‹€.

ν—ˆμš©λ°›μ§€ μ•Šμ€ μ„œλΉ„μŠ€ λŒ€μƒμ— 해킹을 μ‹œλ„ν•˜λŠ” 행동은 κΈˆμ§€ν•˜λ©°,

λͺ¨λ“  법적 μ±…μž„μ€ μ‚¬μš©μžμ—κ²Œ μžˆλŠ” 것을 λͺ…μ‹¬ν•΄μ£Όμ„Έμš”.

 

μ„€λͺ…에 μ•žμ„œ, μ•žμœΌλ‘œ ν•˜λŠ” SQL μΈμ μ…˜μ˜ 일뢀 곡격듀은 λŒ€μ‘λ°©μ•ˆμ„ λ”°λ‘œ ν¬μŠ€νŒ… ν•˜μ§€ μ•Šμ„κ²Œμš”. 

λŒ€λΆ€λΆ„ 같은 μ„€λͺ…이기 λ•Œλ¬Έμ— μƒλž΅ν•˜κ³ , λ‹€λ₯Έ 경우 κΈ°μž¬ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 


λ‚œμ΄λ„ ν•˜

 

 

SQL Login Form/Hero λ₯Ό 선택!

 

sqli_3.php νŽ˜μ΄μ§€λŠ” 'hero'그룹에 μ†ν•˜λŠ” μ‚¬μš©μžλ“€μ΄ λ‘œκ·ΈμΈν•˜λ©΄,

λ‘œκ·ΈμΈν•œ μ‚¬μš©μžμ˜ λΉ„λ°€λ²ˆν˜Έ 힌트λ₯Ό 좜λ ₯ν•˜λŠ” νŽ˜μ΄μ§€μ΄λ‹€.

 

 

 

 

λ¨Όμ € μ•„λ¬΄κ±°λ‚˜ μž…λ ₯ν•΄λ΄€λ”λ‹ˆ, 잘λͺ»λœ 자격이라고 좜λ ₯이 λ˜μ—ˆλ‹€.

 

 

 

login 폼에 '(μž‘μ€λ”°μ˜΄ν‘œ) λ₯Ό μž…λ ₯ν•˜μ—¬ SQL μΈμ μ…˜ 취약점이 μžˆλŠ”μ§€λ₯Ό νŒŒμ•…ν•΄λ³΄μ•˜λ‹€. 

SQL 였λ₯˜ 메세지가 좜λ ₯λ˜μ—ˆλ‹€. 즉 SQL μΈμ μ…˜ 취약점이  μžˆλ‹€λŠ” 것이닀. 

λ˜ν•œ mysqlμ΄λΌλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„ μ’…λ₯˜κΉŒμ§€ μ•Œκ²Œ λ˜μ—ˆλ‹€.

 

(password 폼에 '을 μž…λ ₯해도 같은 κ²°κ³Όκ°€ λ‚˜μ˜€μ§€λ§Œ, λ‘˜λ‹€ 'λ₯Ό 찍으면 잘λͺ»λœ μžκ²©μ΄λΌλŠ” μ—λŸ¬)

 

 

 

λͺ¨λ“  κ²°κ³Όλ₯Ό 참으둜 λ§Œλ“€μ–΄ μ£ΌλŠ” 'or 1=1# 쿼리λ₯Ό μž…λ ₯ν–ˆλ”λ‹ˆ 

SQLμΈμ μ…˜μ΄ κ·Έλƒ₯ λ°”λ‘œ μ„±κ³΅λ˜λ²„λ Έλ‹€. (맀우 μ·¨μ•½ν•œ νŽ˜μ΄μ§€ 같은 κ²½μš°μž„)

 

'Neo'λΌλŠ” μ‚¬μš©μžλ‘œ 둜그인이 μ„±κ³΅ν•˜μ˜€κ³  λ’€μ—λŠ” ν•΄λ‹Ή μ‚¬μš©μžμ˜ λΉ„λ°€λ²ˆν˜Έμ— 힌트λ₯Ό μ•Œλ €μ£ΌλŠ” λ“― ν•˜λ‹€.

 

이 νŽ˜μ΄μ§€λŠ” λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ 둜그인이 λ˜μ—ˆλŠ”λ°, μ΄λŠ” λ³€μˆ˜λ₯Ό λ”°λ‘œ μž…λ ₯받지 μ•Šκ³  ANDμ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬

ν•œ μ€„λ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 아이디와 λΉ„λ°€λ²ˆν˜Έλ₯Ό 좜λ ₯ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•˜λŠ” 취약점이닀.

 

 

sqli_3.php νŽ˜μ΄μ§€ μ†ŒμŠ€μ½”λ“œλ₯Ό 확인해보면

 

 

 

μ˜ˆμƒλŒ€λ‘œ 쿼리 ν•œ μ€„λ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 아이디, λΉ„λ°€λ²ˆν˜Έλ₯Ό 좜λ ₯ν•œλ‹€.

 

'login'λ³€μˆ˜μ— 쿼리λ₯Ό μ£Όμž…ν•˜λ©΄ 

 

 

 

μ΄λŸ°μ‹μœΌλ‘œ λ˜λŠ”λ°, 

쿼리λ₯Ό μ‹€ν–‰ν•  λ•Œ AND μ—°μ‚°μžκ°€  OR μ—°μ‚°μžλ³΄λ‹€ μš°μ„  μˆœμœ„κ°€ λ†’μ•„μ„œ ANDλ₯Ό λ¨Όμ € μˆ˜ν–‰ν•˜κ²Œ λœλ‹€.

즉 뒀에 passwordλ¨Όμ € μˆ˜ν–‰ > λ§ˆμ§€λ§‰μœΌλ‘œ μˆ˜ν–‰λ˜λŠ”κ²Œ or λ‚΄κ°€ μ“΄ μΏΌλ¦¬μ΄λ―€λ‘œ λ‚΄ 쿼리가 먹힘

 

 

만일 'or 1=1#μ΄λΌλŠ” 쿼리λ₯Ό μž…λ ₯ν•œλ‹€λ©΄,

OR연산은 항상 κ²°κ³Όκ°€ 참이 λ˜μ–΄ λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•˜μ§€ μ•Šμ•„도 'heroes'ν…Œμ΄λΈ”μ— μ €μž₯된 μ‚¬μš©μžλ‘œ 둜그인이 λ˜λŠ” 것이닀.

 

κ·ΈλŸ¬λ‚˜ neo 이외에 μ‚¬μš©μžλ‘œλ„ 둜그인이 κ°€λŠ₯ν•΄μ•Όν•˜λŠ”λ°, (λ§‰νž μœ„ν—˜ o)

그러렀면 아이디λ₯Ό μ•Œμ•„μ•Ό ν•œλ‹€.

 

 

 

putty둜 table을 확인해본 κ²°κ³Ό λ‹€λ₯Έ 이름은 'alice','thor', ... λ“± μžˆλŠ”λ°,

이 ν…Œμ΄λΈ”μ„ λ³Ό 수 μ—†λ‹€ κ°€μ •ν•˜κ³  SQLμΈμ μ…˜μ„ 톡해 μ•Œμ•„λ³Έλ‹€.

 

 

 

처음 컬럼 수λ₯Ό λ§žμΆ°μ•Ό union base SQL μΈμ μ…˜μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ, λ§žμΆ°λ³΄μ•˜λ‹€. 1,2,3,4 μ­‰μ­‰ ν•΄λ‚˜κ°€λ©΄ 됨.

 

 

 

컬럼 μˆ˜κ°€ 4개일 λ•Œ 좜λ ₯이 되고,  ν™•μΈν•΄λ³΄λ‹ˆ 2,4번 컬럼이 ν™”λ©΄μ—μ„œ 보이도둝 좜λ ₯λ˜λŠ” μ»¬λŸΌμ΄λ‹€.

 

이 μ»¬λŸΌμ„ μ΄μš©ν•˜μ—¬ SQL쿼리λ₯Ό λ§Œλ“€μ–΄μ„œ μž…λ ₯ν•΄λ³Έλ‹€.

 

 

 

 

μœ„ λ©”λͺ¨μž₯에 μž…λ ₯ν•œ κ²ƒμ²˜λŸΌ μ—¬λŸ¬ 방식을 톡해 μ‚¬μš©μžλ“€μ˜ 아이디λ₯Ό μ•Œ 수 있고,

id = 3, login = thor, password = Asgard λ“± μ‚¬μš©μžμ˜ 정보λ₯Ό μ•Œ 수 μžˆμ—ˆλ‹€.

 

SQLμΈμ μ…˜ 성곡

 

 

ꡳ이 passwordλ₯Ό μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„

 

 

이와 같은 쿼리문을 μ΄μš©ν•΄μ„œ aliceκ³„μ •μœΌλ‘œ λ‘œκ·ΈμΈμ„ 성곡할 수 μžˆλ‹€.

 

 

 

 

SQLμΈμ μ…˜μ˜ λŒ€μ‘λ°©λ²•μ€ μœ„μ— κΈ°μž¬ν–ˆλ“―μ΄, 전에 올렸던 방법듀과 μœ μ‚¬ν•˜κΈ° λ•Œλ¬Έμ— μƒλž΅ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

--> php κΈ°λ³Έμ œκ³΅ν•¨μˆ˜ "mysql_real_escape_string()" μ‚¬μš©

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.