본문 바로가기

IT(개발, 보안)/pwnable

[Pwnable 풀이] 7. bof

 

분노의 bof 문제풀이... 인터넷 상에 다른 분들이 풀이 해놓은 거랑 차이점을 못찾겠는데 결과가 나오질 않아서 끙끙대다가 일단 풀이 공유하고 혹시 차이점을 알려주실수 있으시다면 댓글 부탁드리겠습니다....

 

이번 문제는 Buffer Over Flow(BOF) 문제인데 두개 소스파일을 다운받고 nc를 사용해 서버에 접속해 flag를 확인하는 형식의 문제입니다. gdb를 사용해 실행파일을 분석하므로 Virtual box를 사용해 가상시스템상에서 풀이를 진행했습니다.

 

일단 wget을 사용해 두개 파일을 다운받아주고 먼저 bof.c 소스코드를 확인해 봤습니다.

전체적으로 간단한 구성으로 메인 함수는 0xdeadbeef 를 인자로 func 함수를 호출하고 func 함수에서는 overflow 변수에 gets로 값을 저장하고 인자로 받은 key 값이 0xcafebabe인 경우 시스템의 쉘을 얻을 수 있는 것으로 보입니다.

 

버퍼오버플로우 공격이란 간단하게 버퍼에 값을 저장하는 그 크기가 버퍼의 크기를 넘어설경우 메모리 상에 다른 값들을 overwrite 함으로써 생기는 취약점으로 생소하신 분들은 아래 블로그를 참고 바랍니다.

https://mokpo.tistory.com/376?category=457117

 

BOF공격(Buffer Overflow Attack) 실습 및 개념 정리

BOF(Buffer Overflow)란? 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메로리의 범위를 넘어선 위치에 자료를 읽거나 쓰려고 할 때 발생. 영향도 버퍼 오버플로우가 발생하게 되면 프로그램

mokpo.tistory.com

 

현재 문제에서 우리가 해야하는 목표는 key 값에 저장된 0xdeadbeef 를 0xcafebabe로 overwrite 시켜 시스템의 쉘을 탈취하는 것입니다. 이를 버퍼 오버플로우 공격으로 해결하기 위해 gdb로 func 함수의 스택 구조를 확인해봐야합니다.

 

6번 라인과 75, 78번 라인을 확인해보면 eax에 gs:0x14 값을 저장하고 이를 함수를 끝내기 전 확인함을 볼 수 있습니다. 이는 함수의 canary value로 이는 BOF 공격의 대응책 중 하나로 해당 값이 변조 되었는지 확인해서 BOF 공격이 발생한 여부를 확인합니다. 일반적인 상황에서는 해당 대응책에 대비한 공격방법을 고안해내야 하지만 해당 문제에서는 canary value의 변조 여부를 확인하기 전 시스템의 쉘을 탈취하기 때문에 따로 대응법을 생각하지 않아도 됩니다.

 

소스코드와 어셈블리코드를 함께 보면서 follow up 해가다 보면 ebp-0x2c 위치에 overflow 변수가 존재하고, 함수의 인자인 key값은 ebp+0x8 위치에 존재함을 확인할 수 있습니다. 두 주소간 차이는 0x34, 10진수로는 52바이트가 됩니다.

 

그렇다면 overflow 변수에 52바이트 크기의 의미 없는 문자열과 마지막에 0xcafebabe 값을 추가해 입력값으로 주게 된다면 시스템의 쉘을 탈취 할 수 있을 것입니다. 해당 페이로드를 작성하는 데에는 파이썬의 도움으로 쉽게 작성이 가능합니다.

 

페이로드를 작성할때는 리틀 엔디안에 유의하며 작성하고 이를 |(파이프)를 사용해 nc 명령어의 입력으로 주면....! 다른 분들의 해답에서는 다 정상적으로 작동했는데 왜 안되는지 모르겠네요...ㅠ

 

제가 참고한 다른 블로거 분들의 풀이입니다. 혹시 왜 이러는지 아시는분 계시다면 댓글부탁드리겠습니다...ㅠ

https://outoftheblackbox.site/pwnable.kr-3_bof/

 

[pwnable.kr]3_bof

첫인상

outoftheblackbox.site

https://marcokhan.tistory.com/223

 

[pwnable.kr] bof 풀이, write-up

pwnable.kr --- bof cmd에 nc pwnable.kr 9000을 입력하면 접속할 수 있다. 이번 문제는 nc를 이용해 문제를 푼다. 따라서 ssh 접속과 다르게 cat으로 값을 넘겨 주어야 한다. 우분투에서 wget을 통해서 문제와

marcokhan.tistory.com

https://blueochild.tistory.com/9

 

[ pwnable.kr ] bof 문제풀이

이번에 풀어볼 문제는 bof문제이다 bof는 buffer over flow공격 기법으로 많이 알려진 공격기법의 명칭이다. 우선 들어가기 전에 이전문제들과는 다른 화면을 볼 수 있다. 본래라면 연결할 주소만 줄

blueochild.tistory.com

 

반응형

'IT(개발, 보안) > pwnable' 카테고리의 다른 글

[Pwnable 풀이] 9. random  (2) 2022.11.29
[Pwnable 풀이] 8. passcode  (0) 2022.11.28
[Pwnable 풀이] 6. flag  (0) 2022.11.19
[Pwnable 풀이] 5. cmd1  (0) 2022.11.15
[Pwnable 풀이] 4. shellshock  (0) 2022.11.10