SWLUG/μ›Ή ν•΄ν‚Ή

[Root me] File upload - Double extensions

waterproof 2023. 9. 30. 14:02

 

https://www.root-me.org/en/Challenges/Web-Server/File-upload-Double-extensions

 

Challenges/Web - Server : File upload - Double extensions [Root Me : Hacking and Information Security learning platform]

 

www.root-me.org


 

 

 

Statement

Your goal is to hack this photo galery by uploading PHP code.Retrieve the validation password in the file .passwd at the root of the application.

=> λͺ©ν‘œλŠ” PHP μ½”λ“œλ₯Ό μ—…λ‘œλ“œν•˜μ—¬ 이 사진 가러리λ₯Ό ν•΄ν‚Ήν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ£¨νŠΈμ— μžˆλŠ” .passwd νŒŒμΌμ—μ„œ validation password λ₯Ό κ²€μƒ‰ν•˜μ„Έμš”.

 

 

λ„΅! μ•Œκ² μŠ΅λ‹ˆλ‹€ ~

 

 

[Start the Challange] λ₯Ό 눌러 문제 풀이λ₯Ό μ‹œμž‘ν•œλ‹€.

 

 

 

 

초기 화면이닀.

 

 

 

이λͺ¨μ§€κ°€ μΉ΄ν…Œκ³ λ¦¬λ³„λ‘œ λΆ„λ₯˜λ˜μ–΄μžˆλ‹€.

 

 

 

 

μ—…λ‘œλ“œ κΈ°λŠ₯도 μžˆλ‹€!

 

 

 

λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” 사진을 μ—…λ‘œλ“œ ν•΄λ΄€λŠ”λ° (참고둜 μ˜ν™” 어바웃 νƒ€μž„μ˜ ν•œ μž₯면이닀. γ…Žγ…Ž)

 

크기가 λ„ˆλ¬΄ 크닀고 ν•œλ‹€. 

 

 

 

 

 

 

λ‚œ μ •λ³΄λ³΄ν˜Έν•™κ³Όλ‹ˆκΉŒ...

 

μ € jpg 파일이 μ‚¬μ΄μ¦ˆκ°€ μž‘μ•„λ³΄μ—¬μ„œ μ„ νƒν–ˆλŠ”λ° μ—…λ‘œλ“œλλ‹€.

 

μ—…λ‘œλ“œμ— μ„±κ³΅ν•˜λ©΄ 파일λͺ…, μ’…λ₯˜, μ‚¬μ΄μ¦ˆ, μ €μž₯ μž₯μ†Œλ₯Ό μ•Œλ €μ€€λ‹€.

 

μ €μž₯ μž₯μ†Œλ‘œ κ°€λ©΄ λ‚΄κ°€ 올린 이미지 νŒŒμΌμ„ λ³Ό 수 μžˆλ‹€.

 

 

 

 

참고둜 파일λͺ…을 "...jpg" 둜 λ°”κΏ”μ„œ μ—…λ‘œλ“œν•΄λ³΄μ•˜λŠ”λ°,

 

μ—…λ‘œλ“œκΉŒμ§€λŠ” λ˜λŠ”λ° μ €μž₯ μž₯μ†Œλ‘œ κ°€λ©΄ 403 Forbidden 이 λœ¬λ‹€.

 

 

 

 

μ•„κΉŒ Statement λ₯Ό λ– μ˜¬λ €λ³΄λ©΄

 

 

라고 ν–ˆλŠ”λ°, μ—¬κΈ°μ„œ κΆκΈˆν•œ 것 두 가지

 

Q1) "NB : only .gif, .jpeg and .png are accepted" λΌλŠ”λ° μ–΄λ–»κ²Œ php νŒŒμΌμ„ μ˜¬λ¦¬μ§€?

 

Q2) μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ£¨νŠΈμ— μžˆλŠ” .passwd νŒŒμΌμ€ μ–΄λ–»κ²Œ μ ‘κ·Όν•΄μ•Όν• κΉŒ?

 

 

 

 

 

μ—¬λŸ¬κ°€μ§€ 생각해보닀가 이 문제의 제λͺ©μ—μ„œλΌλ„ 힌트λ₯Ό 얻을 수 μžˆμ„κΉŒ ν•˜μ—¬ λ‹€μ‹œ λ– μ˜¬λ €λ΄€λŠ”λ° double extension (이쀑 ν™•μž₯자) μ΄μ—ˆλ‹€.

 

κ·Έλž˜μ„œ 올릴 수 μžˆλŠ” ν™•μž₯μžλŠ” .gif, .jpeg, .png둜 μ œν•œλ˜μ–΄ μžˆμ§€λ§Œ,

 

파일λͺ…에 "php"와 같은 λ‹€λ₯Έ ν™•μž₯자λͺ…을 ν¬ν•¨ν•˜μ—¬ μ—…λ‘œλ“œν•˜λ©΄ ν™œμš©ν•  수 μžˆμ§€ μ•Šμ„κΉŒ? ν•˜λŠ” 생각이 λ“€μ—ˆλ‹€.

 

 

 

 

 

 

 

 

txt 파일의 이름에 .phpλ₯Ό λ„£κ³  ν™•μž₯μžλŠ” μž„μ˜λ‘œ jpg 둜 λ°”κΎΈμ–΄μ„œ μ—…λ‘œλ“œν•΄λ³΄μ•˜λŠ”λ°

 

μ—…λ‘œλ“œ ν•  수 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ

 

 

 

ν…μŠ€νŠΈλ„ 읽을 수 μžˆμ—ˆλ‹€!

 

 

 

 

 

이전에 웹셸을 ν™œμš©ν•˜μ—¬ 문제λ₯Ό 풀어보렀 ν–ˆλ”λ‹ˆ '<' λ¬Έμžκ°€ 받아듀여지지 μ•Šμ•˜λ˜ 것이 μƒκ°λ‚˜μ„œ

 

'<>'κ°€ 인식이 λ˜λŠ”μ§€ κΆκΈˆν•΄ μ €λ ‡κ²Œ λ‚΄μš©μ„ λ°”κΏ”λ³΄μ•˜λ‹€.

 

 

 

였 < > λͺ¨λ‘ 인식이 λœλ‹€.

 

κ·ΈλŸ¬λ‹ˆκΉŒ, λˆ„λ½λœ κΈ€μž 없이 <body>~</body> μ‚¬μ΄μ˜ μ†ŒμŠ€ μ½”λ“œμ— 반영이 λœλ‹€.

 

php파일 + <> λͺ¨λ‘ 인식 κ°€λŠ₯함 => 웹셸을 ν™œμš©ν•΄ ν’€ 수 μžˆμ§€ μ•Šμ„κΉŒ? λΌλŠ” 생각이 λ“€μ—ˆλ‹€.

 

 

 

 

 

(κ·Έλƒ₯ μ—¬κΈ°μ„œλΆ€ν„΄ 적용이 λ˜λŠ”μ§€ ν…ŒμŠ€νŠΈ ν•΄λ³Έ λ‚΄μš©....)

 

 

 

 

파일 μ—…λ‘œλ“œ νŽ˜μ΄μ§€μ˜ μ†ŒμŠ€μ½”λ“œλ₯Ό λ³΅μ‚¬ν•΄μ„œ ν…ŒμŠ€νŠΈν•΄λ³΄λ„λ‘ ν•œλ‹€.

 

 

 

 

 

μ—…λ‘œλ“œλŠ” μ„±κ³΅ν–ˆκ³ 

 

파일이 μ €μž₯된 경둜둜 λ“€μ–΄κ°€μ£Όλ©΄,

 

 

 

μ΄λ ‡κ²Œ λ‚΄κ°€ λ³΅μ‚¬ν•œ μ½”λ“œκ°€ κ·ΈλŒ€λ‘œ 반영이 λ˜μ—ˆλ‹€.

 

 

 

 

"php μ½”λ“œλ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ£¨νŠΈμ— μžˆλŠ” .passwd νŒŒμΌμ—μ„œ validation password λ₯Ό 검색" ν•˜λΌκ³  ν–ˆμœΌλ‹ˆ

 

μ—…λ‘œλ“œν•  파일 μ•ˆμ— μ–΄λ–€ μ½”λ“œλ₯Ό λ„£μ–΄μ„œ .passwd 파일둜 이동할 수 μžˆλ„λ‘ ν•˜μž.

 

 

 

그런데 php μ½”λ“œμ— λŒ€ν•΄ 잘 λͺ°λΌμ„œ νŽ˜μ΄μ§€ 이동과 κ΄€λ ¨λœ php μ½”λ“œλ₯Ό μ°Ύμ•„λ³΄μ•˜λ‹€.

 

(μ°Έκ³ : https://tw-news.tistory.com/15)

 

[PHP] νŽ˜μ΄μ§€ 이동 방법

PHPμ—μ„œ νŽ˜μ΄μ§€ μ „ν™˜μ„ ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” 4가지 방법 1. μžλ°”μŠ€ν¬λ¦½νŠΈ Location.href 이용 echo ""; 2. μžλ°”μŠ€ν¬λ¦½νŠΈ Location.replace 이용echo ""; 3. Header 이용header("location: URL λ˜λŠ” 경둜"); 4. 메타

tw-news.tistory.com

 

 

 

 

이런 λ‚΄μš©μ„ μž‘μ„±ν•΄μ„œ νŒŒμΌμ„ λ§Œλ“€μ–΄μ£Όκ³  μ—…λ‘œλ“œν•œ λ’€ 

 

 

 

 

파일이 μ €μž₯된 μ£Όμ†Œ 링크λ₯Ό 눌러주면

 

 

 

 

http://challenge01.root-me.org/web-serveur/ch20/galerie/upload/.passwd 둜 이동은 ν•  수 μžˆμ—ˆμœΌλ‚˜ 

 

μ—¬μ „νžˆ 접근이 κΈˆμ§€λœ 것을 확인할 수 μžˆμ—ˆλ‹€.

 

 

 

 

 

더 이상 아이디어가 λ– μ˜€λ₯΄μ§€ μ•Šμ•„μ„œ μ—¬κΈ°μ„œλΆ€ν„° ꡬ글링을 톡해 문제 풀이λ₯Ό μ§„ν–‰ν–ˆλ‹€.

 

 

 


 

⭐  μ§€κΈˆκΉŒμ§€μ˜ 상황 정리 ⭐

 

 

μœ„μ—μ„œ ν–ˆλ˜ κ³ λ―Ό

 

 

슀슀둜 문제λ₯Ό ν’€μ–΄λ³΄λ©΄μ„œ μ΄λ ‡κ²Œ 두 가지 고민을 ν–ˆμ—ˆλŠ”λ°

 

첫 번째 μ˜λ¬Έμ μ€ 해결을 ν–ˆμ—ˆλ‹€. 

 

문제의 제λͺ©μΈ '이쀑 ν™•μž₯자'μ—μ„œ 힌트λ₯Ό μ–»μ–΄μ™€μ„œ ".php.jpg" 처럼 ν™•μž₯자λ₯Ό 두 번 μ‚¬μš©ν•˜λŠ” 파일 이름을 μž…λ ₯ν•΄μ„œ php νŒŒμΌμ„ μ—…λ‘œλ“œ ν•  수 μžˆμ—ˆλ‹€.

 

 

이제 두 번째 μ˜λ¬Έμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ꡬ글링을 ν•΄μ•Ό ν•˜λŠ” 상황이닀.

 

 

 


λ¨Όμ €, μ΄ λ¬Έμ œμ™€ κ΄€λ ¨λœ κ°œλ…μ„ μ•Œμ•„λ³΄κ² λ‹€.

(.passwd 파일의 경둜λ₯Ό μ•Œμ•„λ‚΄λŠ” 방법이 κΆκΈˆν•˜λ©΄ 더 λ°‘μœΌλ‘œ μŠ€ν¬λ‘€ν•˜λ©΄ λ©λ‹ˆλ‹€!)

 

 

 

[1] 파일 μ—…λ‘œλ“œ 취약점

 

 

κ²Œμ‹œνŒ λ“±μ—μ„œ 슀크립트(μ†Œν”„νŠΈμ›¨μ–΄μ— μ‹€ν–‰μ‹œν‚€λŠ” μ²˜λ¦¬ μ ˆμ°¨λ₯Ό λ¬Έμž(ν…μŠ€νŠΈ)둜 κΈ°μˆ ν•œ κ²ƒ. μΌμ’…μ˜ ν”„λ‘œκ·Έλž¨μ΄λΌκ³  ν•  μˆ˜ μžˆλ‹€.) 파일의 μ—…λ‘œλ“œμ— λŒ€ν•œ κ·œμ œκ°€ 없을 경우 이λ₯Ό μ•…μš©ν•œ 해컀에 μ˜ν•΄ μ•…μ„± 슀크립트 파일이 μˆ˜ν–‰λ  수 μžˆλŠ” λ³΄μ•ˆ 취악점. 첨뢀 파일 μ—…λ‘œλ“œλ₯Ό ν—ˆμš©ν•˜λŠ” ν™ˆ νŽ˜μ΄μ§€ κ²Œμ‹œνŒμ—μ„œ .php, .jsp λ“±μ˜ ν™•μž₯자 μ΄λ¦„μ˜ 슀크립트 파일의 μ—…λ‘œλ“œλ₯Ό ν—ˆμš©ν•  κ²½μš°μ— 해컀가 μ•…μ„± μ‹€ν–‰ ν”„λ‘œκ·Έλž¨μ„ μ—…λ‘œλ“œν•œ 후에 ν™ˆ νŽ˜μ΄μ§€ 접속 λ°©μ‹μœΌλ‘œ μ›κ²©μ—μ„œ μ„œλ²„μ»΄ν“¨ν„°μ˜ μ‹œμŠ€ν…œ 운영 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ λͺ¨λ“  κ²Œμ‹œνŒμ— λŒ€ν•΄ php, php3, asp, jsp, cgi, inc, pl λ“±μ˜ ν™•μž₯자λ₯Ό μ§€λ‹Œ 파일의 μ—…λ‘œλ“œλ₯Ό μ‹œλ„ν•˜μ—¬ μ—…λ‘œλ“œκ°€ 되면 취약점이 μžˆλŠ” 것이닀.


[넀이버 μ§€μ‹λ°±κ³Ό] νŒŒμΌ μ—…λ‘œλ“œ μ·¨μ•½μ  [File Upload Vulnerability, -θ„†εΌ±ι»ž] (ITμš©μ–΄μ‚¬μ „, ν•œκ΅­μ •λ³΄ν†΅μ‹ κΈ°μˆ ν˜‘νšŒ)

 

 

 

 

 

[2] μ›Ή μ…Έ

 

 

 

μ›Ή μ…Έ(web shell)은 μ—…λ‘œλ“œ μ·¨μ•½μ μ„ ν†΅ν•˜μ—¬ μ‹œμŠ€ν…œμ— λͺ…령을 λ‚΄λ¦΄ μˆ˜ μžˆλŠ” μ½”λ“œλ₯Ό λ§ν•œλ‹€. web shell은 κ°„λ‹¨ν•œ μ„œλ²„ μŠ€ν¬λ¦½νŠΈ (jsp, php, asp...)둜 λ§Œλ“œλŠ” λ°©λ²•μ΄ λ„λ¦¬ μ‚¬μš©λ˜λ©° μ΄ μŠ€ν¬λ¦½νŠΈλ“€μ€ μ›Ή μ„œλ²„μ˜ μ·¨μ•½μ μ„ ν†΅ν•΄ μ—…λ‘œλ“œλœλ‹€. μ›Ήμ…Έ μ„€μΉ˜ μ‹œ ν•΄μ»€λ“€μ€ λ³΄μ•ˆ μ‹œμŠ€ν…œμ„ ν”Όν•˜μ—¬ λ³„λ„μ˜ μΈμ¦ μ—†μ΄ μ‹œμŠ€ν…œμ— μ‰½κ²Œ μ ‘속 κ°€λŠ₯ν•˜λ‹€.

(웹이 μ„œλ²„μ—μ„œ κ΅¬λ™λ˜κ³  μžˆλ‹€ ν•˜μ—¬λ„ μ·¨μ•½μ μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ μˆ˜ν–‰λ˜μ§€ μ•ŠμœΌλ©°, λ§Œμ•½ μ—…λ‘œλ“œλ˜μ—ˆλ‹€ ν•˜λ”라도 μ‹€ν–‰ κΆŒν•œμ΄ μ—†μœΌλ©΄, μ‹€ν–‰μ΄ λ˜μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ μ·¨μ•½μ κ³Ό μ‹€ν–‰ κΆŒν•œμ΄ μ‘΄μž¬ν•  λ•ŒλŠ” μ„œλ²„ λ‚΄λΆ€μ— λͺ…령을 μˆ˜ν–‰ν•  μˆ˜ μžˆμœΌλ―€λ‘œ μΉ¨ν•΄ λ²”μœ„κ°€ λ„“μ–΄μ§ˆ μˆ˜ μžˆλ‹€.)

μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯된 μ‹œμŠ€ν…œ λͺ…λ Ήμ–΄λ₯Ό μ…Έμ— μ „λ‹¬ν•˜λŠ” κΈ°λŠ₯을 κ°€μ§€κ³  μžˆλ‹€.

 

 

좜처: μœ„ν‚€λ°±κ³Ό - μ›Ή μ…Έ

 

 

 

 

+ [3] Web Shell μ—…λ‘œλ“œ 방지 (λ³΄μ•ˆ)

 

 

 

1.μ—…λ‘œλ“œ: νŒŒμΌ μ—…λ‘œλ“œκ°€ λΆˆν•„μš”ν•  κ²½μš° μ—…λ‘œλ“œ κΈ°λŠ₯을 μ™„μ „νžˆ μ œκ±°ν•˜κ³  μ—…λ‘œλ“œκ°€ ν•„μš”ν•œ κ²½μš° ν™•μž₯자λ₯Ό μ œν•œν•œλ‹€. ν™•μž₯자λ₯Ό μ œν•œν•  μ‹œμ—λŠ” νŠΉμ • ν™•μž₯자λ₯Ό λ§‰λŠ” κ²ƒλ³΄λ‹€ νŠΉμ • ν™•μž₯자만 λ˜κ²Œ ν•˜λŠ” κ²ƒμ΄ λ” μ•ˆμ „ν•˜λ‹€. λ˜ν•œ txt.php κ°™μ€ μœ ν˜•μ˜ μ΄μ€‘ ν™•μž₯자 κ²€μ‚¬λ„ ν•΄μ•Ό ν•œλ‹€.

2.파일 μ—…λ‘œλ“œ 폴더 μ‹€ν–‰ μ œν•œ: μ›Ή μ„œλ²„ μ—…λ‘œλ“œ μ „μš© 폴더λ₯Ό λ§Œλ“€κ³  파일의 싀행을 μ œν•œν•œλ‹€.

 

 

좜처: μœ„ν‚€λ°±κ³Ό - μ›Ή μ…Έ

 

 

 

⭐정리⭐

 

 

.asp, .php, .jsp와 같은 ν™•μž₯μžλ“€μ€ μ„œλ²„ μΈ‘μ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ μž‘μ„±λœ νŒŒμΌλ“€μ΄λ‹€. μ΄λŸ¬ν•œ νŒŒμΌλ“€μ΄ μ„œλ²„μ— μ—…λ‘œλ“œλ˜λ©΄, ν•΄λ‹Ή 파일이 μ„œλ²„μ—μ„œ 싀행될 수 μžˆλ‹€. μ΄λŠ” λ³΄μ•ˆμƒμ˜ 문제λ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄, μ•…μ˜μ μΈ μ‚¬μš©μžκ°€ μ΄λŸ¬ν•œ ν™•μž₯자둜 μž‘μ„±λœ νŒŒμΌμ„ μ—…λ‘œλ“œν•œλ‹€λ©΄, ν•΄λ‹Ή νŒŒμΌμ€ μ„œλ²„μ—μ„œ 싀행될 수 있게 λ˜μ–΄ μ›Ή μ…Έ(web shell)의 역할을 ν•  수 μžˆλ‹€. μ›Ή 셸은 μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 톡해 μ„œλ²„μ— λͺ…령을 μ „μ†‘ν•˜κ³  μ‹€ν–‰ν•˜λŠ” λ„κ΅¬λ‘œμ„œ, 이λ₯Ό μ•…μš©ν•˜λ©΄ μ„œλ²„λ₯Ό μ œμ–΄ν•˜κ±°λ‚˜ μ€‘μš”ν•œ 정보λ₯Ό νƒˆμ·¨ν•  수 μžˆλ‹€.

λ”°λΌμ„œ λ³΄μ•ˆμ„ μœ„ν•΄ λŒ€λΆ€λΆ„μ˜ μ›Ή μ„œλ²„μ—μ„œλŠ” μ΄λŸ¬ν•œ ν™•μž₯μžλ“€μ„ μ—…λ‘œλ“œν•˜κ±°λ‚˜ μ‹€ν–‰ν•˜μ§€ λͺ»ν•˜λ„둝 λ§‰μ•„λ†“λŠ”λ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨ μ•…μ˜μ μΈ μ½”λ“œκ°€ μ„œλ²„μ— μ—…λ‘œλ“œλ˜μ–΄ μ‹€ν–‰λ˜λŠ” 것을 λ°©μ§€ν•˜κ³ , λ³΄μ•ˆμ„ κ°•ν™”ν•  수 μžˆλ‹€.

 

 

 

 


.passwd 파일의 λ‚΄μš©μ„ 좜λ ₯ν•˜λŠ” 방법

 

 

μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ μ‹œμŠ€ν…œ λͺ…령을 μ‹€ν–‰ν•˜λŠ” κΈ°λŠ₯을 가진 μ½”λ“œκ°€ μž‘μ„±λœ PHP νŒŒμΌμ„ μ—…λ‘œλ“œ ν•˜λ©΄ λœλ‹€.

 

λ¨Όμ € λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό μž‘μ„±ν•œ php.jpg νŒŒμΌμ„ μ—…λ‘œλ“œ ν–ˆλ‹€. 

 

 

<?php
    system($_GET[cmd]);
?>

 

 

 

이 μ½”λ“œλ₯Ό ν•΄μ„ν•˜μžλ©΄

 

1. <?php: PHP μ½”λ“œμ˜ μ‹œμž‘μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이 ν‘œμ‹œλŠ” PHP μ½”λ“œ λΈ”λ‘μ˜ μ‹œμž‘μ„ μ•Œλ¦½λ‹ˆλ‹€.
2. system($_GET['cmd']);: 이 뢀뢄은 μ‹œμŠ€ν…œ λͺ…령을 μ‹€ν–‰ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. $_GET['cmd']λŠ” GET μš”μ²­μ„ 톡해 μ „λ‹¬λœ 'cmd' λ§€κ°œλ³€μˆ˜μ˜ 값을 κ°€μ Έμ˜€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ URL을 톡해 'cmd' λ§€κ°œλ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜λ©΄, 이 값은 system() ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€.

좜처: μ±— GPT

 

 

 

이 μ½”λ“œμ˜ 역할은

 

μ‚¬μš©μžλ‘œλΆ€ν„° GET λ©”μ†Œλ“œλ‘œ 'cmd'λΌλŠ” λ³€μˆ˜λ₯Ό 전달받아 이λ₯Ό μ‹œμŠ€ν…œ λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰ν•œ ν›„ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” 것이닀.

 

μ‚¬μš©μžκ°€ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 톡해 'cmd' λ³€μˆ˜μ— μ–΄λ–€ λͺ…λ Ήμ–΄λ₯Ό μ „λ‹¬ν•˜λ©΄, 이 μ½”λ“œλŠ” ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜κ³  κ²°κ³Όλ₯Ό 화면에 좜λ ₯ν•œλ‹€.

 

 

 

 

 

이제 νŒŒμΌμ„ μ—…λ‘œλ“œν•΄λ³΄μž.

 

 

 

 

였λ₯˜ λ©”μ‹œμ§€λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ 두 가지 λ¬Έμ œκ°€ μžˆλ‹€.

 

 

1. Use of undefined constant cmd - assumed 'cmd': 'cmd'λΌλŠ” μƒμˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ, PHPλŠ” 이λ₯Ό λ¬Έμžμ—΄λ‘œ μ²˜λ¦¬ν•œλ‹€. ν•˜μ§€λ§Œ 'cmd'λ₯Ό λ”°μ˜΄ν‘œλ‘œ 감싸지 μ•Šμ•˜κΈ° λ•Œλ¬Έμ— PHPλŠ” 이λ₯Ό μƒμˆ˜λ‘œ μΈμ‹ν•˜λ €κ³  μ‹œλ„ν–ˆμœΌλ©°, κ·Έ 결과둜 κ²½κ³ κ°€ λ°œμƒν–ˆλ‹€.

2. Cannot execute a blank command: system() ν•¨μˆ˜μ— 빈 λͺ…령을 μ „λ‹¬ν•˜λ €κ³  ν–ˆκΈ° λ•Œλ¬Έμ— λ°œμƒν•œ 였λ₯˜μ΄λ‹€. ($_GET['cmd']μ—μ„œ 'cmd' λ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ•„μ„œ λ°œμƒν•œ κ²ƒμœΌλ‘œ 보인닀.)

 

 

 

λ‹€μ‹œ μˆ˜μ •ν•΄μ„œ νŒŒμΌμ„ μ—…λ‘œλ“œν•΄λ³΄μž.

 

<?php
    $cmd = $_GET['cmd'];
    system($cmd);
?>

 

 

 

 

 

 

이 였λ₯˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.

 

 

였λ₯˜ λ©”μ‹œμ§€μΈ "Cannot execute a blank command"λŠ” μ‹œμŠ€ν…œ λͺ…λ Ήμ–΄κ°€ λΉ„μ–΄μžˆμ–΄μ„œ μ‹€ν–‰ν•  수 μ—†λ‹€λŠ” 것을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 즉, 'cmd' λ³€μˆ˜μ— μ–΄λ– ν•œ 값도 μ „λ‹¬λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ 빈 λ¬Έμžμ—΄μ΄ μ „λ‹¬λ˜μ—ˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ 'cmd' λ³€μˆ˜μ— μœ νš¨ν•œ μ‹œμŠ€ν…œ λͺ…령을 전달해야 ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ?cmd=ls와 같이 URL에 'cmd' λ³€μˆ˜λ₯Ό ν¬ν•¨μ‹œν‚€λ©΄ μ„œλ²„λŠ” "ls" λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•  κ²ƒμž…λ‹ˆλ‹€.

좜처: μ±— GPT

 

 

κ·Έλ ‡λ‹€κ³  ν•œλ‹€.

 

 

URL 맨 끝에 ?cmd=id 라고 μž…λ ₯ν•΄μ„œ cmd λ³€μˆ˜μ— id λΌλŠ” 값을 λ‹΄μ•„μ£Όλ©΄ system('id') κ°€ μ„œλ²„λ‘œ μ „λ‹¬λ˜μ–΄ id λͺ…λ Ήμ–΄κ°€ 싀행될 것이닀.

id λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λœ κ²°κ³Ό

 

 

 

 

 

이제 λ¬Έμ œμ—μ„œ μ›ν•˜λŠ” 바와 같이 .passwd둜 μ ‘κ·Όν•΄λ³΄μž.

 

?cmd=cat /challenge/web-serveur/ch20/.passwd λ₯Ό μž…λ ₯ν•΄μ£Όμž.

 

(μ‹œμŠ€ν…œμ—μ„œ /challenge/web-serveur/ch20/.passwd 파일의 λ‚΄μš©μ„ 좜λ ₯ν•œλ‹€.)

 

 

 

 

 

 

.passwd 파일의 λ‚΄μš©μ„ 확인할 수 μžˆμ—ˆλ‹€.

 

 

 

μ •λ‹΅!

 

.passwd 파일의 λ‚΄μš©μ„ λ³΅μ‚¬ν•˜μ—¬ λ‹΅μœΌλ‘œ μž…λ ₯ν•˜λ©΄ λœλ‹€.

'SWLUG > μ›Ή ν•΄ν‚Ή' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Dreamhack/λ“œλ¦Όν•΅] image-storage  (1) 2023.09.30
[Root me] Install files  (0) 2023.09.30
[Webhacking.kr] old-28  (0) 2023.09.28
[webhacking.kr] old-12번  (0) 2023.09.27
[Root Me] Javascript - Webpack  (0) 2023.09.26