[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 |