System Hacking Advanced

System Hacking Advanced

[dreamhack] rop

ROP(Return Oriented Programming) ROP(Return Oriented Programming)ROP(Return Oriented Programming)ROP는 ASLR과 같은 메모리 보호기법을 우회하기 위한 공격기법으로 return이 포함된 코드 조각들인 가젯들을 이용해 system(“/bin/bash”)를 실행하는 프로그램을 해커가 임의keyme2003.tistory.com └─# checksec rop[*] '/root/dream/rop/rop' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x40..

System Hacking Advanced

[dreamhack] Return to Library

Return to Library#include #include const char* binsh = "/bin/sh";int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Add system function to plt's entry system("echo 'system@plt"); // Leak canary printf("[1] Leak Canary\n"); printf("Buf: "); read(0, buf, 0x100); printf("Buf: %s\n", buf); // Overwrite return address printf("[2] Overwrite return ..

System Hacking Advanced

[dreamhack] Return to Shellcode

checksec└─# checksec r2s[*] '/root/dream/rts/r2s' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX disabled PIE: PIE enabled RWX: Has RWX segmentsNX 보호기법이 적용되지 않았다. 따라서 쉘코드를 이용한 공격이 가능하다. 문제분석 & 풀이int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n",(char*)__bu..

System Hacking Advanced

[dreamhack] basic_rop_x64

문제분석int main(int argc, char *argv[]) { char buf[0x40] = {}; initialize(); read(0, buf, 0x400); write(1, buf, sizeof(buf)); return 0;}○ 코드 분석buf[0x40] 선언read(0, buf, 0x400)buf에 0x400 크기 입력write(1, buf, sizeof(buf))buf 출력ROP 체인을 구성해서 system("/bin/sh")를 실행하는 것이 목표다. 필자는 풀이 과정에서 __libc_csu_init() 가젯을 활용할 예정이다. __libc_csu_init()에 대해서 공부하고자 해당 개념을 이용한 풀이를 작성했다. ○ JIT-ROP__libc_csu_init(..

System Hacking Advanced

[dreamhack] ssp_001

SSP 개념SSP(Stack Smashing Protector) SSP(Stack Smashing Protector)SSP는 BOF를 방어하기 위한 보호기법 중 하나로 함수를 실행할 때, canary라는 랜덤 값을 스택에 추가하여 BOF로 스택 데이터가 변조됐는지 확인하는 방법이다. canary가 변조된 경우는 스택 데이터가keyme2003.tistory.com ssp_001#include #include #include #include void get_shell() { system("/bin/sh");}void print_box(unsigned char *box, int idx) { printf("Element of index %d is : %02x\n", idx, box[idx]);}voi..

System Hacking Advanced

[dreamhack] Return Address Overwrite

Return Address Overwritevoid get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0;}scanf("%s", buf)에서 길이 검증이 없다. 따라서 BOF가 발생한다. BOF 취약점을 이용해서 RET을 get_shell() 주소로 덮으면 쉘을 얻을 수 있다. gdb로 get_shell 주소를 구했다. 다음으로 buf ~ RET 거리를 구해보자. 를 보면 scanf() 호출 전에 [rbp-0x30]를 rax에 넣고 이를 ..

keyme
'System Hacking Advanced' 카테고리의 글 목록 (6 Page)