[dreamhack] basic_exploitation_000

2023. 9. 4. 18:27포너블

앞으로 dreamhack 문제를 풀이하고자 한다. 오늘 풀어볼 문제는 basic_exploitation_000 이라는 문제이다.

해당 바이너리, 소스코드를 이용해서 취약점을 찾고 익스플로잇하여 쉘을 획득하는 것이 목표이다. 

main함수를 살펴보면 buf애 0x80만큼의 데이터를 할당하고 buf의 주소를 출력해주는 것을 확인할 수 있다. 그리고 buf의 크기는 0x80(=128)이자만 141만큼의 입력을 받음으로써 버퍼오버플로우 취약점이 발생한다는 사실을 알 수 있다. 이를 통해 페이로드를 구성해볼 수 있다. 먼저 0x80-len(shellcode) 만큼의 크기를 '\x90'로 채워주고 shellcode를 더해주고 함수 처음에 push ebp를 4바이트이기 때문에 4바이트도 '\x90'로 채워주겠다. 그리고 마지막 return address를 buf로 설정해주면 쉘코드를 실행됨으로써 쉘을 획득할 수 있다.

어셈블리코드를 보면 처음 push ebp하는 것을 확인할 수 있다. 이는 sfp로 ret주소 앞에 위치하는 값이므로 shellcode 주소 거리 계산시 +4바이트를 고려해줘야된다. 따라서 0x80+4 = 132를 기준으로 shellcode 길이를 빼줘야된다.

그림으로 페이로드를 구성하면 위 사진과 같다. 이렇게 페이로드를 구성하고 아래 사진처럼 코드를 작성하면 쉘을 획득할 수 있다.

shell이 정상적으로 실행되는 것을 확인할 수 있다.

'포너블' 카테고리의 다른 글

format string bug 32bit  (0) 2023.09.30
Dreamhack - oneshot  (0) 2023.09.24
Dreamhack - basic_rop_x64  (0) 2023.09.23
Dreamhack - basic_rop_x86  (0) 2023.09.16
Plaid CTF ropasaurusrex  (0) 2023.09.16