[10μ›” 1μ£Όμ°¨]


ν•΄ν‚Ή μ•Œλ €μ€„κ²Œ
9ν™”: Command Injection

μ•ˆλ…•ν•˜μ„Έμš”! 였늘의 ν•΄ν‚Ή μ•Œλ €μ€„κ²ŒλŠ” Command Injectionμž…λ‹ˆλ‹€. πŸ™‚
Command Injection은 ν•΄μ„ν•˜λ©΄ λͺ…λ Ή μ£Όμž… μ·¨μ•½μ μœΌλ‘œ, μ΄λ¦„μœΌλ‘œ μ§μž‘ν•΄λ³΄λ©΄ 해컀가 μž…λ ₯ν•œ λͺ…λ Ήμ–΄κ°€ κ·ΈλŒ€λ‘œ 싀행될 수 μžˆλŠ” κ±ΈκΉŒμš”? 😱
ν•΄λ‹Ή 취약점은 λ¦¬λˆ…μŠ€ 뿐 μ•„λ‹ˆλΌ μ›Ήμ—μ„œλ„ λ°œμƒν•˜λŠ” μ·¨μ•½μ μ΄μ§€λ§Œ, μ΄λ²ˆμ—λŠ” μ‹œμŠ€ν…œ ν•΄ν‚Ή κ΄€μ μ—μ„œ μ„€λͺ…ν•΄λ“œλ¦΄κ²Œμš”. πŸ˜†

ν•΄μ»€λŠ” 무슨 λͺ…령을 λ‚΄λ¦΄κΉŒμš”? πŸ‘Ώ
잠깐, μ‹œμž‘ν•˜κΈ° 전에 λ¦¬λˆ…μŠ€μ˜ μ—¬λŸ¬ 메타 문자λ₯Ό μ•„μ‹œλ‚˜μš”? πŸ€“
;, &&, ||, < λ“± 메타 문자λ₯Ό 잘 λͺ¨λ₯΄κ² λ‹€λ©΄ Hackyboiz의 ν•΄ν‚€ν”Όλ””μ•„λ₯Ό 보고 μ˜€λŠ”κ±Έ μΆ”μ²œλ“œλ¦΄κ²Œμš”.
μ—¬κΈ°μ„œ μ€‘μš”ν•œ 것은 'μ—”ν„°λ₯Ό ν•œ 번만 λˆŒλŸ¬λ„ μ—¬λŸ¬ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€λŠ” 것' μž…λ‹ˆλ‹€! 🀨  이것을 μ–΄λ–»κ²Œ ν™œμš©ν•  수 μžˆμ„μ§€ 같이 μ•Œμ•„λ΄μš”!

Command Injection이 λ­μ—μš”? 🧐
Command Injection(λͺ…λ Ή μ£Όμž…)은 μ‚¬μš©μžμ˜ μž…λ ₯을 ν•„ν„°λ§ν•˜μ§€ μ•Šμ„ λ•Œ, μ‚¬μš©μžκ°€ μ˜λ„ν•˜λŠ” λͺ…령을 μΆ”κ°€μ μœΌλ‘œ μ‚½μž…ν•˜μ—¬ 호슀트 운영 체제(OS)μ—μ„œ μž„μ˜μ˜ λͺ…령을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λŒ€ν‘œμ μœΌλ‘œ μ‚¬μš©μžμ˜ μž…λ ₯이 system() ν•¨μˆ˜μ˜ 인자둜 μ‚¬μš©λ˜κ±°λ‚˜ μ›Ήμ—μ„œλŠ” μ‚¬μš©μž 제곡 데이터(μ„œλ²„μ— μ „λ‹¬ν•˜λŠ” 양식, μΏ ν‚€, HTTP 헀더 λ“±)κ°€ μ‹œμŠ€ν…œ μ‰˜μ— 전달될 λ•Œ μž…λ ₯을 κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ” 것이 λ¬Έμ œκ°€ λ©λ‹ˆλ‹€.
λ°”λ‘œ μ΄λ•Œ, μœ„μ—μ„œ λ§ν–ˆλ˜ 'μ—”ν„°λ₯Ό ν•œ 번만 λˆŒλŸ¬λ„ μ—¬λŸ¬ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€λŠ” 것' 의 진싀을 μ•Œκ² λ„€μš”. 
λ°”λ‘œ ν”„λ‘œκ·Έλž¨μ΄ μ˜ˆμƒν–ˆλ˜ λͺ…λ Ήμ–΄(command1) ν•˜λ‚˜ λ„˜κ²¨μ£Όκ³ , κ·Έ λ’€λ‘œ μ‹€ν–‰ν•˜κ³  싢은 λͺ…λ Ήμ–΄(command2, command3, ..... )λ₯Ό 껴넣을 수 μžˆμŠ΅λ‹ˆλ‹€.
μ•„λ¬΄νŠΌ 항상 μ‚¬μš©μžμ˜ μž…λ ₯을 κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ” 것이 λ¬Έμ œκ°€ λ˜λ„€μš”. πŸ˜’

μ‹œμŠ€ν…œ ν•΄ν‚Ή(pwnable) 문제λ₯Ό ν’€λ‹€ 보면 항상 우리 κ°€μŠ΄μ„ λ‘κ·Όκ±°λ¦¬κ²Œ λ§Œλ“œλŠ”κ²Œ system() ν•¨μˆ˜μ£ ? πŸ˜† system("/bin/sh");의 ν˜•νƒœλ₯Ό κ°€μž₯ 많이 보셨을 것 κ°™μ•„μš”.
system() ν•¨μˆ˜μ˜ μ›ν˜•μ€ int system(const char* command)으둜 인자인 commandλ₯Ό μ‹œμŠ€ν…œμ— λͺ…λ Ήμ–΄λ‘œ λ°”λ‘œ μ „λ‹¬ν•΄μš”. λŒ€μΆ© 듀어도 μ—„μ²­ μœ„ν—˜ν•΄λ³΄μ΄λ‚˜μš”? Command Injection의 Commandκ°€ λ°”λ‘œ μ € system() ν•¨μˆ˜μ˜ 인자λ₯Ό λ§ν•˜λŠ” κ²ƒκ°™λ„€μš”.

command_injection νŒŒμΌμ„ μ‹€ν–‰ν•˜λ©΄ 첫 번째 μΈμžκ°’μ— ν•΄λ‹Ήν•˜λŠ” cat λͺ…λ Ήμ–΄λ‘œ νŒŒμΌμ„ μ½μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ΄λ•Œ, commandλ₯Ό ν•„ν„°λ§ν•˜λŠ” 과정이 μ—†κΈ° λ•Œλ¬Έμ— μΆ”κ°€μ μœΌλ‘œ ;을 μ‚¬μš©ν•΄μ„œ commandλ₯Ό μΆ”κ°€ν•΄λ³Όκ²Œμš”! " "λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.
"Hacking.txt; cat Hacking_JJack.txt"둜 ν•œλ²ˆμ— 인자λ₯Ό 보내주면 λ’€μ΄μ–΄μ„œ Hacking_JJack.txt의 νŒŒμΌλ„ 읽게 λ©λ‹ˆλ‹€.

νŒŒμΌμ— SetUIDκ°€ μ„€μ •λ˜μ–΄ 있으면 일반 μ‚¬μš©μžλŠ” ν•΄λ‹Ή 파일의 μ†Œμœ μž κΆŒν•œμ„ κ°€μ§€κ²Œ λ©λ‹ˆλ‹€. μ΄λ•Œ, command_injection νŒŒμΌμ΄ root μ†Œμœ μžμ— SetUIDκ°€ μ„€μ •λ˜μ–΄ μžˆλ‹€λ©΄, root κΆŒν•œμ˜ μ‰˜μ„ λ”Έ μˆ˜λ„ μžˆκ² λ„€μš”! 😱

그리고 λ§Œμ•½ rm -rf /  λͺ…령을 λ‚΄λ¦°λ‹€λ©΄ μ–΄λ–€ 일이 λ²Œμ–΄μ§ˆμ§€ 생각쑰차 ν•˜κ³ μ‹Άμ§€ μ•Šλ„€μš”. μ‹œμŠ€ν…œμ˜ λͺ¨λ“  νŒŒμΌμ„ κ°•μ œλ‘œ μ‚­μ œν•΄λ²„λ¦½λ‹ˆλ‹€.

Christmas CTF 2020의 oil system 문제λ₯Ό μ•„μ‹œλ‚˜μš”?
Fabu1ousλ‹˜μ΄ λ§Œλ“€κ³  고톡받은 λ¬Έμ œμž…λ‹ˆλ‹€. 🀣  이 λ¬Έμ œλŠ” 파일의 이름을 μ‚¬μš©μžκ°€ μž…λ ₯ν•  수 있고, Out of Bounds(OOB) 취약점을 μ΄μš©ν•΄ 리턴값을 μ‘°μž‘ν•˜λ„λ‘ λ§Œλ“  λ¬Έμ œμ˜€λŠ”λ° μ˜λ„ν•˜μ§€ μ•Šκ²Œ λ°”λ‘œ 이 Command InjectionμœΌλ‘œλ„ ν’€λ ΈκΈ° λ•Œλ¬Έμ΄μ£ !
λ°”λ‘œ 이 뢀뢄이 파일λͺ…을 ν•„ν„°λ§ν•˜λŠ” ν•¨μˆ˜μ˜€μŠ΅λ‹ˆλ‹€. μ™œ Command Injection이 λ°œμƒν–ˆλŠ”μ§€ μ•Œμ•„λ³΄μ£ . πŸ•΅πŸ»

영문 μ†Œλ¬Έμž(a~z) μ΄μ™Έμ˜ μ‚¬μš©μž μž…λ ₯이 λ“€μ–΄μ˜€λ©΄ μ’…λ£Œν•˜λ„λ‘ ν•˜μ§€λ§Œ, λͺ¨λ“  μž…λ ₯을 κ²€μ‚¬ν•˜λŠ” 것이 μ•„λ‹Œ 첫 문자만 κ²€μ‚¬ν•˜λ„€μš”. 😱  λ”°λΌμ„œ a;sh λ“±μ˜ μž…λ ₯으둜 μ‰˜μ„ μ‹€ν–‰ν•  수 μžˆμ—ˆλ‹€κ³  ν•΄μš”. 🀯  μ‹€μ œλ‘œ λ§Žμ€ 뢄듀이 Command Injection으둜 ν’€μ–΄μ£Όμ…¨μŠ΅λ‹ˆλ‹€. 
μžμ„Έν•œ 문제 ν•΄μ„€κ³Ό λΌμ΄νŠΈμ—…μ΄ κΆκΈˆν•˜μ‹œλ©΄ μ°Έκ³ ν•΄μ£Όμ„Έμš”!

κΌ­ λͺ…λ Ήμ–΄λ‘œλ§Œ 곡격이 κ°€λŠ₯ν•œκ°€μš”?
μ•„λ‹ˆμš”! μŠ€ν¬λ¦½νŠΈκ°€ 싀행될 λ•Œλ„ Command Injection 곡격을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œλ‘œ 10μ›” 2일날 μž‘μ„±λœ λ”°λˆλ”°λˆν•œ ν•˜λ£¨ν•œμ€„μ„ κ°€μ Έμ™€λ΄€μ–΄μš”.
μš”μ•½ν•˜λ©΄ Cisco HyperFlexμ—μ„œ 3가지 취약점이 λ°œκ²¬λ˜μ—ˆλŠ”λ° κ·Έ 쀑에 CVSSμ μˆ˜κ°€ 9.8둜 κ°€μž₯ 높은 취약점이 λ°”λ‘œ Command Injectionμ΄λ„€μš”. μ‰¬μ›Œλ³΄μ΄μ§€λ§Œ 그만큼 κ°•λ ₯ν•œ μ·¨μ•½μ μ΄λΌλŠ” κ±°κ² μ£ . πŸ˜Ž
μ‚¬μš©μžμ—κ²Œ 계정 정보λ₯Ό μž…λ ₯받을 λ•Œ, 파이썬 슀크립트λ₯Ό ν™œμš©ν•΄ 계정 정보λ₯Ό ν•΄μ‹œν™”ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. 

λ”°λΌμ„œ νŒ¨μŠ€μ›Œλ“œ ν•„λ“œμ— μ•„λž˜μ™€ 같은 슀크립트λ₯Ό μ‚½μž…ν•˜λ©΄ μ‹œμŠ€ν…œμ„ μž¬λΆ€νŒ…μ‹œν‚¬ μˆ˜λ„ μžˆμ–΄μš”.

λ§ˆμ°¬κ°€μ§€λ‘œ μžμ„Έν•œ 정보λ₯Ό μ›ν•˜μ‹œλ©΄ λΈ”λ‘œκ·Έλ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”! 그리고 ꡬ경도 ν•œ 번..  πŸ˜„

μ–΄λ–»κ²Œ 막을 수 μžˆμ„κΉŒμš”?
μš°μ„  μ‚¬μš©μžμ˜ μž…λ ₯을 κ·ΈλŒ€λ‘œ μ‹œμŠ€ν…œ λͺ…λ ΉμœΌλ‘œ μ‹€ν–‰ν•˜μ§€ μ•ŠλŠ” 것이 κ°€μž₯ μ’‹κ² μ§€λ§Œ, 항상 그럴 μˆ˜λŠ” μ—†κ² μ£ . πŸ˜‘
μ‹œμŠ€ν…œ λͺ…령에 μ‚¬μš©μž μž…λ ₯을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 경우, μ‚¬μš©μžμ˜ μž…λ ₯을 κ²€μ¦ν•˜λŠ” κ³Όμ •μ—μ„œ ν—ˆμš©λœ λͺ…령에 λŒ€ν•œ ν™”μ΄νŠΈλ¦¬μŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν—ˆμš©λœ λͺ…λ Ήμ–΄ λ˜λŠ” ν—ˆμš©λœ 문자(예λ₯Ό λ“€μ–΄ μˆ«μžμ™€ μ†Œλ¬Έμžλ§Œ ν—ˆμš©)만 μ‚¬μš©ν•˜λ„λ‘ ν•  수 있겠죠. λ˜ν•œ λ¬Έμžμ—΄μ˜ 길이λ₯Ό 10자둜 μ œν•œν•˜κ±°λ‚˜, && & || | ; $ > < \ ! λ“±μ˜ 문자λ₯Ό λΈ”λž™λ¦¬μŠ€νŠΈμ— ν¬ν•¨ν•˜μ—¬ μ‹€ν–‰μ‹œν‚€μ§€ λͺ»ν•˜λ„둝 ν•΄μ•Όν•©λ‹ˆλ‹€. λ¬Όλ‘  ;만 λΈ”λž™λ¦¬μŠ€νŠΈμ— λ„£κ³  &&λŠ” ν—ˆμš©ν•˜λŠ” 그런 일은 μ—†μ–΄μ•Όκ² μ£ .
그리고 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μž‘μ—…μ— ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ κΆŒν•œλ§Œ μ œκ³΅ν•˜λ„λ‘ ν•˜μ—¬ μ‚¬μš©μžκ°€ λͺ…령을 μ£Όμž…ν•  수 μžˆλŠ” κ²½μš°μ—λ„ κΆŒν•œμ΄ μ œν•œλ˜λ„λ‘ ν•΄μ•Όν•©λ‹ˆλ‹€.

μ˜€λŠ˜λ„ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! πŸ˜„  κΈˆμš”μΌμ—λ„ μž¬λ°ŒλŠ” λ‚΄μš©μ„ μ€€λΉ„ν–ˆμœΌλ‹ˆ κΈ°λŒ€ν•΄μ£Όμ„Έμš”. πŸ’Œ
였늘 μ „ν•΄λ“œλ¦° λ‚΄μš©μ΄ λ§ˆμŒμ— λ“œμ…¨λ‚˜μš”?
μ£Όμœ„ μΉœκ΅¬λ“€μ—κ²Œ λ‰΄μŠ€λ ˆν„°λ₯Ό μΆ”μ²œν•΄μ£Όμ„Έμš”!
λ‹€μŒμ£Όμ—λ„ μ•Œμ°¬ λ‚΄μš©μœΌλ‘œ λŒμ•„μ˜€κ² μŠ΅λ‹ˆλ‹€. πŸ˜™
ν˜Ήμ‹œ λ§ˆμŒμ— μ•ˆλ“œλŠ” 뢀뢄이 μžˆμ—ˆλ‚˜μš”? μ—¬κΈ°μ—μ„œ ν”Όλ“œλ°±μ„ μ „λ‹¬ν•΄μ£Όμ„Έμš”!
μ—¬λŸ¬λΆ„μ˜ μ˜κ²¬λ“€μ„ 적극 λ°˜μ˜ν•΄μ„œ λ”μš± μœ μ΅ν•œ λ‰΄μŠ€λ ˆν„°λ₯Ό λ§Œλ“€μ–΄κ°€λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. πŸ˜ƒ
ν•΄ν‚€λ³΄μ΄μ¦ˆ
hackyboizteam@gmail.com
μ„œμšΈμ‹œ 광진ꡬ κ΅°μžλ™ 134-33 3μΈ΅
μˆ˜μ‹ κ±°λΆ€ Unsubscribe