분류 전체보기
-
LEVEL 10 skeleton write-upSystem hacking training/Hackerschool LOB 2018. 4. 11. 16:58
vampire -> skeleton [문제] 조건들이 많다. 하나씩 살펴보면 이러하다. 먼저 인자는 두개 이상 줘야하고 egghunter에 의해서 eggshell을 사용하여 익스플로잇할 수 없다.그리고 ret 주소의 마지막 바이트에는 \xbf가 들어가 있어야한다. 이 말은 즉 스택에 쉘코드가 있어야한다는 것으로 생각이 된다.그리고 argv[1] (첫 번째 인자)의 길이가 48이상이면 안된다.마지막으로 buffer와 argv[N]의 모든 값들을 0으로 초기화하며 종료한다. 그리하여 이전까지 넣어줬던 공간 argv, 환경변수, buffer가 모두 0이된다. [삽질 - 풀이와 무관함] 그리하여 살질을 하였는데.. 생각해낸 방법이 argc를 integer overflow하여 int의 범위를 넘어서 음수 혹은 0..
-
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 취약점이 터지는 것을 ..
-
LEVEL 08 troll write-upSystem hacking training/Hackerschool LOB 2018. 3. 31. 20:28
orge -> troll [문제] troll.c 파일을 살펴보면 많은 조건들이 걸려있다. 그 조건들은 아래와 같다. 1. argc 는 무조건 2여야한다. 이 말은 즉 바이너리 이름 + 인자 1개가 아닐경우 종료시킨다는 것이다.2. egg hunter로 환경변수에 쉘코드를 올려도 0으로 초기화되므로 환경변수를 사용하는 것은 의미가 없다.3. argv[1] 첫번째 인자값 마지막에 \xbf 인지 검사한다.4. argument의 길이를 체크해서 48보다 크면 종료시킨다.5. strcpy() 의 사용으로 bof 취약점이 존재한다.6. one more 부분에서 argv[1]의 값을 0으로 초기화 해주면서 argv[1]에 쉘코드를 올리더라도 사용할 수 없다. 결론 : buffer hunter로 인해서 buffer에 ..
-
LEVEL 07 orge write-upSystem hacking training/Hackerschool LOB 2018. 3. 31. 03:07
darkelf -> orge [문제 + 힌트] orge.c 파일을 열어보면 바이너리에 대한 c 코드가 나온다. 먼저 이 바이너리는 strcpy()의 사용으로 인해 bof 취약점이 존재한다.strcpy()는 문자열의 길이를 확인하지 않아서 NULL 이전의 모든 문자를 복사하기 때문에main 함수의 인자 argv[1]에 40byte 이상의 문자열을 넣어준다면 return address 를 변조할 수 있을것이다. 따라서 우리는 이 바이너리를 이용하여 다른 행위를 가능케하는데 (쉘을 띄울 수 있다.)orge.c 파일을 보면 많은 조건들이 있다. 그 조건들은 아래와 같다. 1. argc < 2 이면 exit(0) 으로 종료한다. 인자가 2개 이상이여야한다. 2. argv[0]의 길이가 77이 아닐경우 역시 종료한..
-
[2018] 코드게이트 해킹 시연 동영상 공모전 - 장려상fkillrra ?/conference 2018. 3. 25. 01:39
상을 타본게 고등학교때 이후로 처음인거같네요.(감격) 2018년도 코드게이트 해킹 시연 동영상 공모전에 동아리 부원들과 참가하여 3위로 장려상을 받게 되었습니다. 해당 동영상은 https://www.youtube.com/watch?v=E2dhyYpwIqA 여기서 보실 수 있고, 추천 눌러주시면 감사하겠습니다. 인기상은 추천수에 따른다고 하네요.ㅎ 4주 동안 10시 전에 하교해본적이 없는것같은데..뿌듯하네용 Thanks to py0zz1, revlr, 지우중 선배님 :)
-
LEVEL 06 darkelf write-upSystem hacking training/Hackerschool LOB 2018. 3. 21. 15:02
LOB darkelf에 대한 풀이를 하겠다. darkelf.c 를 열어보면 바이너리에 대한 c 코드가 나온다. 이 바이너리는 strcpy()로 buffer에 argv[1]의 문자열을 그대로 받아옴으로서 bof 취약점이 존재한다. 하지만 egghunter로 인해 환경변수에 쉘코드를 올려 사용할 수 없다.buffer hunter로 인해 buffer에 쉘코드를 올려서 쉘을 띄울 수 없다. buffer hunter로 인해서 strcpy() 호출 후 memset()로 buffer를 다시 0으로 세팅해주기 때문에 쉘코드를 buffer에 올리더라도 사용할 수 없다. 그리고 argument argv[1]의 길이를 체크하여 argument의 길이가 48보다 크면 오류 메시지를 출력하고 종료시킨다. 따라서 argv[2]를..
-
[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와 동일하다..