본문 바로가기

wargame/LOB10

[포너블] LOB 10 - vampire LOB 10 - vampire write up /* The Lord of the BOF : The Fellowship of the BOF - skeleton - argv hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i, saved_argc; if(argc 48){ printf("argument is too long!\n"); exit(0); } // argc saver saved_argc = argc; strcpy(buffer, argv[1]); printf("%s\n", buffer); // buffer hunter memset(buffer, 0, 40); // u.. 2021. 10. 3.
[포너블] LOB 9 - troll LOB 9 - troll write up 코드가 좀 간결해진걸로 봐서 뭔가 제약이 풀린 것 같다. 확인해보니 환경변수와 버퍼 초기화 부분이 사라졌다. 그 대신 here is changed 의 코드를 살펴보면 47번째 바이트에 \xff 를 사용할수 없게 되어있다. 즉 다시 말해서 argv[1]의 48번째와 47번째는 \xbf\xff 로 시작하는 스택주소를 줘서 지금까지 풀었는데 ff를 사용하지말라는 말은, 저기 영역대를 사용하지 말라는 것이다. 그니까 이번 문제가 거는 유일한 제약은 bfffxxxx 로 시작하는 주소 영역대를 사용하지말라는 것인데, 그럼 이전에 사용했던 argv[2]에 쉘을 올리고, 놉(또는 dummy 문자)을 엄청 많이 깔면 주소영역대가 변하지않을까? 라는 아이디어가 들었다. argv[2.. 2021. 10. 3.
[포너블] LOB 8 - orge LOB 8 - orge write up LOB 8 orge write up 입니다. 계속해서 같은 스택프레임 구조에 제약사항만 추가되는 형태로 문제가 진행되고 있다. 이번에는 argc가 2개 그니까, 하나의 명령어를 가지고 문제를 해결하란 소리다. 이전에 argv[2] 에 쉘코드를 넣고 주소를 주던 그런 방식은 더 이상 통하지 않는다 총 제약을 정리하면 다음과 같다. 환경변수 초기화 -> 환경변수 사용 x 버퍼 초기화 -> 버퍼 내부에 쉘코드 넣는것 x argv[1]의 길이제한 48번째 바이트는 \xbf 하나의 인자만 입력 가능 좀 고민하면서 삽질해보다가 잘 모르겠어서 또 다른 분들의 라업을 참고했는데 내가 처음에 생각한 아이디어는 맞았다 바로 이전 문제에서 사용한 심볼릭 링크가 그렇게 의미 있지않게 사.. 2021. 10. 3.
[포너블] LOB 7 - darkelf LOB 7 - darkelf write up darkelf write up 입니다. here is changed 라고 친절하게 바뀐 부분을 알려준다 argv[0] 의 길이를 77로 만들지 않으면 에러를 출력한다. 우선 아까문제처럼 argv[2] 를 통해 공격을 수행하는거 같은데 argv[0]에는 내가 실행한 파일이름이 들어가는 것으로 알고 있다. 근데 이 길이를 77글자로 만들라는 것은 파일이름의 길이를 77글자로 만들라는 것인가? 그냥 잘 모르겠어서 바로 검색하기로 결심했다 서치결과 심볼릭 링크를 사용해서 해결할 수 있는 문제였다. 즉 쉽게 말하면 원본파일의 바로가기를 만들어서 바로가기 파일의 길이를 77자로 만들어주면 되는 것이다. 이거만 해결하면 바로 직전 문제와 다를게 없으므로 바로 해결해보자. .. 2021. 10. 3.