์ปดํ“จํ„ฐ ์„ธ๊ณ„๋ฅผ ๋ฐฐ์šฐ๋Š” ํ•™์ƒ์˜ ๋‘๋‡Œ๋Š” ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์•ˆ๋…•ํ•˜์„ธ์š”.

Bash์—์„œ ๋˜ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์„ ๋งˆ์นœ ํ›„ ๋ชจ๋“  ๊ฒƒ์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ์–ด๋–ค ์™ธ์„ค๊ณผ ๋ชฉ๋ฐœ์„ ์ผ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์ง€๋งŒ ์•„์ง ์ง€์‹์˜ ๋งˆ์ฐจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์บ๋ฆฌ์ปค์ณ์ž…๋‹ˆ๋‹ค.

ํƒœ์Šคํฌ


๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ํ•„์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ๊ฐํ˜•์„ ์ œ์™ธํ•˜๊ณ  ๋‹จ์–ด์— ๋Œ€ํ•œ ๋งŽ์€ ์šด์œจ์„ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๋‹จ์–ด์˜ ๋งŽ์€ ์šด์œจ์„ ๊ต์ฐจ

๋ฌด์—‡์„ ์œ„ํ•ด? ๊ธ€์Ž„, ๊ทธ๊ฒŒ ๋‹ค์•ผ โ€“ ๊ทธ๊ฒŒ ๋‹ค์•ผ.
๋ˆ„๊ฐ€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๊นŒ? ์ •์‚ฌ๊ฐํ˜• ์šด์œจ(์ผ๋ฐ˜์ ์ธ ์šฉ์–ด๋กœ - ์ •์‚ฌ๊ฐํ˜•)์€ ์ฒ ์ž์˜ ๋งˆ์ง€๋ง‰ ๋‘ ๊ธ€์ž๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋‘ ๋‹จ์–ด๋กœ, ์ด๋Š” (์ข…์ข… ์ด๊ฒƒ์ด ์œ ์ผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค) ์šด์œจ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์žฅ๋ฏธ๋Š” ์„œ๋ฆฌ๊ฐ€ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ํƒ€์ด์–ด - ์ž๋™์ฐจ. ํ˜„๋Œ€ ๊ฒ€์ฆ์—์„œ ์‚ฌ๊ฐํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์›์‹œ์„ฑ์œผ๋กœ ์ธํ•ด ์‚ฌ๋žŒ๋“ค์ด ํŠน๋ณ„ํžˆ ์Šน์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •


๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์šด์œจ ์ƒ์„ฑ๊ธฐ์ธ HOST๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ Bash์—์„œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. HOST๋Š” ์ฃผ๋กœ ์ฒ ์ž๊ฐ€ ์•„๋‹Œ ์ž์Œ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ˜ธ์ŠคํŠธ์ธ๊ฐ€์š”? ์™œ๋ƒํ•˜๋ฉด ์‚ฌ์ดํŠธ์˜ ์‹ค์ œ ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜๋ฉด ๊ด‘๊ณ ๋ผ๊ณ  ๋งํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ณ„์† ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? ์ฒซ์งธ, ์ž์Œ์„ ๋ฐ”ํƒ•์œผ๋กœ ์šด์œจ์„ ์„ ํƒํ•˜๋Š” ์žฅ์ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ทธ๋Š” ์—ฌ์ „ํžˆ ์‚ฌ๊ฐํ˜•์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‘˜์งธ, ๋‘ ๋‹จ์–ด์— ๋Œ€ํ•œ ์šด์œจ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์—ฌ์ „ํžˆ ๋‘๋‡Œ๋กœ ์ƒ๊ฐํ•˜๊ณ , ํƒญ ์‚ฌ์ด๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ , ๋ชฉ๋ก์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๋‹จ์–ด๋ฅผ ์•”๊ธฐํ•˜๋Š” ๋ฐ ์—๋„ˆ์ง€๋ฅผ ์†Œ๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ•ํ•œ ์šด์œจ ์–ป๊ธฐ

๋‚ด๊ฐ€ ๋ญ˜ ์•Œ ๊ฒ ์–ด? ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ๋Œ€ํ•ด ์•Œ์•„์š” wget, ์ง€์ •๋œ URL์˜ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ข‹์•„์š”, ์š”์ฒญ์„ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šด์œจ์ด ๋งž๋Š” ๋‹จ์–ด๋กœ ์ด๋ฆ„์ด ์ง€์ •๋œ ํŒŒ์ผ์— HTML ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "์—ฌ๊ธฐ"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

wget https://HOST/rifma/ะทะดะตััŒ

ํ•˜์ง€๋งŒ ๋‹จ์–ด ๋ชฉ๋ก๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋‹จ์–ด ๋ชฉ๋ก์ด ์•„๋ฌด๋ฆฌ ์ด์ƒํ•˜๋”๋ผ๋„ ๋ชฉ๋ก ํ˜•์‹์œผ๋กœ ํ˜•์‹ํ™”๋˜์–ด ์žˆ๊ณ  ๋‹จ์–ด๊ฐ€ ํƒœ๊ทธ์— ์žˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. . ๊ธ€์Ž„, ์šฐ๋ฆฌ๋Š” ํ›Œ๋ฅญํ•œ ์œ ์šฉ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. SED - ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์–ด๋ณด์ž.

cat $word | grep '<li>' | sed -e "s%<li>%%" | sed -e "s%</li>%%" | sed -e "s/ //g" | sed -e "/^$/d" 1> $word

๋จผ์ €, ๋‹จ์–ด ํŒŒ์ผ์—์„œ ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋œ ํ–‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. โ€” ์šฐ๋ฆฌ๋Š” ๋นˆ ํƒœ๊ทธ์™€ ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ์ค„์„ ์–ป์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ ์ž์ฒด์™€ ๋‹ซ๋Š” ํƒœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํƒœ๊ทธ ์ž์ฒด์— ์Šฌ๋ž˜์‹œ ๋Œ€์‹  ๋ฐฑ๋ถ„์œจ ๊ธฐํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์Šฌ๋ž˜์‹œ๊ฐ€ ์žˆ๋Š”๋ฐ ์™œ์ฃ ? SED ๋‹น์‹ ์„ ์กฐ๊ธˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ด€์‹ฌ์ด ์žˆ์œผ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์—์„œ ๋ชจ๋“  ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋นˆ ์ค„์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. Voila - ๊ธฐ์„ฑ ๋‹จ์–ด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๊ธ€์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์šด์œจ์ด ๋งž๋Š” ๋‹จ์–ด๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์›๋ž˜ ๋‹จ์–ด์—์„œ ๋งˆ์ง€๋ง‰ ๋‘ ๊ธ€์ž๋ฅผ ์„ ํƒํ•˜๊ณ  ๋ชฉ๋ก์„ ์ง€์›๋‹ˆ๋‹ค.

squad=${word:((${#word}-2)):2}
cat $word | sed -e "/.$squad$/d" 1> $word

์šฐ๋ฆฌ๋Š” ๋ณด๊ณ , ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค... ๊ทธ๋ ‡๋‹ค๋ฉด "play"๋ผ๋Š” ๋‹จ์–ด ๋ชฉ๋ก์€ ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  "๋‚˜๋Š” ๊ฐˆ๊ฑฐ์•ผ"๋ผ๋Š” ๋‹จ์–ด๋Š”? ํŒŒ์ผ์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋ชจ๋‘ ์ด ๋‹จ์–ด๋“ค์ด ๋™์‚ฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , ์šฐ๋ฆฌ๋Š” ๋™์‚ฌ๋กœ ์šด์œจ์„ ๋งž์ถ”๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ทธ๋“ค์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‚ฌ ์šด์œจ์€ ์ •์‚ฌ๊ฐํ˜• ์šด์œจ๋ณด๋‹ค ๋‚˜์ฉ๋‹ˆ๋‹ค. ๋Ÿฌ์‹œ์•„์–ด์—๋Š” ๋™์‚ฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ๊ณ  ๋ชจ๋‘ ๋™์ผํ•œ ์–ด๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ฏธ๋ฅผ ํ™•์ธํ•œ ํ›„ ์ตœ์ข… ํŒŒ์ผ์— ํฌํ•จ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์„œ๋‘๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ ๋‹จ์–ด์—๋Š” ์šด์œจ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋•Œ๋กœ๋Š” ์šด์œจ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ž˜ ๋“ค๋ฆฌ๋Š” ์œ ์Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์œ ์Œ์Œ์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค(ํ”„๋ž‘์Šค์–ด ์œ ์Œ์Œ, ๋ผํ‹ด์–ด assono-๋‚˜๋Š” ์กฐํ™”๋กญ๊ฒŒ ๋“ค๋ฆผ).

์šฐ๋ฆฌ๋Š” assonances๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค

์—ฌ๊ธฐ์„œ ์žฌ๋ฏธ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ๋ณ„๋„์˜ URL๊ณผ ๋™์ผํ•œ ํŽ˜์ด์ง€์— assonance๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋งํ•˜์ง€ wget'๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์‹œ๋‚˜์š”? ํ•˜์ง€๋งŒ ์ ˆ๋Œ€ ์•ˆ๋ผ. ์Šฌํ”„๊ฒŒ๋„.

์ค„์˜ URL์ด ์–ด๋–ป๊ฒŒ๋“  ๋ณ€๊ฒฝ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ฆฌ๊ณ , ์–ด์กฐ๋„Œ์Šค๋กœ ์ „ํ™˜ํ•œ ํ›„ ๊ฑฐ๊ธฐ์— ์žˆ๋˜ ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ ๋ธŒ๋ผ์šฐ์ € ํƒญ์— ๋ถ™์—ฌ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ์šด์œจ์ด ์—ด๋ ธ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€ ๊ทธ.

๋ณธ์งˆ์ ์œผ๋กœ ๋‚˜๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์‚ฌ๋žŒ์ด ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ์„œ๋ฒ„์— ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ? ๋ˆ„๊ฐ€ ์•Œ๊ฒ ์–ด์š”, ๊ฐ€์„œ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.

์–ด๋””๋กœ ๋ณด๋‚ผ๊นŒ์š”? ๋ฌด์—‡์„ ๋ณด๋‚ผ๊นŒ? ์„œ๋ฒ„ IP์— ๋Œ€ํ•œ HTTP ์š”์ฒญ, GET๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๊ณ  HTTP/1.1๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค... ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด๋‚ด๋Š” ๋‚ด์šฉ๊ณผ ์œ„์น˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ํ•˜๋‹ค ์™€์ด์–ด ์ƒคํฌ, ๊ตํ†ต ์ƒํ™ฉ์„ ์‚ดํŽด๋ณด์„ธ์š”.

0040 37 5d a3 84 27 e7 fb 13 6d 93 ed cd 56 04 9d 82 7]ยฃ.'รงรป.m.รญรV...
0050 32 7c fb 67 46 71 dd 36 4d 42 3d f3 62 1b e0 ad 2|รปgFqร6MB=รณb.ร .
0060 ef 87 be 05 6a f9 e1 01 41 fc 25 5b c0 77 d3 94 รฏ.ยพ.jรนรก.Aรผ%[ร€wร“.

์Œ... ๋ญ? ์•„ ์˜ˆ, HTTPS๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ž์‹ ์—๊ฒŒ MITM ๊ณต๊ฒฉ์„ ์‹œ์ž‘ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด์ƒ์ ์œผ๋กœ๋Š” ํ”ผํ•ด์ž ์ž์‹ ์ด ์šฐ๋ฆฌ๋ฅผ ๋„์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์„œํ•‘ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ํ›„ ๋งˆ์นจ๋‚ด ์š”์ฒญ ์ž์ฒด์™€ ์ˆ˜์ทจ์ธ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ€๋‹ค:

ํ„ฐ๋ฏธ๋„๊ณผ์˜ ๋Œ€ํ™”

telnet IP PORT
Trying IP...
Connected to IP.
Escape character is '^]'.
GET /rifma/%D0%BC%D0%B0%D1%82%D1%8C?mode=block&type=asn HTTP/1.1
Host: HOST
Accept-Language: en-US,en;q=0.5
X-Requested-With: XMLHttpRequest
Connection: close

HTTP/1.1 400 Bad Request
Server: nginx/1.8.0
Date: Sun, 03 Nov 2019 20:06:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 270
Connection: close

<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.8.0</center>
</body>
</html>
Connection closed by foreign host.

์—ฌ๊ธฐ์š”. ํ—คํ—คํ—ค. ์‹ค์ œ๋กœ ์ด๊ฒƒ์ด ๋ฐ”๋กœ HTTP ์š”์ฒญ์„ HTTPS ํฌํŠธ๋กœ ๋ณด๋‚ผ ๋•Œ ์˜ˆ์ƒํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์•”ํ˜ธํ™”ํ•ด์•ผ ํ• ๊นŒ์š”? ์ด ๋ชจ๋“  ๊ฒƒ์€ RSA ํ‚ค์™€ SHA256์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ, ์žˆ์–ด์š” OpenSSL์„ ๊ทธ๋Ÿฐ ๊ฒƒ๋“ค ๋•Œ๋ฌธ์—. ๊ธ€์Ž„, ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ํ•ด์•ผํ• ์ง€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € Referer ๋ฐ Cookie ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๋ฌธ์ œ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„๊ณผ์˜ ๋Œ€ํ™”

openssl s_client -connect IP:PORT
{ะ’ััะบะธะต ะบะปัŽั‡ะธ, ัะตั€ั‚ะธั„ะธะบะฐั‚ั‹}
GET /rifma/%D0%B7%D0%B4%D0%B5%D1%81%D1%8C?mode=block&type=asn HTTP/1.1
Host: HOST
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/javascript,text/html,application/xml,text/xml,*/*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Connection: keep-alive

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
Date: Sun, 03 Nov 2019 20:34:33 GMT
Set-Cookie: COOKIE
X-Powered-By: Phusion Passenger 5.0.16
Server: nginx/1.8.0 + Phusion Passenger 5.0.16
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-Control: no-cache
Strict-Transport-Security: max-age=31536000
Content-Security-Policy: block-all-mixed-content
Content-Encoding: gzip

์ปดํ“จํ„ฐ ์„ธ๊ณ„๋ฅผ ๋ฐฐ์šฐ๋Š” ํ•™์ƒ์˜ ๋‘๋‡Œ๋Š” ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์ด๊ฒŒ ๋ญ์•ผ, ์„œ๋ฒ„์—์„œ ์š•ํ•˜๋Š” ๊ฑฐ์•ผ? ๊ธ€์Ž„, ์ ์–ด๋„ ๊ทธ๋“ค์€ ๋‚˜์—๊ฒŒ 200 OK๋ผ๊ณ  ๋Œ€๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฟ ํ‚ค์™€ ๋ฆฌํผ๋Ÿฌ๊ฐ€ ์•„๋ฌด ์˜ํ–ฅ๋„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์••์ถ•์€ gzip์ด์ง€๋งŒ ๋ณต์‚ฌ์‹œ ASCII ๋ฌธ์ž๊ฐ€ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ๋Š” ์„ ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฝ”๋”ฉ ์ˆ˜๋ฝ. ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ด์ œ assonances๊ฐ€ ํฌํ•จ๋œ HTML ๋ฌธ์„œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. OpenSSL์„ ์‹คํ–‰ํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์‘๋‹ต์„ ๋ฐ›์€ ํ›„์—๋„ OpenSSL "์…ธ"์— ๋‚จ์•„ ์žˆ๋Š” ๊ฒฝ์šฐ ์ถœ๋ ฅ์„ ์–ด๋–ป๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‘ ๋ฒˆ์งธ๋กœ๋Š” ๋ญ”๊ฐ€ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ๋กœ๋Š”...

์žˆ์–ด์„œ ์ข‹๋‹ค ํ•˜๋ธŒ ๋ฅด์œ ํ‹ธ๋ฆฌํ‹ฐ์— ๋Œ€ํ•ด ์ฝ์€ ๊ณณ ๊ธฐ๋Œ€, ์ธ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŒ€์ด ์žˆ์œผ๋ฉด ๋”์šฑ ๋งค๋ ฅ์ ์ด๋‹ค ์ž๋™ ๊ธฐ๋Œ€, ์ƒ์„ฑ ๊ธฐ๋Œ€ ๊ท€ํ•˜์˜ ํ–‰๋™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ๊ธ€์Ž„, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ณ  ์ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์—ฌ๊ธฐ์— ์™„์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์‚ฌ๋žŒ๋งŒ์ด ๋งค์šฐ ๊ฑฐ๋Œ€ํ•˜๊ณ  ๊ทธ ์ด์œ ๋Š” ๋ชจ๋‘ OpenSSL์„ ์ธ์ฆ์„œ, ํ‚ค ๋ฐ ๊ธฐ๋Œ€ ์ด ๋ชจ๋“  ๊ฒƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ์š”. ์ฒซ ๋ฒˆ์งธ ํ”„๋กฌํ”„ํŠธ ์ „์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์ค„ ๋ฐ”๊ฟˆ 'r'๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค. ๋˜ํ•œ ์š”์ฒญ์—์„œ User-Agent ๋ฐ Accept ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋ฌด ์˜ํ–ฅ๋„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž, ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์ง€๋งŒ ์†Œ์ค‘ํ•œ HTML ๋ฌธ์„œ๋Š” ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธฐ๋Œ€ ๋จน์—ˆ๋‹ค. ๊ทธ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ฑ‰์–ด๋‚ด๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

set results $expect_out(buffer)

์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋๋‚˜๊ธฐ ์ „์— - ์‹คํ–‰ ํŒŒ์ผ์˜ ์ถœ๋ ฅ์ด ์ž‘์„ฑ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Œ€'om ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋Œ€ํ•˜์„ธ์š”

#!/usr/bin/expect -f

set timeout -1
spawn openssl s_client -connect IP:PORT
match_max 100000
expect -exact "
---r
"
send -- "GET /rifma/%d0%b7%d0%b4%d0%b5%d1%81%d1%8c?mode=block&type=asn HTTP/1.1rHost: HOSTrAccept-Language: en-US,en;q=0.5rX-Requested-With: XMLHttpRequestrConnection: close"
expect -exact "GET /rifma/%d0%b7%d0%b4%d0%b5%d1%81%d1%8c?mode=block&type=asn HTTP/1.1r
Host: HOSTr
Accept-Language: en-US,en;q=0.5r
X-Requested-With: XMLHttpRequestr
Connection: close"
send -- "r"
set results $expect_out(buffer)
expect -exact "r
"
send -- "r"
expect eof

ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค! ๋ณด์‹œ๋‹ค์‹œํ”ผ, ๋ชจ๋“  ์˜ˆ์—์„œ ์š”์ฒญ URL์€ ์ •์ ์ด์ง€๋งŒ ์–ด๋–ค ๋‹จ์–ด๊ฐ€ ์œ ์Œ๊ณผ ์—ฐ๊ด€๋˜๋Š”์ง€๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์€ URL์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ASCII์—์„œ "%d0%b7%d0%b4%d0%b5%d1%81%d1%8c"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ง€์†์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ UTF-8์—์„œ "here"๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ๊นŒ์š”? ๋ฌผ๋ก , ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ๋” ์ด์ƒ์€ ์•„๋‹ˆ์•ผ ์ž๋™ ๊ธฐ๋Œ€'์•„, ๊ทธ๋ฆฌ๊ณ  ๋„์›€์„ ๋ฐ›์•„ ์—์ฝ”, ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ์˜ ์ƒˆ๋กœ์šด ๊ฒƒ์—์„œ๋Š” ๋‹จ์–ด ์™ธ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๋ฌธ์ œ์ธ ํ‚ค๋ฆด ๋ฌธ์ž๋ฅผ URL ํ˜•์‹์œผ๋กœ ์ง€๋Šฅ์ ์œผ๋กœ ๋ฒˆ์—ญํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ํ„ฐ๋ฏธ๋„์—๋„ ํŠน๋ณ„ํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์•„, ์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ์ง€, ๊ทธ๋ ‡์ง€? ํ•  ์ˆ˜ ์žˆ๋‹ค:

๋‚ด๊ฐ€ ๋ญ˜ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ด!

function furl {
furl=$(echo "$word" | sed 's:ะ:%d0%90:g;s:ะ‘:%d0%91:g;s:ะ’:%d0%92:g;s:ะ“:%d0%93:g;s:ะ”:%d0%94:g;s:ะ•:%d0%95:g;s:ะ–:%d0%96:g;s:ะ—:%d0%97:g;s:ะ˜:%d0%98:g;s:ะ™:%d0%99:g;s:ะš:%d0%9a:g;s:ะ›:%d0%9b:g;s:ะœ:%d0%9c:g;s:ะ:%d0%9d:g;s:ะž:%d0%9e:g;s:ะŸ:%d0%9f:g;s:ะ :%d0%a0:g;s:ะก:%d0%a1:g;s:ะข:%d0%a2:g;s:ะฃ:%d0%a3:g;s:ะค:%d0%a4:g;s:ะฅ:%d0%a5:g;s:ะฆ:%d0%a6:g;s:ะง:%d0%a7:g;s:ะจ:%d0%a8:g;s:ะฉ:%d0%a9:g;s:ะช:%d0%aa:g;s:ะซ:%d0%ab:g;s:ะฌ:%d0%ac:g;s:ะญ:%d0%ad:g;s:ะฎ:%d0%ae:g;s:ะฏ:%d0%af:g;s:ะฐ:%d0%b0:g;s:ะฑ:%d0%b1:g;s:ะฒ:%d0%b2:g;s:ะณ:%d0%b3:g;s:ะด:%d0%b4:g;s:ะต:%d0%b5:g;s:ะถ:%d0%b6:g;s:ะท:%d0%b7:g;s:ะธ:%d0%b8:g;s:ะน:%d0%b9:g;s:ะบ:%d0%ba:g;s:ะป:%d0%bb:g;s:ะผ:%d0%bc:g;s:ะฝ:%d0%bd:g;s:ะพ:%d0%be:g;s:ะฟ:%d0%bf:g;s:ั€:%d1%80:g;s:ั:%d1%81:g;s:ั‚:%d1%82:g;s:ัƒ:%d1%83:g;s:ั„:%d1%84:g;s:ั…:%d1%85:g;s:ั†:%d1%86:g;s:ั‡:%d1%87:g;s:ัˆ:%d1%88:g;s:ั‰:%d1%89:g;s:ัŠ:%d1%8a:g;s:ั‹:%d1%8b:g;s:ัŒ:%d1%8c:g;s:ั:%d1%8d:g;s:ัŽ:%d1%8e:g;s:ั:%d1%8f:g;s:ั‘:%d1%91:g;s:ะ:%d0%81:g')}

์ „์ฒด์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋‹จ์–ด๋ฅผ ASCII ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  OpenSSL์„ ํ†ตํ•ด ์„œ๋ฒ„์—์„œ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์ดํŠธ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋งˆ์ง€๋ง‰ ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ์„ ํŒŒ์ผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ณ  ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ ์ด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. "ํ•„ํ„ฐ" ์ถ”๊ฐ€ ์‚ฌ๊ฐํ˜•์„ ๋งŒ๋“ค์–ด ํŒŒ์ผ์— ์”๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฒƒ์˜ ๊ต์ฐจ์ . ๊ฒฐ๋ก 

์‹ค์ œ๋กœ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ฌธ์ œ๋ฅผ ๊ฐ€์žฅ ์ ๊ฒŒ ์ผ์œผํ‚ค๋Š” ์›์ธ์ž…๋‹ˆ๋‹ค. ๋‘ ๋‹จ์–ด์— ๋Œ€ํ•ด ์œ„์˜ ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋‘ ๋ชฉ๋ก์—์„œ ๊ฐ ๋‹จ์–ด๋ฅผ ๊ฐ๊ฐ ๋น„๊ตํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋‘ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋‘ ๋‹จ์–ด์™€ ์šด์œจ์ด ๋งž๋Š” ๋‹จ์–ด ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๊ณ  ์‹ฌ์ง€์–ด ์œ ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์ˆ˜๋™์œผ๋กœ ๋„ค ๊ฐœ์˜ ํƒญ ์‚ฌ์ด๋ฅผ ์ „ํ™˜ํ•˜๊ณ  "๋ˆˆ์œผ๋กœ" ๋‹จ์–ด๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š๊ณ ๋„ ๋ชจ๋‘ ์ˆ˜์ง‘ํ•˜๊ณ  ์„ค๋ช…ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ๋ฉ‹์ง„.

์ด ์ถœํŒ๋ฌผ์˜ ๋ชฉ์ ์€ ์–ด๋–ค ์‚ฌ๋žŒ์ด ํ•„์š”ํ•œ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ๋“  ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๋ณด์—ฌ ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๊ณ  ๋น„๋šค์–ด์ง€๊ณ  ์†Œ๋ฆ„๋ผ์น˜์ง€๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€