본문 바로가기
[ ★ ]Study/PWNABLE

shellcode 만들기 2부

by nroses-taek 2017. 9. 16.
반응형
1부에 이어서 간단하게 만들어보겠습니다.
 
#include <stdio.h>                                                                                                            
 
int main()
{
    execve("/bin/sh", NULL, NULL);
}
 
gcc -o shell shell.c -static
옵션을 주어서 컴파일 합시다.
 
 
코드를 만들 것이니, 프롤로그 에필로그를 제외하고
execve함수에 관한 자료들만 모으겠습니다.
어셈블리 파일명은
vi shellasm.s
하였습니다. 아래 처럼 입력하여 주세요.
.section .data
 
name: .string ""
 
.section .text
.global _start
 
_start:
순서가 번대로냐 하실텐데, 인자에 관해서 공부좀 하시면 아실거예요.
execve 부르는 시스템 호출 59부터 차례대로 입력해줍니다.
 
다음 입력해줄 명령은
as -o shell.o shellasm.s
ld -o shell shell.o

입니다.
 
실행도 됩니다.
하지만 str함수시리즈에서는 NULL 만나면 종료가 되어버리는 상황이 있죠?
 
 
우리가 만든 것도 NULL 있습니다.
그래서 좋은 쉘코드는 NULL 없다고 하죠.
NULL 없애봅시다. 외국인이 작성한 코드를 참고하였습니다.
자세한 설명은 추후 수정하겠습니다.
 
 
shellasm.s 위와같이 수정해줍니다.
 
그리고 다시
as -o shell.o shellasm.s
ld -o shell shell.o
이러한 과정을 거친후 확인해주면
 
NULL Byte 사라진 것을 확인할 있습니다.
 
실행도 성공적입니다. 이제 마지막 과정이 남았는데,
이제 쉘프로그램이 아니라 원래의 목표인 쉘코드를 만들기인데,
쉘코드는 objdump -d shell 결과입니다.
 
 
부분들을 엮어 주시면 됩니다.
\x48\xbb\x2f ~~ \x0f\x05
 

 

반응형

'[ ★ ]Study > PWNABLE' 카테고리의 다른 글

[Tip] pwntool 함수 offset/plt/got 주소 찾기(pwntools)  (0) 2018.11.06
Double Free Bug(DFB)  (0) 2017.09.18
Use After Free 취약점  (0) 2017.09.16
system call table 정리  (0) 2017.09.16
shellcode 만들기 1부  (2) 2017.09.16

댓글