본문 바로가기
728x90
반응형

시스템 해킹14

DreamHack - out_of_boundary 풀이 out_of_boundary.c #include #include #include #include #include char name[16]; char *command[10] = { "cat", "ls", "id", "ps", "file ./oob" }; 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); } int main() { int idx; initialize(); printf("Admin name: "); read(0, name.. 2023. 9. 8.
DreamHack - Mitigation: Stack Canary 실습 문제(카나리 값 구하기) https://learn.dreamhack.io/112#p2477 로그인 | Dreamhack dreamhack.io 우선 a를 8개 이하로 입력할 경우 아무런 문제는 없어 보인다. 만일 a를 9개를 입력하게 된다면 뒷부분에 tTc(xU8라는 이상한 값이 붙는다. 메모리를 눈으로 확인하면 카나리 영역에는 저런 식으로 값이 저장돼있는 것이다. 왜 a를 8개를 입력하면 카나리 값이 출력이 되지 않는가? 그 이유는 카나리에 문자 끝 부분에는 \x00인 즉 NULL을 가지고 있기 때문에 printf 출력을 하면 문자의 끝으로 인식이 되어 카나리 값이 함께 출력되지 않은 것이다. 그러므로 카나리를 유추하기 위해서는 \x00 부분을 다른 문자로 덮어 씌어서 나머지 7바이트를 가져오고 \x00을 그 앞에다 붙이면 진.. 2023. 5. 1.
DreamHack - Return to Shellcode 풀이 r2s.c // Name: r2s.c // Compile: gcc -o r2s r2s.c -zexecstack #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); printf("Input: "); fflush(stdout); read(0, buf, 0x1.. 2023. 5. 1.
DreamHack - Quiz: x86 Assembly 1 문제 end로 점프하면 프로그램이 종료된다고 가정하자. 프로그램이 종료됐을 때, 0x400000 부터 0x400019까지의 데이터를 대응되는 아스키 문자로 변환하면 어느 문자열이 나오는가? [Register] rcx = 0 rdx = 0 rsi = 0x400000 ======================= [Memory] 0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10 0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x43 0x55 0x5d 0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c 0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00 =============.. 2023. 5. 1.
DreamHack - Return Address Overwrite rao.c // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void 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; } 버퍼의 사이즈는 0x28(40 bytes)이며, get_shell() 함수로 return 하.. 2023. 4. 30.
DreamHack - basic_exploitation_000 풀이 basic_exploitation_000.c #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); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); printf("buf = (%p)\n", buf); scanf("%141s", buf); return 0; } 사용자로부터 141 바이트 크기의 문자열을 입.. 2023. 4. 26.
DreamHack - basic_exploitation_001 풀이 checksec으로 파일 보호 기법들 확인 NX(No-eXecute) 보호 기법이 활성화되어 있으므로, 쉘 코드는 실행되지 않지만, Stack Canary가 활성화되지 않은 것으로 보아 Return Address Overwrite에 취약하다는 것을 알 수 있다. basic_exploitation_001.c 분석 #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); } vo.. 2023. 4. 25.
FTZ - level 9 hint 다음은 /usr/bin/bof의 소스이다. #include #include #include main(){ char buf2[10]; char buf[10]; printf("It can be overflow : "); fgets(buf,40,stdin); if ( strncmp(buf2, "go", 2) == 0 ) { printf("Good Skill!\n"); setreuid( 3010, 3010 ); system("/bin/bash"); } } 이를 이용하여 level10의 권한을 얻어라. 버퍼 오버플로우에 관한 문제이다. fgets 함수로 사용자로부터 최대 40바이트 크기의 입력을 받고 있다. 문제는 buf2와 buf 변수의 사이즈는 10 밖에 안되기 때문에 버퍼가 오버플로우 돼서 프로그램.. 2023. 3. 15.
FTZ - level 8 with ChatGPT 오랜만에 FTZ를 풀어보기로 했다. 최근에 ChatGPT에 재미가 들려서 내가 많이 무지한 시스템 해킹에 관련한 질문들을 하면 챗봇 인공지능이 이해하기 쉬운 답변을 해줬는데 그 과정에 시스템 해킹에 흥미가 달아올라 다시 이어서 풀어보기로 한 것이다. 아무튼 level8에 로그인하여 힌트를 살펴보니 level9의 shadow 파일이 어딘가에 숨겨져 있다는 것과 사이즈는 2700이란 내용이다. shadow 파일이란? shadow 파일은 사용자 계정의 패스워드가 단방향 암호화인 해시 함수를 통해 암호화한 상태로 저장이 되는 아주 중요히 다뤄야 하는 파일이다. /etc/shadow 파일에 저장된다. 일반적으로 루트 권한만 열람이 가능하며, 일반 유저는 열어볼 수 없다. 사용자가 로그인을 할 때는 쉐도우 파일을 .. 2023. 3. 15.
시스템 보안 - Autorun Attack, USB, CD 저장 장치를 자동으로 실행시키는 텍스트 파일(Autorun.inf) "autorun.inf"은 Windows 계열에서 작동 가능한 파일이며 플로피디스크, CD, USB 같은 저장 장치를 컴퓨터 연결 시에 자동으로 프로그램을 실행시키는 기능을 가지고 있다. (그 외에도 저장장치의 아이콘이나 이름을 설정하는데도 사용됨) 주로 setup.exe 같은 설치 프로그램을 자동으로 실행시키는 목적으로 쓰인다. 당연하겠지만 바이러스를 실행시키는 일이 생겨나고부터는 Windows 7부터 기본적으로 USB는 자동 프로그램 실행 기능을 막아두었다. ⭐ 직접 해보기 [autorun] icon=icon.ico label=My USB open=setup.exe icon: 저장 장치에 표시될 아이콘 지정 label: 저장 장치에 표시될 이름 지정(한글은 깨진다) open: 저장 장치 연결 시에 자.. 2022. 8. 26.
시스템 해킹 - 바이러스 검사해주는 사이트(VirusTotal) 주소 https://www.virustotal.com/gui/home/upload VirusTotal Analyse suspicious files and URLs to detect types of malware, automatically share them with the security community www.virustotal.com 바이러스 토탈은 구글의 자회사로, 바이러스나 웜 트로이 등을 검사하고 막는 사이트이다. 이 사이트는 여러 개의 백신 엔진으로 검사하여 그 결과를 투명하게 보여준다. 게다가 여러 개의 파일 검사도 가능하다. 파일형식에 따라 해당 파일을 분석한 결과를 보여주기도 한다. 가령 안드로이드용 어플리케이션 파일(APK 파일)을 올리면 권한, 액티비티, 서비스, 서명, 압축파일 속.. 2022. 8. 24.
시스템 해킹 - TPM이란? TPM(Trusted Platform Module) TPM은 하드웨어적으로 여러 가지 보안 기능을 제공하기 위한 모듈이다. 백신과 다르게 소프트웨어가 아닌 하드웨어이기 때문에 공격자가 TPM을 조작하는 것이 거의 불가능하다. TPM에서는 암호화 키 생성기(RSA, SHA-1, 난수생성)를 통해서 암호화 키를 생성함과 동시에 이 키를 비휘발성 메모리에다가 안전하게 보관한다. 디스크 암호화 소프트웨어로 알려진 비트라커 또한 이 TPM에서 만들어진 암호화 키를 통해서 파일의 암호화, 복호화가 이루어진다. 내 PC에서 TPM을 지원하는지 확인하기 Windows 10 PC에 이미 TPM이 있는지 확인하려면 시작 > 설정 > 업데이트 및 보안 > Windows 보안 > 장치 보안으로 이동합니다. 이 섹션이 있는 경.. 2022. 8. 21.
728x90
반응형