μƒˆμ†Œμ‹

Game/Bee-box

[Bee-box] SQL μΈμ μ…˜ - GET/Select

  • -
λ°˜μ‘ν˜•

이번 ν¬μŠ€νŒ…μ€ SQLμΈμ μ…˜  GET/Select μž…λ‹ˆλ‹€.

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

 

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

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

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

 


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

 

 

 

GET/Select λ₯Ό μ‹€μŠ΅ν•΄λ³΄λ„λ‘ ν•΄μš”!

 

 

 

 

 

'sqli_2.php' νŽ˜μ΄μ§€λŠ” λ“œλ‘­λ‹€μš΄ 메뉴λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ νƒν•œ μ˜ν™”μ˜ 정보λ₯Ό ν‘œλ‘œ λ³΄μ—¬μ£Όλ„€μš”.

λ˜ν•œ GET λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ²­ν•˜κΈ° λ•Œλ¬Έμ— URL상에 λ³€μˆ˜κ°€ λ³΄μž…λ‹ˆλ‹€.

 

 

 

 

 

확인을 ν•΄λ³΄λ‹ˆ λ“œλ‘­λ‹€μš΄ λ©”λ‰΄μ˜ λ³€μˆ˜λͺ…은 'movie'이고 μˆ«μžν˜•μ„ μž…λ ₯ κ°’μœΌλ‘œ λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

************ μ§šκ³  λ„˜μ–΄κ°€κΈ° ************

1. μˆ«μžν˜•λ§Œ μž…λ ₯ν•˜λŠ” λ³€μˆ˜μ— SQLμΈμ μ…˜μ„ μ‹œλ„ν•  λ•ŒλŠ” SQLꡬ문만 ν•„μš”ν•©λ‹ˆλ‹€.

2. μž‘μ€ λ”°μ˜΄ν‘œλ₯Ό μž…λ ₯ν•˜λ©΄ SQL ꡬ문 였λ₯˜κ°€ λ‚©λ‹ˆλ‹€.

3. 주석 λ¬ΈμžλŠ” #을 μ‚¬μš©ν•˜κΈ΄ ν•˜μ§€λ§Œ, 주석을 μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ 곡격이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

 

URLμ—μ„œ 확인할 수 μžˆλŠ” movie λ³€μˆ˜λ‘œ SQLμΈμ μ…˜μ„ μ‹œλ„ν•˜λŠ”λ°,

κΈ°μ‘΄ 쿼리와 κ²°ν•©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ 정보λ₯Ό 좜λ ₯ν•˜λŠ” UNION SELECT ꡬ문을 μ‚¬μš© ν•΄μ•Όν•œλ‹€.

 

μ΄λ•Œ 주의 ν•  것은 μ‹€μ œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ₯Ό λ„£μœΌλ©΄ νŽ˜μ΄μ§€μ—λŠ” κ·Έ 값에 ν•΄λ‹Ήν•˜λŠ” 데이터가 λ‚˜μ˜€λ―€λ‘œ,

movie λ³€μˆ˜μ—λŠ” μ—†λŠ” 데이터λ₯Ό 넣은 λ‹€μŒ SQL쿼리λ₯Ό μž…λ ₯ν•΄μ•Ό ν•œλ‹€. 

 

(ex : 0 union select 1,2,3,4,5,6,7 μ΄λŸ°μ‹μœΌλ‘œ 쿼리λ₯Ό λ„£μ—ˆλŠ”λ° 2에 ν•΄λ‹Ήν•˜λŠ” 데이터가 있으면

κ·Έ 데이터가 좜λ ₯될 수 μžˆμœΌλ‹ˆ, null둜 λ„£μ–΄μ£Όμ–΄μ•Ό ν•˜λŠ” 것)

 

 

 

 

 

μ΄λ ‡κ²Œ URL에 μ‘°μž‘ν•œ SQL 쿼리λ₯Ό μž…λ ₯ν•΄ μ£Όλ©΄

 

 

 

λ‹€μŒκ³Ό 같이 좜λ ₯λ˜μ–΄, λ°μ΄ν„°λ² μ΄μŠ€μ˜ 정보λ₯Ό μ•Œ 수 μžˆλ‹€.

 

ν…Œμ΄λΈ” λͺ…을 νŒŒμ•…ν•˜κΈ° μœ„ν•˜μ—¬ SQLꡬ문을 movie λ³€μˆ˜μ— μ‚½μž…ν•˜κ³  information_schema둜 λ°μ΄ν„°λ² μ΄μŠ€μ— μžˆλŠ” 

ν…Œμ΄λΈ”μ„ 확인 ν•΄λ³Έλ‹€.

 

 

쿼리 κ²°κ³Ό 

ν…Œμ΄λΈ” λͺ…κ³Ό κ΄€λ ¨λœ μ •λ³΄λŠ” μ•„λž˜μ™€ 같이 ν•˜λ‚˜λ§Œ λ‚˜μ˜¨λ‹€.

좜λ ₯ 값이 ν•œ μ€„λ§Œ λ‚˜μ˜€λŠ” νŽ˜μ΄μ§€λΌμ„œ 데이터 베이슀의 첫 번째 ν…Œμ΄λΈ”λ§Œ 좜λ ₯ν•œλ‹€.

 

 

 

λ”°λΌμ„œ MYSQL λ°μ΄ν„°λ² μ΄μŠ€μ— 기본적으둜 μžˆλŠ” 'mysql'κ³Ό 'information_schema'λŠ” ν¬ν•¨ν•˜μ§€ μ•Šκ³ 

ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆ, ν…Œμ΄λΈ” λͺ…, 컬럼 λͺ… 을 ν™•μΈν•˜λŠ” 쿼리 ꡬ문을 μž…λ ₯ν•΄μ€€λ‹€.

 

<< 쿼리 문 >>

0 union select null,table_schema,table_name,column_name,null,null,null from information_schema.columns where table_schema!='mysql' and table_schema!='information_schema'

 

 

 

μΈμ μ…˜ κ²°κ³Ό

mysql, information_schemaλ₯Ό μ œμ™Έν•˜κ³  κ°€μž₯ μƒμœ„μ— μžˆλŠ” μŠ€ν‚€λ§ˆ (bWAPP),

bWAPP ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆμ—μ„œ κ°€μž₯ μƒμœ„μ— μžˆλŠ” ν…Œμ΄λΈ” (blog)

blog ν…Œμ΄λΈ”μ—μ„œ κ°€μž₯ μƒμœ„μ— μžˆλŠ” 컬럼λͺ… (id)  λΌλŠ” 정보λ₯Ό νšλ“ ν•  수 μžˆλ‹€.

 

 

μΈμ μ…˜ 성곡

 

 

 

 

λŒ€μ‘ λ°©μ•ˆ

 

 

'λ‚œμ΄λ„ ν•˜' μ—μ„œλŠ” movieλ³€μˆ˜μ— 'μž‘μ€ λ”°μ˜΄ν‘œ'λ‚˜ 'UNION SELECT' ꡬ문을 μž…λ ₯ν•˜λ©΄,

μ•„λž˜μ™€ 같이 'SQL ꡬ문 였λ₯˜ λ©”μ‹œμ§€'κ°€ 좜λ ₯λ˜μ—ˆλ‹€.

 

 

 

 

ν•˜μ§€λ§Œ 'λ‚œμ΄λ„ 상' μ—μ„œλŠ” movie λ³€μˆ˜μ—  'μž‘μ€ λ”°μ˜΄ν‘œ'λ‚˜ 'UNION SELECT' ꡬ문을 μž…λ ₯ν•˜μ—¬λ„

SQL ꡬ문 였λ₯˜ λ©”μ‹œμ§€κ°€ μ•„λ‹Œ, μ˜ν™”λ₯Ό 찾을 수 μ—†λ‹€λŠ” λ©”μ‹œμ§€κ°€ 좜λ ₯λœλ‹€.

 

즉 SQLμΈμ μ…˜μ΄ ν†΅ν•˜μ§€ μ•ŠλŠ” 것이닀. 

 

 

 

 

그리고 URL을 μ‚΄νŽ΄λ³΄λ©΄ 'λ‚œμ΄λ„ ν•˜'μ™€λŠ” λ‹€λ₯΄κ²Œ sqli_2.php νŽ˜μ΄μ§€κ°€ μ•„λ‹Œ "sqli_2-ps.php" νŽ˜μ΄μ§€μ΄λ‹€.

 

 

 

Putty둜 μ ‘μ†ν•˜μ—¬ μ½”λ“œλ₯Ό μ‚΄νŽ΄ λ³΄μ•˜λ”λ‹ˆ

sqli_2-ps.php νŽ˜μ΄μ§€μ˜ μ†ŒμŠ€ μ½”λ“œμ—λŠ” νŠΉλ³„ν•œ 우회 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  SQL 쿼리λ₯Ό ν˜ΈμΆœν•œλ‹€.

 

 

sqli_2-ps.phpμ½”λ“œ

 

μ•„λž˜ μ½”λ“œλ„ ν™•μΈν•΄λ³΄μž

 

 

sqli_13-ps.phpμ½”λ“œ

 

 

 

λ¨Όμ €, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ°€μ Έμ˜¨ λ‚΄μš©μ„ 'fetch_object' ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체둜 μƒμ„±ν•˜λŠ” 것을 μ•Œ 수 μžˆλ‹€. (μ•„λž˜μ‚¬μ§„μ°Έκ³ )

 

** php fetch_object() ν•¨μˆ˜μ— λŒ€ν•œ μ„€λͺ…μ΄λ‹ˆ, μ•„λž˜ μ£Όμ†Œ μ°Έκ³ ν•΄μ£Όμ„Έμš” **

https://www.w3schools.com/php/func_mysqli_fetch_object.asp

 

 

 

 

 

 

(μ•„λž˜ μ‚¬μ§„μ˜) μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ movie λ³€μˆ˜μ— μž…λ ₯ν•œ 숫자 값이 'id' λ³€μˆ˜μ— λŒ€μž…λœλ‹€. 

id λ³€μˆ˜λŠ” 'recordset'에 μ €μž₯된 λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μš©μ˜ μˆœμ„œ 번호λ₯Ό λœ»ν•˜λŠ”λ°, 'bind_param' ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ“€μ„ 뢈러였고 'execute' ν•¨μˆ˜λ‘œ 쿼리λ₯Ό μ‹€ν–‰ν•œλ‹€.

 

그리고 λ‚˜μ„œ 'bind_result' ν•¨μˆ˜λ‘œ 각 λ³€μˆ˜λ₯Ό μ—°κ²°ν•˜κ³  'store_result' ν•¨μˆ˜λ‘œ 쿼리 κ²°κ³Όλ₯Ό μ €μž₯ν•˜λŠ” 것이닀. 

 

 

주석뢀뢄은 μ•ˆλ³΄μ…”λ„ λ©λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ sqli_2-ps.php νŽ˜μ΄μ§€λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μΉΌλŸΌμ„ κ°œλ³„λ‘œ ν˜ΈμΆœν•˜κ³  μ—°κ²°ν•˜λŠ” 방식을 μ‚¬μš©ν•˜μ—¬

SQLμΈμ μ…˜μ„ λŒ€μ‘ν•˜λŠ” 것이닀.

 

 

+ μ°Έκ³  ν•˜μ‹€ 뢄듀은 μ•„λž˜ νŽΌμ³μ„œ ν™•μΈν•΄μ£Όμ„Έμš”. 

더보기

개인적으둜 μ €λŠ” bee-box 책을 보며 곡뢀λ₯Ό 해도 λŒ€μ‘λ°©μ•ˆ 뢀뢄이 μ œλŒ€λ‘œ 이해가 μ•ˆλ˜λ”λΌκ΅¬μš”,

κ·Έλž˜μ„œ λΉ„μŠ·ν•œ λŠλ‚ŒμœΌλ‘œ μ΄ν•΄ν–ˆλŠ”λ° 100% 정닡은 아닐 수 μžˆμœΌλ‹ˆ μ°Έκ³ ν•΄μ£Όμ‹œκ³ 

λ‹€λ₯Έλ‚΄μš©μ΄(였λ₯˜) μžˆλ‹€λ©΄ λŒ“κΈ€ λ‚¨κ²¨μ£Όμ„Έμš”!

 

μ €λŠ” 일단 μœ„ λŒ€μ‘λ°©μ•ˆμ„ PreparedStatement 와 λΉ„μŠ·ν•œ κ°œλ…μœΌλ‘œ μ΄ν•΄ν–ˆλŠ”λ°μš”,

 μ•„λž˜ μ£Όμ†Œλ‘œ κ°œλ…μ„ μ΄ν•΄ν•΄μ£Όμ‹œλ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€. μ„€λͺ…이 μž˜λ˜μ–΄μžˆμ–΄μ„œμš”.

https://qastack.kr/programming/3271249/difference-between-statement-and-preparedstatement

 

 JAVAμ—μ„œ μ‚¬μš©λ˜λŠ” SQL을 μ‹€ν–‰ν•  수 μžˆλŠ” 객체라고 생각 ν•˜μ‹œλ©΄ 될 것 같은데, 

Statement 와 PreparedStatement 두가지가 λ³΄μ•ˆμ  μΈ‘λ©΄κ³Ό 속도 μΈ‘λ©΄μ—μ„œλ„ 차이가 μžˆλ”λΌκ³ μš”,

 

Statement 보닀 PreparedStatementλ₯Ό μ‚¬μš©ν•˜μ‹œλŠ” 것이 λ³΄μ•ˆμΈ‘λ©΄μ—μ„œ sqlμΈμ μ…˜μ„ 막을 수 μžˆμ–΄μ„œ, 더 κ°•ν•˜λ‹€κ³  λ³Ό 수 μžˆλŠ”λ°μš”.

SQL을 μ‹€ν–‰ν•˜λŠ” κ°μ²΄λΌλŠ” μ μ—μ„œ μ•½κ°„ λΉ„μŠ·ν•œ 역할을 ν•œλ‹€κ³  μ €λŠ” μ΄ν•΄ν–ˆμŠ΅λ‹ˆλ‹€.

 

 μ•„λž˜ μ£Όμ†Œλ₯Ό λ§ˆμ§€λ§‰μœΌλ‘œ! 이해 ν•˜μ‹œλŠ”λ° 도움이 λ˜μ…¨μœΌλ©΄ μ’‹κ² λ„€μš” γ…Žγ…Ž

https://okky.kr/article/504647

 

 

 

 

 

 

 

λ‹€μŒ ν¬μŠ€νŒ…μ€ 'Post/select'λ°©μ‹μž…λ‹ˆλ‹€.

λ°˜μ‘ν˜•

'Game > Bee-box' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Bee-box] SQL μΈμ μ…˜ - AJAX/JSON/jQuery  (0) 2020.08.09
[Bee-box] SQL μΈμ μ…˜ - POST/Select  (0) 2020.07.31
[Bee-box] SQL μΈμ μ…˜ - POST/Search  (0) 2020.07.24
[Bee-box] SQL μΈμ μ…˜ - GET/Search  (0) 2020.07.24
Contents

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

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