BOF
-
[Exploit tutorial] Corelan part 1 : Stack Based OverflowsSystem hacking training/Windows 2018. 10. 3. 10:15
윈도우 Exploit을 공부하던 중 Corelan 팀에서 작성한 문서를 발견했다. 이 글은 Corelan 팀의 문서를 토대로 작성하였다. Easy RM to MP3 Converter에 존재하는 취약점을 예로 exploit을 작성해본다. 해당 취약점은 .m3u 파일을 만든 후 파일을 로드하는 것으로 공격이 가능하다. (스택 기반 오버플로우) [구성환경] OS : Windows XP sp 3 (ENG) Language : python 2.7 Target : Easy RM to MP3 Converter [exploit db] CVE-2009-1330 : https://www.exploit-db.com/exploits/10602/ ETC(N/A) : https://goo.gl/Vc3kFF Ref : https:..
-
[Toddler's Bottle] bof write-upSystem hacking training/pwnable.kr 2018. 7. 1. 22:57
toddler's bottle 의 세번째 문제 bof를 풀이하겠습니다. (사실 순서대로 풀이하려고 했는데 MD5 해쉬 충돌...? collision문제를 아직 풀지 못해서 먼저 작성하겠습니다.) 5pt로 간단한 문제입니다. buffer overflow 는 가장 일반적인 소프트웨어 취약점 중 하나라고 알려주면서 bof 바이너리와 소스코드를 줍니다. 먼저 소스코드를 확인해보면 아래와 같습니다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ prin..
-
LEVEL 13 bugbear write-upSystem hacking training/Hackerschool LOB 2018. 4. 26. 01:54
darkknight -> bugbear [문제 + 힌트] 문제를 보면 bof는 터지지만 argv[1][47]의 값이 bf라면 예외처리가 되며 종료되기 때문에ret에 스택의 주소 말고 다른 영역의 주소를 적어야할것같다. 힌트 부분을 보면 알다시피 이 문제는 RTL을 이용하여 풀면된다. [Link - RTL 이란?] 페이로드는 `python -c 'print "A(dummy)" * 44 + "system() address" + "dummy 값" * 4 + "/bin/sh\00"'` 이런식으로 구성하면 된다. 이 페이로드를 작성하기 위해 준비물이 필요한데system()의 주소와 system()에 인자로 줄 /bin/sh\00가 필요하다. 그전에 이 바이너리가 static linked 인지 dynamic lin..
-
LEVEL 09 vampire write-upSystem hacking training/Hackerschool LOB 2018. 4. 4. 17:20
troll -> vampire 오늘은 vampire라는 문제를 풀이해 보도록 하겠다. [문제 + 힌트] vampire.c 파일을 열었을때의 모습이다. main()에서 인자를 한개 이상 받고 argv[1][47] 부분에서 \xbf 가 맞는지 아닌지 검사를 한다. 여기까지는 뭐 대충 이전 문제에서 많이 봐왔던 형태이다. 바뀐부분은 바로 here is changed 라는 주석이 달린 곳인데 이곳을 보게 되면 argv[1][46] 부분의 값이 \xff 와 같다면 but it's not forever 라는 문장을 출력하고 exit(0) 함으로써 종료를 시킨다. 그리고 그 밑에서 strcpy() 로 argv[1]의 값을 buffer에 그대로 복사해주는 것을 확인할 수 있는데바로 여기서 bof 취약점이 터지는 것을 ..
-
[x86 vs x64] Memory AddressSystem hacking training/Knowledge 2018. 3. 19. 22:18
오늘은 x86과 x64에 대해 전반적으로 정리를 하겠다. 추후 x86의 BOF, RTL, ROP 등 64 bit환경에서의 공격 기법에 대해서도 포스팅하겠다. x86 vs x64하면 가장 먼저 떠오르는 것은 메모리 주소 체계일것이다. x86의 메모리 주소 체계는 이러하다. [x86] Memory Address (windows 기준) 0x0000 0000 - 0xffff ffff 0x0000 0000 - 0x7fff ffff (User Section, Ring3)0x8000 0000 - 0xffff ffff (Kernel Section, Ring0) 0x0000 0000 부터 0xffff ffff 까지 사용할 수 있는 주소 공간이 있고,이는 unsigned int의 범위 0 ~ 4294967295와 동일하다..
-
Stack2 풀이System hacking training/Protostar 2018. 2. 4. 15:49
[문제] 문제를 보면 variable에 getenv()를 이용하여 환경변수의 값을 넣어주는것을 볼 수 있다. 그리고 취약점은 역시 strcpy() ! 문자열의 길이를 검사하지 않기 때문에 bof 취약점이 존재한다. 풀이를 위해 buffer[64] 와 modified 사이의 offset을 구해야한다. 이는 gcc 컴파일 과정에서 들어가는 쓰레기값 즉, dummy 값이 존재하는지 확인을 하기 위함이다. [풀이] 먼저 gdb로 열어본다. dummy 값만 체크를 해보자. 아 여기서 dummy 값은 문제 풀이를 위해 modified 와 buffer[64] 사이만 확인을 했다. 결과는 이전 문제와 동일하게 없었다. 따라서 이 프로그램의 스택 구조를 확인해보면 이러하다. | char *variable(esp) | d..
-
level 11. 풀이System hacking training/Hackerschool F.T.Z 2017. 10. 15. 03:13
오랜만에 F.T.Z를 풀었습니다. bof에 대한 개념부족, gdb 사용법, 쉘코딩에 대한 학습이 부족하여 풀이를 이제서야 하게되었네요ㅠ. (3주전 풀이를 보고 풀어보았는데 이해가 가지 않아서 다시 풀이합니다.) level11의 풀이를 시작합니다. attackme의 소스인듯 합니다.로그인 후 hint를 열어본 결과 여기엔 취약점이 두개가 있더군요. 1. 버퍼오버플로우 취약점2. 포맷스트링 취약점 저는 버퍼오버플로우 취약점에 대해 공부를 하였으니 이 취약점을 갖고 문제를 풀었습니다. 일단! 프로그램을 실행시켜보니 segmentation fault를 출력하고, 인자로 문자열을 넘겨 주면 그대로 출력을 해주네요! 아직 얕은 수준의 지식이지만 달고나님의 문서를 보고 공부한 결과ret주소를 찾아야한다는 것을 알게 ..