System Software(5)
-
Attack Lab - Phase 5 풀이
Phase5에서는 똑같이 문자열을 전달하면 된다. 문자열은 스택에 저장 해두고 이 문자열의 주소를 RDI 레지스터에 담는게 관건이다. rsp 레지스터를 통해서 특정 시점의 스택주소를 얻을수있고 이때 주소와 문자열 주소의 차이(offset)는 우리가 정할수있다. 따라서 rsp 주소와 offset의 합을 구할수 있다면 문자열의 주소를 구할수있다. 함수 목록들을 보니 add_xy 함수가 보인다. rdi와 rsi를 더해서 rax에 넣는 역할을 하는 함수이다. 따라서 rsp주소와 오프셋을 각각 rsi와 rdi에 넣고 rax값을 rdi로 다시 옮겨준다면 phase5를 해결할수있다. (touch3함수는 rdi값이 cookie문자열의 주소가 닮겨있으면 PASS) pdf에서 준 명령문 코드들로 조합할수있는 모든 명령문을..
2019.11.24 -
Attack Lab - Phase 4 풀이
이제 ctarget이 끝나고 rtarget을 풀어야 한다. rtarget과 ctarget의 다른점을 알아보자. It uses randomization so that the stack positions differ from one run to another. This makes it impossible to determine where your injected code will be located. ■ It marks the section of memory holding the stack as nonexecutable, so even if you could set the program counter to the start of your injected code, the program would fail w..
2019.11.24 -
Attack Lab - Phase 3 풀이
Phase3에서는 함수 실행과 함께 문자열의 주소를 인자로 전달해야 함을 알 수 있다. 과제 pdf에도 설명되어있고 추가로 touch3함수의 dump된 어셈블리 코드를 보면 rdi에 문자열의 주소를 받아서 쿠키와 일치하는지 hexmatch함수에서 비교후 일치하면 pass 아니면 fail임을 알수있다. 어떻게 풀어나갈 것인지 먼저 구상해보면 buffer에 mov 문자열주소, %rdi retq 이 명령문을 넣고 getbuf 가 끝나고 retq를 만났을때 이 buffer의 주소를 전달하고 buffer가 끝나고 retq를 만났을때 touch3의 주소를 전달하여 touch3이 실행되게 해보자. 자세히 구현해보자. 우선 쿠키값을 ASCII코드로 변환하기 위해서 구글링을 했더니 아래와 같은 사이트가 나왔다. http..
2019.11.24 -
Attack Lab - Phase 2 풀이
Phase2 에서는 Phase1에서와 같이 특정 함수실행을 목표로 하지만 함수를 실행 시키며 인자까지 넘겨줘야한다. touch2 함수를 살펴보자. 0000000000401855 : 401855: 48 83 ec 08 sub $0x8,%rsp 401859: 89 fa mov %edi,%edx 40185b: c7 05 97 2c 20 00 02 movl $0x2,0x202c97(%rip) # 6044fc 401862: 00 00 00 401865: 39 3d 99 2c 20 00 cmp %edi,0x202c99(%rip) # 604504 // $edi 레지스터와 Cookie값비교. 40186b: 74 28 je 401895 // cookie 값을 비교하여 fail할지 success할지 분기 touch2함수 ..
2019.11.18 -
Attack Lab - Phase 1 풀이
시스템 소프트웨어 수업 과제로 나온 Attack Lab 을 해결하며 풀이를 업로드하려고 한다. CTARGET 프로그램과 우리가 목표로 실행시켜야 하는 touch1 함수는 이렇게 생겼음을 PDF에서 안내해준다. test함수는 별다른 과정없이 getbuf 함수만 실행시키고 끝나므로 getbuf함수를 "objdump -d ctarget > asm.txt" 명령어를 이용해서 살펴보면 아래와 같다. 0000000000401813 : 401813: 48 83 ec 18 sub $0x18,%rsp // 0x18 만큼 스택 할당 401817: 48 89 e7 mov %rsp,%rdi // 첫번째 인자(%rdi)로 0x18만큼 할당된 top주소를 대입 40181a: e8 7e 02 00 00 callq 401a9d //..
2019.11.18