mgchem's log
article thumbnail
Lab3: Attacklab (phase 3)
Study/CS 2023. 11. 1. 02:00

Overview (gdb) disas touch3 touch3 함수의 구성을 살펴보자. touch3 함수는 argument로 st pointer type을 받는다. 참고로 st는 struct로, 구성은 아래와 같다. typedef struct st { char cookie_str[9]; int cookie_val; } st; cookie_str과 cookie_val은 각각 cookie의 string(0x00000000에서 0x 제외), unsigned value이다. 즉 %rdi에 st의 주소값을 넣는 코드가 필요하다. 물론 touch3, hexmatch, hexmatch 안에서 call되는 strncmp 함수들은 data를 stack에 push하므로 Buffer에 저장되는 우리의 입력값이 overwri..

article thumbnail
Lab3: Attacklab (phase 2)
Study/CS 2023. 10. 30. 01:15

Overview (gdb) disas touch2 touch2 함수의 구성을 살펴보자. touch2 함수는 argument 하나를 %rdi를 통해 받는다. 에서 %edi와 cookie값을 비교하며, 두 값은 같아야 한다. Buffer의 크기 등은 phase 1과 같다. 그럼 동일하게 buffer overflow를 발생시키고 touch2의 주소로 덮어씌우되, 그 전에 %rdi에 cookie값을 넣어주어야 한다. Code Injection Buffer의 크기는 24B, char로 24자리. getbuf에서는 입력한 string의 각 char를 buffer의 가장 바닥부터 채운다. getbuf에서 ret가 실행되면 buffer 위에 있는 return address로 이동하여 해당 위치부터 instruction..

article thumbnail
Lab3: Attacklab (phase 1)
Study/CS 2023. 10. 29. 18:44

Attacklab 시스템프로그래밍 Lab3 Attacklab이 나왔다. Bomblab에 이어 assembly를 다루는 과제이다. Bomblab이 gdb로 한 줄 씩 실행하며 폭탄이 터지지 않는 입력값을 찾는 문제였다면, Attacklab에서는 주어진 코드의 취약점을 파악하고 원하는 결과를 내는 입력값을 찾는다. 그 과정에서 Code injection(phase 1, 2, 3)과 return-oriented programming(phase 4, 5) 기법을 사용하게 된다. Overview (gdb) disas getbuf (gdb) disas touch1 getbuf, touch1 함수의 구성을 살펴보자. 우리의 목표는 비정상적으로 긴 길이의 입력값을 이용해 return address를 덮어씌워 touch..