[Hack CTF - Basic_BOF # 1]
Wargmae/HackCTF

[Hack CTF - Basic_BOF # 1]

728x90

Execute

bof_basic 실행 결과

문제 파일을 실행하면 입력을 받고 buf에 들어간 내용을 출력해준 후 check 0x4030201을 출력하여 뭔가의 주소를 출력해준다. 또한 내가 buf에 입력하는 내용이 너무 길다면 buffer overflow가 발생하여 check의 내용이 0x61(a)로 채워지는 것을 알 수 있다.

 


 

 

 

Analyze

 

Mitigat ion

1번 문제인 만큼 NXbit 말고는 보호기법이 걸려있지 않다.

그럼 프로그램의 동작을 분석하기 위해 해당 파일을 IDA에 올려서 확인해보자.

 

Main

main 함수

  • Line 6 : v5변수에 57305985를 대입해준다.
  • Line 7 : fgets함수를 통해 s변수에 45의 길이 만큼 입력을 받는다.
  • Line 8,9 : 앞서 입력한 s변수와 v5의 내용을 출력해준다.
  • Line 10,11 : v567305985-559038737 이 아니라면 you are on the right way를 출력한다.
  • Line 12~17 : v5-559038737인 경우 shell을 실행시켜 준다.(ubuntu의 경우 기본 shellbash가 아니라 dash라고 한다.)

 

먼저 67305985-559038737hex값으로 무엇인지 확인해보자.

67305985

 

-559038737

 

따라서 check에 나오는 0x403020167305985 -559038737 0xdeadbeef인 것이 확인이 되었다. 따라서 buffer overflow가 발생하는 것을 앞서서 확인 할 수 있었으므로 dummy + 0xdeadbeef를 입력해주면 문제가 풀릴것이다.

dummy를 계산하기 위해 변수 sv5사이의 거리를 측정해보자. 각각의 변수가 선언되는 위치는 아래와 같다.

 

변수 선언 위치

 

따라서 0x34-0xC를 계산해주면 dummy의 길이를 알아낼 수 있다.

계산 결과

따라서 dummy40byte만큼 주고 뒤에 0xdeadbeef를 붙여 주어야한다. 당연한 이야기이겠지만 deadbeeflittle-endian 형식으로 입력해야 할 것이다.

 

 


 

 

Solve

 

 

 

성공적으로 flag가 출력된다.

728x90

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

[Hack CTF – x64 Buffer Overflow]  (0) 2021.01.05
[Hack CTF – 내 버퍼가 흘러넘친다!!!]  (1) 2021.01.03
[Hack CTF - Baisc_FSB]  (0) 2021.01.03
[Hack CTF - Basic_BOF #2]  (0) 2021.01.02
[HackCTF - offset]  (0) 2021.01.02