7주차 시스템
실습에 사용될 코드는 다음과 같다.// Name: rao.c// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0;}분석취약점은 scanf("%s", buf)부분에 있다. 실수 또는..
시스템 2주
x64 어셈블리 언어는 동사에 해당하는 명령어(Operation Code, Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성됩니다.명령어들을 크게 분류하면 이렇습니다. 피연산자에는 3가지 종류가 올 수 있습니다. 상수, 레지스터, 메모리입니다. 메모리 피연산자는 []으로 둘러싸인 것으로 표현됩니다. 앞에 크기 지정자인 TYPE PTR이 추가될 수 있습니다. 타입에는 BYTE, WORD, DWORD, QWORD가 올 수 있으며 각각 1, 2, 4, 8바이트의 크기를 지정합니다. 데이터 이동 명령어는 어떤 값을 레지스터나 메모리에 옮기도록 지시한다. mov dst, src에 들어있는 값을 dst에 대입mov rdi, rsirsi의 값을 rdi에 대입mov QWORD PTR[rdi], rs..