runner 디버깅시 segmentation fault 질문입니다.

runner를 gdb를 이용해서 제 쉘코드가 잘 작동하는지 살펴 볼려고 했습니다만 어떠한 쉘코드를 넣어도 쉘코드 첫 실행 구문부터 Program received signal SIGSEGV, Segmentation fault. 발생하며 멈춰버리더군요. 그래서 제 쉘코드가 잘못됐나 싶어서 자주 사용되는 shellcode들도 가지고 와서 넣어서 실행해봤는데 이 코드들도 마찬가지로 shellcode 첫줄 부터 Program received signal SIGSEGV, Segmentation fault를 발생하면서 멈춥니다. 그래서 컴파일 할 때 스택에 실행 권한을 안 준건가 싶어서 확인해 봤지만 make파일에 -z exestack 옵션이 있었으며, runner파일 자체도 /proc/pid/maps로 확인했을때 stack에 실행권한이 있는 것을 확인했습니다.
이제 더 이상 구글 검색과 제가 가지고 있는 지식으로는 못 풀 것 같아 질문을 올리게 되었습니다. 이 문제를 어떻게 해결하면 좋을까요?

(수정)
질문용 1.PNG
계산식을 풀어내는 코드를 c언어로 만든것이고
질문용 2.PNG
위 코드를 gcc -c로 오브젝트파일을 만들어서 objdunp -d로 코드를 뽑아내서 답안을 제출했을때의 사진입니다.그래서 왜 작동하지 않나 궁금해서 디버깅을 실시하였습니다.

--답안 코드 --
f30f1efa554889e54883ec20897dec488975e08b45ec83e8028945f8c745f400000000c745f000000000eb678b45f048984883c002488d14c500000000488b45e04801d0488b004889c7e8000000008945fc8b4dfc4863c14869c05655555548c1e8204889c289c8c1f81f89d629c689f089c201d201c289c829d085c075088b45fc0145f4eb088b45fc01c00145f48345f0018b45f03b45f87c918b45f44863d04869d21f85eb5148c1ea2089d1c1f9059929d189ca6bd26429d08945f48b45f4c9c3
질문용 3.PNG
위 사진처럼 그냥 코드 첫줄 부터 segementation fault를 발생하였습니다.
질문용 4.PNG
제코드가 잘못된건가 싶어서 그냥 ret만 하는 코드 c3 만을 넣었는대도 그냥 segementation fault가 발생하였습니다.

#reversing
작성자 정보
답변 3
avatar
믕믕이부하
대표 업적 없음

system('/bin/sh') 역할을 하는 쉘코드를 이용해서 푸는 문제가 아닙니다. 내부적으로 세콤프 필터가 걸려있어서 서버 침투용 쉘코드는 작동하지 않습니다.

설명대로 수학 문제를 푸는 쉘코드를 만드셔야해요.

2022.01.07. 21:00
avatar
Sechack
CTF First Place

vmmap찍어보시면 힙 영역에 실행권한이 없어서 그렇습니다. 그래서 저는 문제 소스코드에서 mprotect한줄 추가해줘서 실행권한 주니까 되더라고요.

2022.01.08. 20:18
avatar
믕믕이부하
대표 업적 없음

다시 답변 드립니다.

일단 로컬에서 직접 파일을 실행해서 하신 것 같으신데 nc host1.dreamhack.games xxxxx(포트) 를 통해서 서버에 직접 값을 넘겨주세요. 단일 바이너리 파일 실행으로 되는게 아니라서 여러가지 이유로 로컬에서 오류가 날 수 있습니다.

제목 없음.png

서버에서 해당 코드를 실행 결과 제대로 실행되긴 합니다만 결과 값이 다르네요.

아마 main에 그대로 코드를 짜서 그런것 같습니다. 따로 함수를 만들어서 실제 실행되는 형태 그대로 하셔야 정상적인 결과가 나올 것 같습니다. 아니면 직접 opcode를 이용해서 어셈블리어 코드를 짜시는 방법도 있습니다.

2022.01.09. 04:35
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기