FTZ level13pw : it is like this 이번에도 NOP Sled로 풀까 했지만 해킹은 재밌는 방법이 많은걸요! 그래서 RTL기법을 이용해서 풀겠습니다. 먼저 hint를 보겠습니다. 코드를 보니 감이 오시나요? 여기에도 당연히 argv로 값을 받는데 검사를 하지 않으니 BOF가 일어나네요. 하지만 i라는 요상한 놈이 생겼습니다. i의 값이 0x1234567이 아니면 kill함수를 실행하는군요.. 저희는 bof로 ret을 조작해야하는데 bof를 하면 i값도 덮혀져서 저희의 목표를 이루지 못할 것 같습니다. 하지만 bof를 하면서 i의 값 부분을 0x1234567로 해주면 우회가 가능하겠죠?저는 이렇게 i값도 같이 컨트롤해서 ret에 도달할 것 입니다.하지만 기존 NOP sled방식말고 RT..
FTZ level 12pw : it is like this 레벨 12입니다. 레벨 11에서 한 bof와 공격방법은 비슷합니다. 먼저 힌트를 보겠습니다. 아까와 달라진 점이 보이시나요?argv로 입력을 받지 않고 gets함수로 입력을 받습니다. 당연히 버퍼오버플로우 취약점은 존재합니다. str의 크기도 똑같군요. 디버깅을 하기위해 tmp폴더로 옮겨주도록 하겠습니다. 어셈블리 코드를 보겠습니다. 아까와 같이 0x108(264)만큼의 스택 프레임이 형성되어 있습니다. gets 함수로 바뀌면서 아까와는 다른 방식으로 공격을 해야하는데요. 이번에도 NOP sled 로 풀어보겠습니다. 공격 시나리오를 생각해보겠습니다. 먼저 level11과 같은 스택 구조이기 때문에 227개의 nop과 25바이트의 shellcode..
FTZ level11pw : what!@#$? 드디어 이제부터 bof를 익히는 11레벨입니다. 먼저 ls명령을 통해 확인해보겠습니다. attackme 라는 setuid가 걸린 파일과 hint가 있군요! 힌트를 보겠습니다. argv[1]을 str변수안에 strcpy를 합니다. 여기서 bof취약점이 발생하게됩니다. 리턴 어드레스를 덮어서 값을 수정해 쉘코드가 있는 부분으로 점프해주면 되겠네요. NOP sled 방식으로 풀어보겠습니다. 디버깅을 하기위해 tmp폴더로 attackme파일을 옮기겠습니다. 그 후, gdb로 분석하도록 하겠습니다. 인텔로 바꾼 뒤 분석해보겠습니다. 0x108만큼 스택 프레임을 구성합니다. 264바이트입니다. 아까 str변수가 256바이트로 선언되어있으니 dummy는 8바이트 입니다...
FTZ level10pw : interesting to hack! 레벨10입니다. 먼저 힌트를 보겠습니다. ? 공유메모리 ? 무엇인가 어려워 보입니다.공유 메모리에 대해 공부해보겠습니다. 보통 프로세스에서 사용되는 메모리영역은 해당 프로세스만이 사용할 수 있는데요. 하지만 때때로 여러개의 프로세스가 특정 메모리영역을 사용해야하는 때가 있습니다. 공유메모리를 위해 사용하는 함수가 대표적으로 shmget, shmat 함수가 있습니다. 공유메모리에 대한 개념과 사용법에 대해서는 아래링크를 참고해주세요.http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/IPC/SharedMemory 중요한 부분은 key_t의 값인데요, key_t의 값..
FTZ level9pw : apple 레벨 9입니다. 먼저 힌트를 보겠습니다. 재밌어보이는 코드가 나왔습니다. fgets로 40바이트 만큼 크기가 10인 buf에 입력을 받네요.ㅋㅋㅋ 이것은 버퍼 오버플로우가 발생합니다. 그리고 buf2의 첫 2바이트가 “go”이면 쉘을 실행시켜줍니다. 버퍼 오버플로우로 buf2의 값을 수정하면 될 것 같습니다.참고로 알아야 할 것이 있습니다. ‘먼저 선언된 변수는 높은 주소를 가진다’ 라는 것 인데요.따라 메모리상에서 | buf | buf2|low high address 이렇게 배정이 됩니다. 메모리에서 변수는 2의 승만큼 배정되기 때문에 10바이트를 선언하니 16바이트가 메모리에 배정되죠. 따라서 buf[16]을 입력하고 go라는 문자열을 입력하면 되겠죠? 쉘이 실행..
FTZ level8pw : break the world 레벨 8입니다. 먼저 hint를 확인하겠습니다. shadow 파일이 서버 어딘가에 숨어있다고 합니다.용량이 2700이라네요. find 명령어를 이용해 찾아보도록 하겠습니다. 먼저 find 명령에 대해서 알아보도록 하겠습니다. find [찾고자하는 디렉토리] [옵션]find [찾고자하는 디렉토리] -size [찾을용량][단위] [단위]: b [512byte]: c [byte]: k [kbyte]: w [2byte] 이제 find명령어를 이용해 찾아보겠습니다. 4개의 파일이 나옵니다. found.txt라는 파일이 의심이 되는군요. 오잉 이상한 문자열들이 반복해서 적혀있습니다. 문제에 있는 힌트인 shadow 파일에 대해서 찾아보면 password 부분은..
정적 라이브러리와 공유 라이브러리 정적 라이브러리(Static Library) 여러 프로그램에서 사용되는 함수를 포함하는 오브젝트 파일들을 ar명령을 이용하여 하나의 아카이브 파일로 모아놓은 것. 정적 라이브러리 생성 gcc를 이용하여 오브젝트 코드 생성. ar 프로그램을 이용하여 라이브러리 파일(.a) 생성 (명령어 ar rv [.a] [.o]) 정적 라이브러리를 포함하여 컴파일 옵션 : gcc [.c] -o [프로그램명] [.a] 특징링커는 지정된 정적 라이브러리에서 해당 심볼을 정의하고 있는 오브젝트 파일의 사본을 추출해서 실행 파일 내에 포함시킴. 정적 라이브러리를 이용하여 실행 파일을 생성하면 해당 실행 파일 내에 라이브러리 함수의 코드가 포함 됨. 따라서 다른 시스템에서도 잘 동작함. 각각의 ..
linux 환경에서의 메모리 보호기법들 2 (RELRO) RELEO : Relocation Read-Only GOT overwrite 와 같은 공격에 대비하여 ELF 바이너리 또는 프로세스의 데이터 섹션을 보호하는 기술메모리가 변경되는 것을 보호하는 기술 RELRO에는 Partial RELRO 와 Full RELRO 두 가지 모드가 있음 Partial RELRO컴파일 옵션 : gcc -WI, -z, relroGOT 상태 : Writable특징 : 함수 호출 시 해당 함수의 주소를 알아옴Full RELRO컴파일 옵션 : gcc -WI, -z, relro, -z, nowGOT 상태 : Read-Only특징 : ELF 실행 시 GOT에 모든 라이브러리 주소 바인딩 Full-RELRO를 적용하면 .ctors, ..
- fsop
- hacking
- oob
- fastbindup
- 본선가고싶다
- stack reusing
- SQLi
- tcache
- shellcoding
- codegate
- rt_sigreturn
- overflow
- pwnable.tw
- FSB
- HackCTF
- ebp change
- pwnable
- fastbin
- 해킹
- exit
- TLS
- srop
- pwable
- heap
- glibc
- Total
- Today
- Yesterday