본문 바로가기

분류 전체보기

(157)
[Dreamhack] cmd_center #include #include #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { char cmd_ip[256] = "ifconfig"; int dummy; char center_name[24]; init(); printf("Center name: "); read(0, center_name, 100); if( !strncmp(cmd_ip, "ifconfig", 8)) { system(cmd_ip); } else { printf("Something is wrong!\n"); } exit(0); } system 함수로 명령어 실행 -> Command Injection 발생 위험 rea..
[Dreamhack] sint #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main() { char buf[256]; int size; initialize(); signal(SIGSEGV, get_shell); printf("Size: "); scanf("%d", &size); if (size > 256 || s..
[SWING] Pwnable 06 - Path Traversal Path Traversal 권한 없는 경로에 프로세스가 접근할 수 있는 취약점 리눅스 파일 시스템이 아닌 서비스 로직 관점에서의 권한 사용자가 접근하려는 경로에 대한 검사가 미흡하여 발생 임의 파일 읽기 및 쓰기의 수단을으로 활용될 가능 #include #include #include const int kMaxNameLen = 0x100; const int kMaxPathLen = 0x200; const int kMaxDataLen = 0x1000; const char *kBasepath = "/tmp"; int main() { char file_name[kMaxNameLen]; char file_path[kMaxPathLen]; char data[kMaxDataLen]; FILE *fp = NULL; ..
[SWING] Pwnable 06 - Command Injection 프로그램을 개발할 때 어떤 기능을 구현함에 있어서, 스스로 코드를 작성하기보다 system 함수로 이미 설치된 소프트웨어를 사용하는 것이 훨씬 쉽다는 것은 자명하다. 그러나 함수의 인자를 셸 명령어로 전달하기에, 명령어를 실행해주는 함수를 잘못 사용하면 취약점이 발생한다. Command Injection 사용자의 입력을 시스템 명령어로 실행되게 하는 것 명령어를 실행하는 함수에 사용자가 임의의 인자를 전달할 수 있을 때 발생 임의 IP에 ping을 전송하기: system("ping [user-input]") 임의 파일 읽기: system("cat [user-input]") 사용자의 입력을 제대로 검사하지 않으면 메타 문자 때문에 임의 명령어가 실행 ping [user-input] 실행 시 공격자가 a; ..
[SWING] Pwnable 06 - Type Error 자료형 C언어 자료형 자료형 크기 범위 용도 (signed) char 1 바이트 정수, 문자 unsigned char (signed) short (int) 2 바이트 정수 unsigned short (int) (signed) int 4 바이트 정수 unsigned int size_t 32bit: 4 바이트 64bit: 8 바이트 생략 부호 없는 정수 (signed) long 32bit: 4 바이트 64bit: 8 바이트 정수 unsigned long (signed) long long 32bit: 8 바이트 64bit: 8 바이트 정수 unsigned long long float 4 바이트 실수 double 8 바이트 실수 Type * 32bit: 4 바이트 64bit: 8 바이트 주소 같은 자료형이더라도..
[pwnable.kr] unlink 저 파일들을 로컬 환경에 다운받으려고 설쳤는데... 굳이 그러지 않아도 되었던 것 같다. #include #include #include typedef struct tagOBJ{ struct tagOBJ* fd; struct tagOBJ* bk; char buf[8]; }OBJ; void shell(){ system("/bin/sh"); } void unlink(OBJ* P){ OBJ* BK; OBJ* FD; BK=P->bk; FD=P->fd; FD->bk=BK; BK->fd=FD; } int main(int argc, char* argv[]){ malloc(1024); OBJ* A = (OBJ*)malloc(sizeof(OBJ)); OBJ* B = (OBJ*)malloc(sizeof(OBJ)); OBJ..
[Dreamhack] tcache_dup Canary와 NX 보호 기법이 걸려 있다. Partial RELRO -> GOT overwrite로 풀 수 있을지도? // gcc -o tcache_dup tcache_dup.c -no-pie #include #include #include #include char *ptr[10]; void alarm_handler() { exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int create(int cnt) { int size; if (cnt > 10) { return -1; } printf("Si..
[SWING] Pwnable 05 - Tcache Poisoning Tcache Poisoning tcache를 조작하여 임의 주소에 청크를 할당시키는 공격 기법 중복 연결된 청크를 재할당하면, 할당된 청크인 동시에 해제된 청크가 된다. 아래 그림에서 왼쪽은 할당된 청크의 레이아웃이고, 오른쪽은 해제된 청크의 레이아웃이다. 할당된 청크에서는 데이터를 저장하는 부분을, 해제된 청크에서는 fd 값과 bk 값을 저장하는데 사용한다. 공격자가 중첩 상태인 청크에 임의의 값을 씀으로써, fd와 bk를 조작할 수 있으며, ptmalloc2의 free list에 임의 주소를 추가할 수 있다. 그리고 ptmalloc2이 동적 할당 요청에 free list 청크를 먼저 반환하는 것을 이용하면, 임의 주소에 청크를 할당할 수 있다. 할당한 청크에 값을 출력/조작 -> 임의 주소 읽기(Ar..