본문 바로가기

wargame/lob

(11)
LOB 8 vampire -> skeleton 안녕하세요 :) 문제 tip스텍을 다시 천천히 보자 코드 쓱싹 변경 사항ultra argv hunter! argv에 있는 모든 내용을 삭제합니다. ㅠㅠ 하지만 심볼릭 링크(shell code)를 걸어 놓고 gdb를 통해서 스텍을 훑어 보면 argv 말고도 다른 공간에 argv[0]의 내용이 저장되어 있습니다. (왜 적제 되는지는 잘 모르겠습니다 ㅠㅠ.) 위는 core dump를 통해서 실제 스텍 주소를 찾은 것입니다. (심볼릭 링크 포함) shell 냠냠:)
LOB 7 troll ->vampire 안녕하세요 :) 문제 tip 1. 버퍼에 엄청 많은 값을 입력하면 주소는 어떻게 변할까? 코드 쓱싹변경 사항 if(argv[1][46]=="\xff")이면 종료 시킨다. 이번 문제는 단순하면서도 재미있습니다.지금까지 풀었던 문제에서 ret에 담는 주소는 bffff~와 같은 형태였습니다.근데 argv[1][46]이 \xff이면 프로그램을 종료시킵니다.이를 우회 할 수 있는 방법은 엄청 많은 데이터를 입력 하여 주소를 정상적으로 \ff가 아니게 만들면 됩니다. (tmp 폴더에 복사 후 core dump를 통해 주소 값을 알아냅니다 :> ) 위와 같이 NULL을 100000개 넣어주면 0xbffe~ 주소까지 채울 수 있습니다. shell 쓱싹 :)
LOB 6 orge->troll 안녕하세여 :) 문제 tip 1. 스텍에 올라가는 것들은 무엇이 있을까2. 심볼릭 링크란?$ln -s ./troll ./link_troll 코드 쓱싹 변경 된 사항 argv[1]!=2 가 되면 프로그램을 종료시킵니다. /tmp 폴더에 복사한후 gdb를 통하여 스텍에 올라와 있는 값들을 확인 합니다.그러면 아래와 같이 /tmp/./troll이 보이시나요 ? (gdb) x/1000s $esp-1000 이와 같이 argv[0]이 stack에 올라간다는 것을 알 수 있습니다.페이로드 구조는 argv[0]+A*44+"shell code 주소" 여기서 argv[0]은 심볼릭 링크를 걸어준파일 명입니다.심볼릭 링크는 윈도우에서 바로가기 라고 생각하시면 됩니다. core 파일을 통해서 argv[0]의 주소를 찾을 수 ..
lob tips (풀기전 알아야할 것들) 안녕하세요 포너블을 다시 공부하기 위해서 lob를 정주행 하고 있습니다. 그전에 lob를 풀기 전에 알아야할 사전 지식? 을 포스팅 할까 합니다.요약1. /bin/bash22. cp ./문제 /tmp/3. gdb -c core gate-> gremlin 문제로 예시를 들겠습니다. 1. /bin/bash2 lob의 모든 문제는 shell 창에 /bin/bash2를 입력하고 하셔야합니다.이유는 정확히 모르겠으나 아래의 예시를 보면 알 수 있습니다. 동일한 페이로드(/bin/bash2 일 때 정상적으로 shell을 얻음) (기본 bash2 일 때 shell을 얻지 못함) 2. 권한 문제lob를 풀기 위해서는 gdb라는 툴을 이용합니다.하지만 주어진 문제에 gdb로 실행 시켜보면 아래와 같이 debug를 할 수..
LOB 5 (darkelf -> orge) LOB darkelf -> orge 문제 풀이 1. 소스코드 분석 문제는 동일 합니다. 하지만 달라진 것은 argv[0]의 길이가 77이 아닐 때 종료 시킨다는 것 입니다.if(strlen(argv[0]!=77){} 그럼 일단 우회 하는 방법으로는 .//////////////////////(77개) 로 하는 방법이 하나 있습니다.(./orege == .//////////////////////orege) 다른 방법으로는 심볼릭 링크가 있는데 저는 1번째 방법으로 풀어 보겠습니다. 권한 문제 때문에 /tmp 폴더로 복사합니다.gdb를 실행 시킬 때는 /의 갯수가 67개여야 합니다. 77-10(/tmp/.oreg) 확인을 해보면 정상적으로 종료되지 않고 프로그램이 돌아가는 걸 알 수 있습니다. 자 그러면 페이..
LOB level6 (wolfman->darkelf) LOB level 6 LOB (wolfman -> darkelf) 1. cat 명령어를 통하여 darkelf.c 의 소스 코드를 확인합니다. 2. 소스코드 분석 1. char 형 buffer [40] 선언 2. argc 가 2 미만일 경우는 오류 메시지 출력 후 종료 3. 에그 헌터 환경 변수 사용 금지. 4. argv[1][47]과 "\xbf"와 같지 않다면 오류 메시지 출력 후 종료 * strlen(arg[1]) 는 길이를 체크하는 함수입니다. arg[1]의 길이가 48을 넘을 경우에는 오류를 출력하고 종료합니다. 제가 풀었던 level5의 방법과 동일하게 푸셨다면 신경쓰지 않으셔도 됩니다. 5.strcpy 함수 : argv[1]에 있는 것을 buffer에 복사 합니다. 6.printf 로 buffe..
LOB level5(orc->wolfman) LOB level 5 LOB (orc -> wolfman ) 1. cat 명령어를 통하여 wolfman.c 의 소스 코드를 확인합니다. 2. 소스코드 분석 1. char 형 buffer [40] 선언 2. argc 가 2 미만일 경우는 오류 메시지 출력 후 종료 3. 에그 헌터 환경 변수 사용 금지. 4. argv[1][47]과 "\xbf"와 같지 않다면 오류 메시지 출력 후 종료 5.strcpy 함수 : argv[1]에 있는 것을 buffer에 복사 합니다. 6.printf 로 buffer를 출력 합니다. 7.memset 으로 buffer를 40까지 0으로 초기화 합니다. 3. gdb 권한 문제를 우회하기 위해 tmp에 복사합니다. 4. tmp 로 이동 하여 gdb wolfman 명령어를 입력합니다. ..
LOB level 4 (goblin -> orc) LOB level 4 LOB (goblin -> orc) 1. 첫 번째로 cat 명령어를 사용하여 orc파일의 코드를 확인합니다. 2. 코드 분석1) char형 buffer[40]을 생성 2) 전달 받는 인자의 수가 2개 미만이면 프로그램 종료 3) strcpy argv[1]을 buffer에 복사한다.여기서 argv[0]은 프로그램을 실행시키는 명령어 입니다. 예를 들어 ./cobolt 여기서는 이것이 argv[0]이 되겠습니다. 4) egghunter 바로 환경변수를 사용하지 못하게 막는 것입니다. c언어 함수 memset은 원하는 부분을 초기화 시켜주는 함수입니다. 5) argv[1][47] 이 부분은 argv[1]에서 47번째가 "bf"와 같아야 한다. 라는 의미 입니다. (이것을 쉽게 해석하면 환..