[HackCTF] Basic_BOF #1
Date | |
---|---|
Tags | report |
1. 문제
1번 문제인 basic_bof를 먼저 실행 시켜보면 다음과 같다
어떠한 동작을 하는 프로그램인지 확인하기 위해 직접 실행을 시켜보았다. hi라는 문자열을 입력하고 엔터를 치니까 다음과 같이 출력이 되었다.
이것만 봐서는 어떠한 동작을 하는 코드인지 모르기 때문에 아이다를 이용하여 바이너리를 뜯어보았다.
아이다의 hex-ray 기능을 이용하여 c언어 코드를 확인할 수 가 있었다.
15번 째 라인을 보면 쉘을 실행시키는 시스템 함수가 들어가 있는 것을 확인 할 수 있었고, 그러기 위해서 12번째 라인의 조건문에 만족하는 조건으로 변경해줘야 한다는 것을 볼 수 있다.
2. 접근방법
3,4 라인에서 1바이트 char형 변수 s와 4바이트 int형 변수 v5가 선언되어있다. 또한 7번 째 라인에서 fgets 함수를 확인 할 수 있는데, 이는 45바이트 까지 입력을 받으므로, 이 부분에서 bof가 일어 날 수 있지 않을까라는 생각을 할 수 가 있다.
현재 메모리 구조는 다음과 같다
ebp 기준으로 0x34 만큼 떨어진 곳에 1바이트 변수 s의 공간이 할당되어 있고, v5는 0xc 크기만큼 할당되어 있다.
fgets 함수가 45바이트 만큼 입력을 받을 수 있으므로, v5 영역에 원하는 값을 bof로 덮을 수 있다
그렇다면 다시 코드를 봐보자. 12번 조건문에서 v5 값이 -559038737 과 같으면 되므로 40바이트를 아무 값으로 채우고 나머지 4바이트를 -559038737 으로 채우면 된다.
여기서 -559038737 는 10진수 값으로, 16진수로 변경하면 0xdeadbeef가 된다.
3. 풀이
4. 몰랐던 개념
1번문제는 기초 문제여서 그런지 어렵지 않게 풀 수 있었다. 단 pwntools 모듈을 이용한 코드를 작성하는 것에 아직 익숙하지 않아서 더 많은 연습이 필요하다.
'워게임 > HackCTF' 카테고리의 다른 글
[HackCTF] g++ (0) | 2020.04.11 |
---|---|
[HackCTF] BOF PIE (0) | 2020.04.11 |
[HackCTF] Basic FSB (0) | 2020.04.11 |
[HackCTF] Baisc BOF 2 (0) | 2020.04.11 |
[HackCTF] 1996 (0) | 2020.04.11 |