article thumbnail image
Published 2022. 5. 18. 20:29

shellshock - 1 pt [writeup]

๋ฌธ์ œ ํ™”๋ฉด

 

shellshock์— ๋Œ€ํ•œ ๊ฐœ๋…๊ณผ ์›๋ฆฌ๋ฅผ ๋จผ์ € ์•Œ์•„๋ณด์ž.

 

 

shellshock (CVE-2014-6271)

์ถœ์ฒ˜ https://baobob1024.tistory.com/42

: GNU bash shell์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ณต๊ฒฉ์ž๊ฐ€ ์›๊ฒฉ์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ 

๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด๋งŒ์œผ๋กœ ์‹œ์Šคํ…œ์„ ์žฅ์•…ํ•  ์ˆ˜ ์žˆ์–ด shellshock์ทจ์•ฝ์ ์€ CVSS ๋“ฑ๊ธ‰ 10์ ์„ ๋ฐ›์•˜๋‹ค.

 

โ–ท ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ณ€์ˆ˜(ํ™˜๊ฒฝ๋ณ€์ˆ˜)๋ฅผ ์ •์˜ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ทจ์•ฝ์ 

ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

$ x() { echo abcd; }

ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ํ•จ์ˆ˜ ์ •์˜ / -f ์˜ต์…˜์„ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋“ฑ๋ก

์œ„์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด export์˜ -f(function) ์˜ต์…˜์œผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ํ•จ์ˆ˜(x)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•จ์ˆ˜ ์•ˆ์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

shellshock์˜ ์›๋ฆฌ

  • Bash์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ณ€์ˆ˜ -> ํ•จ์ˆ˜๋ฌธ๋ฒ•์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ๋‚ด์šฉ( '() {๋กœ ์‹œ์ž‘๋˜๋Š” ๋ณ€์ˆ˜')์„ ์ ์–ด์„œ ์ •์˜ํ•ด์ค€๋‹ค. (์†์ž„์ˆ˜)
  • ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์„ธ๋ฏธ์ฝœ๋ก ๊ณผ ๋ช…๋ น์–ด๋“ค์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  bash subshell์„ ์‹คํ–‰ํ•˜๋ฉด ํ•จ์ˆ˜๋กœ ์ •์˜๋˜๋ฉด์„œ ๋’ค์— ์žˆ๋Š” ๋ช…๋ น์–ด๋“ค๊นŒ์ง€ ์‹คํ–‰๋œ๋‹ค.

ex)

$ export x='() { echo abcd;};pwd;id'
// pwd : ํ˜„์žฌ์˜ ์ž๊ธฐ๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ ์ฃผ๋Š” ๋ช…๋ น์–ด
// id : ์ž์‹ ์˜ uid์™€ gid๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ช…๋ น์–ด

 

์ด์ œ ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

ssh shellshock@pwnable.kr -p2222 (pw: guest)๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ ‘์†์— ์„ฑ๊ณตํ–ˆ๋‹ค.

 

 

ls -al์„ ์‚ฌ์šฉํ•ด์„œ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ–ˆ๋‹ค.

flag๊ฐ€ ์žˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , shellshock.c๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ์–ด์„œ ํ™•์ธํ•ด๋ณด์•˜๋‹ค.

 

 

 

#include <stdio.h>
int main(){
	setresuid(getegid(), getegid(), getegid());
	setresgid(getegid(), getegid(), getegid());
	system("/home/shellshock/bash -c 'echo shock_me'");
	return 0;
}

setresuid, setresgid๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฑธ ํ™•์ธํ–ˆ๋‹ค.

* SET Real uid, Effective uid, Saved set-User-ID

  • ํ”„๋กœ์„ธ์Šค์˜ "real UID", "effective UID", "saved set-user-ID"๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜

--> ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ˜„์žฌ ๋™์ž‘ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์‹คํ–‰๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด์ž

bash -c (-c : ๋ช…๋ น์–ด ์‹คํ–‰ ์˜ต์…˜)๋ฅผ ํ†ตํ•ด 'echo shock_me'๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

 

์ด์ „์— ์‚ดํŽด๋ณธ shellshock ์ทจ์•ฝ์ ์˜ ์›๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด flag๋ฅผ ์—ด์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

flag๋ฅผ ์—ด๋ ค๋ฉด cat๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ณ , ๊ทธ ์ „์— flag๊ฐ€ ์žˆ๋Š” ๊ณณ์œผ๋กœ ์œ„์น˜๋ฅผ ์ด๋™์‹œ์ผœ์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•ด์ฃผ๊ณ  shellshock์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์ฃผ์—ˆ๋‹ค.

flag ํš๋“

 

 

 

 

'Pwnable' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[pwnable] bof  (0) 2022.05.18
[pwnable] leg  (0) 2022.05.06
[pwnable] fd  (0) 2022.05.04
[pwnable] File Descriptor  (0) 2022.05.04
๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!