Wargame/HackCTF

내 버퍼가 흘러 넘친다!!! Write-Up

LikeMermaid 2021. 9. 16. 03:49
728x90

1. 내 버퍼가 흘러 넘친다!!!

1.1 파일 분석

- file 명령어로 prob1 파일의 종류를 확인해보니 32bit ELF 파일임

 

- prob1 파일을 실행해보니 Name, input을 2번에 걸쳐 값을 입력받음

 

- ida로 코드를 디컴파일하여 확인해보니 2가지 포인트를 알 수 있었음
point 1. read함수를 통해 name에 0x32(50bytes)만큼 값을 입력받을 수 있음
point 2. get함수를 통해 s에 20bytes보다 많은 값을 입력받을 수 있음

 

- ida에서 Name 변수를 확인해보니 bss영역에 위치한 것으로 보아 전역변수임을 알 수 있음. 이를 통해 ASLR이 적용되어 있는 스택영역이 아닌 bss영역에 shellcode를 삽입하여 RTS(Return To Shellcode) 공격 기법을 사용하여 문제를 해결할 수 있었음

RTS 공격 기법 : 함수의 기존 Return Address를 Shellcode가 있는 주소로 덮어씌워 함수가 종료되고 복귀 때 Shellcode로 복귀시켜 쉘코드 명령을 실행하게 하는 기법

 

1.2 poc

- 5번째 줄 : remote로 워게임 서버에 접속하기 위한 코드

- 7번째 줄 : 32bit 환경에서 사용할 수 있는 쉘코드

- 11번째 줄 : 문자형으로 선언된 s변수의 20bytes를 덮기 위한 코드

- 12번째 줄 : SFP를 덮기 위한 코드

- 13번째 줄 : 전역변수 Name의 시작 주소를 32bit로 패킹한 코드

- 15번쨰 줄 : payload 코드를 확인하기 위한 출력문 코드

- 17번째 줄 : ':' 라는 데이터를 받은 후 shellcode에 담긴 값을 대상 서버에 전송하는 코드

- 19번째 줄 : ':' 라는 데이터를 받은 후 payload에 담긴 값을 대상 서버에 전송하는 코드

- 21번째 줄 : 대상과 지속적으로 통신하기 위한 코드

 

1.3 결과

- 위에 작성한 코드(poc)로 flag를 따낼 수 있었음

'Wargame > HackCTF' 카테고리의 다른 글

ROP Write-Up  (0) 2021.09.30
RTL_World Write-Up  (0) 2021.09.19
x64 Simple_size_BOF Write-Up  (0) 2021.09.16
x64 Buffer Overflow Write-Up  (0) 2021.09.08
Basic_BOF#2 Write-Up  (0) 2021.09.08