WarGame/LOB(22)
-
LOB - 2. gremlin -> cobolt (RTL기법)
어제 사이버가디언즈 멘토님께 RTL기법에 대해 강의를들었다.보통 lob에서는 shellcode를 이용해서 shell을 따려고 하지만, 막상 많은 ctf문제들을 풀어보면 shellcode를 직접적으로 입력해서 사용하는 문제들을 찾아보기 힘들다.따라서 현재까지의 습관을 고치고 앞으로 RTL를 이용해서 문제를 풀어보도록 하겠다. 먼저 로그인을하고 소스코드를 보자. 1번문제와 크게 다를게 없어보이지만 버퍼값이 16byte로 쉘코드를 넣기에는 부족하다.두가지의 방법이있는데.1. 환경변수에 쉘을 입력해서 탈취한다.하지만 환경변수를 이용하는 문제는 CTF에도 자주 나오지않는다.(첫번째 write-up)에서 다룸2. RTL기법을 이용해서 쉘을 탈취한다. RTL기법이란 (Return-to-Libc)의 약자로 리턴을 li..
2018.07.14 -
LOB - 9. troll -> vampire
이번문제는 정말 쉽게 푼 것 같다. 소스코드를 보자 추가된 부분은 argv 47번째가 "\xff"가 아니여야 하는 조건이다. 그래서 생각해본거는 47번째가 "\xff" 가 아닌 주소는 직접 찾기는 어려울거같아 "\x90"을 엄청 주고, 미끄러져서 shellcode를 실행하게 하는 방법이다. 첫 시도를 해보니 segmentation fault가 떴다. 가능성이 있다. 주소만 조금 바꾸어주고 "\x90"값을 늘려주니 shell을 땄다..ㅎㅎ (grin)
2018.07.05 -
LOB - 8. orge -> troll
어떤 새로운 함정이 새로 생겼는지 확인해보자. //onemore 부분에서 새로운게 생겼다. argv[1]도 초기화시키는 명령같다. 그러면 우리가 쉘코드를 입력할 수 있는 자리는 argv[0] 밖에 없다고 할 수 있다. 이름이 argv[0] 부분이니 이름을 쉘코드를 넣는 것으로 바꾸어주자. 쉘코드는 "\x2f"가 없어야해서 구글링해서 퍼왔다. 파일명 : `python -c 'print "\x90"*200 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a..
2018.07.05 -
LOB - 7.darkelf -> orge
먼저 소스코드의 바뀐부분을 확인해보자 소스코드를 보니 "파란색" 부분 argv[0]의 길이가 77이 나와야만한다. 그래서 argv의 길이를 확인해보기위한 간단한 C언어 코드를 작성해봤다. 이렇게 소스를 작성한후 컴파일하고, 파일명을 바꾸어가면서 값으 변화를 확인해보았다. argv[0]의 길이는 파일명+2 으로 표시되는 것을 확인하였다. 그러면 이 문제를 풀기위해서는 파일명을 75글자로 바꾸어 주어야 하고, A*77을 한 길이에서 2를 뺴서 바꾸어주었다. 길이를 구하고, 바꾸어준다 (grin) 그리고 마지막 글자만 B로 바꾼다음 디버깅을 해줘서 argv[2]의 값이 들어갈 위치를 찾는다. "\x4c\xfb\xff\xbf"가 "\x90"의 시작주소이다. 그후 쉘코드를 포함한 익스플로잇을 해주면? (grin)
2018.07.05 -
LOB - 6.wolfman -> darkelf
바로 본론으로 들어가겠습니다. 먼저 코드를 보죠 이전과 다른 부분은 argv[1] 의 길이가 48이 넘어가면 안되는 것입니다. 하지만? 이때까지 풀었던 방법으로는 48길이가 넘어간 적이 없었기 떄문에 이전과 동일하게 풀면 될 것 같습니다. (간단) 따라서 조건만 정리해 보면 1. argc가 2이상이여야한다. (일단 길게넣자) 2. 환경변수 설정 불가능 3. argv1의 48번째 는 "\xbf"여야한다. 4. 버퍼는 초기화된다.5. argv[1]의 길이가 48이 넘어가면 안된다. 그럼 기존과 동일하게 1. gdb를 실행시키기 위해 파일을 복사한다 2. 복사한 파일을 gdb로 열어주고, main에 bp를 건다. 3. 앞에 48byte를 "\xbf"로 채워주어서 3번째 조건을 만족시키고, 2번째 argv의 시..
2018.07.05 -
LOB - 5.orc -> wolfman
5번째 LOB이다. 중간에 조금 쉬긴하였지만 LOB는 여전히 재미있다. 그럼 소스코드부터 확인하자 소스코드를 보니 전과 다 비슷한데 맨 아랫줄에 metset(buffer, 0, 40);이 추가되었다. 검색해보니 buffer을 초기화하는 함수라고 한다. 버퍼를 초기화하는 함수라는 것을 알았으니 버퍼에는 값을 넣어주어도 소용이 없다는 것을 알았다. argv[2]의 시작값을 리턴값으로 돌려주고, 그 부분에 쉘코드를 넣으면 실행이 될 것 같다. 그럼 우리가 지켜야하는 규칙을 정리해보자 1. argc가 2이상이여야한다. (일단 길게넣자) 2. 환경변수 설정 불가능 3. argv1의 48번째 는 "\xbf"여야한다. 4. 버퍼는 초기화된다. 1. gdb로 메모리 값을 보기 위해 원본파일을 복사해준다 2. 복사한 파..
2018.07.05