반응형
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 |
댓글