[Hack CTF - Basic_BOF #2]
Wargmae/HackCTF

[Hack CTF - Basic_BOF #2]

728x90

 

Execute

bof_basic 실행 결과

문제로 주어진 bof_baasic2파일을 실행하면 입력을 받고 뭔가 알 수 없는 값들을 출력해주고 프로그램이 종료된다. 정확히 어떤 값을 입력하고 출력하는 것 인지 확인 하기위해 IDA에 올려 프로그램을 분석해보자

 

Analyze

 

해당 프로그램에 걸려있는 보호기법은 아래와 같다. Nxbit  걸려있는 것을 확인 할 수 있다.

 

Mitigation

 

 

Main

main 함수

  • Line 6 : 포인터 변수인 v5sup함수의 시작주소를 대입해준다.
  • Line 7 : fgets함수로 변수 s133byte만큼 입력을 받는다.
  • Line 8 : v5변수에 들어있는 함수(sup)를 실행 시킨다.

 

sup

sup함수

puts함수를 이용해 s변수의 주소를 출력한다. 앞서 입력했을때 출력되는 알 수 없는 값은 위 코드로 인해 실행되는것 같다.

 

Shell

shell함수

쉘을 실행 시켜준다.

 

 

main함수에서 함수 포인터인 v5sup의 주소를 대입해주는데 만약 buffer overflow를 통해 v5shell함수의 주소를 덮어쓸 수 있다면 성공적으로 shell을 획득 할 수 있을 것이다.

 


 

 

Solve

먼저 buffer overflow를 트리거 하기위해 필요한 dummy의 길이를 계산 해야 한다. s변수와 v5변수 사이거리를 계산해보자.

변수의 선언 위치
dummy 계산

s변수의 경우 ebp-8C의 위치에 v5의 경우 ebp-C에 위치한다. 둘 사이의 거리를 계산해주면 0x80이 계산된다. 따라서 0x80만큼의 dummyshell함수의 주소 값을 붙여주면 문제를 해결 할 수 있을 것이다.

 

shell함수의 주소는 아래와 같다.

shell함수의 주소

 

따라서 payloaddummy*0x80 + p32(0x0804849B)의 형태가 될것이다. 여기까지의 결론을 가지고 pwntools를 이용해 exploit을 작성해보자.

 

 

 

성공적으로 shell을 얻어 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
[HackCTF - offset]  (0) 2021.01.02
[Hack CTF - Basic_BOF # 1]  (0) 2021.01.02