LOB

· Wargame/LOB
cobolt로 로그인하면 goblin 문제를 볼 수 있다. goblin 문제를 실행해본다면 입력을 받은 뒤, 입력을 받은 값을 똑같이 출력해준다. 소스코드를 확인해보면 bof에 취약한 대표적인 함수인 gets 함수로 입력을 받는다. 이 gets 함수는 입력 값의 길이에 제한을 두지 않기 때문에, 입력 값이 저장되는 buffer 변수의 크기인 16byte 이상 입력을 한다면 overflow가 발생한다. 딱봐도 쉘 코드를 buffer에 삽입하기에는 공간이 부족하기 때문에 환경변수를 이용해야 될 것 같다고 생각했다. 일단 buffer가 16byte 크기고 다른 변수들은 존재하지 않기 때문에 굳이 gdb로 열어볼 필요 없이 blind 상태로도 exploit이 가능할 것 같았다. buffer의 크기가 16byte..
· Wargame/LOB
gate 문제를 풀 때 wsl telnet을 이용해 접속했다가 쉘이 얻어지지 않는 문제가 생겨, 이번에는 putty로 접속했다. 문제 파일 cobolt와 소스코드 cobolt.c가 주어져 있다. 문제 파일을 실행해보니 인자를 받는 것을 알 수 있었다. 많은 '1'을 인자로 주니 Segmentation fault가 터진 것을 보아 bof 취약점이 있을 가능성이 높다. 소스코드를 확인해보면 인자 값을 strcpy 함수로 16byte 크기의 buffer에 복사해주는데, gate 때와 마찬가지로 길이를 검증하는 로직이나 함수를 사용하지 않는다. 따라서 인자 값으로 16byte보다 긴 값을 준다면 overflow가 발생한다. gate와 마찬가지로 buf에 쉘 코드를 삽입한 뒤 ret를 buf의 주소로 조작해 쉘을..
· Wargame/LOB
wsl ubuntu에서 telnet을 이용해서 접속해봤다. 1단계 id와 pw는 gate/gate다. ls 명령어로 무슨 파일이 있는지 확인해봤다. gremlin, gremlin.c라는 문제 파일과 그 소스코드가 존재하는 것을 알 수 있다. gremlincp 파일은 풀이 과정에서 디버깅을 위해 gremlin 파일을 복사한 것이다. 권한을 확인해보면 gremlin 파일에는 gremlin 계정으로 setuid가 걸려있다. 이 문제 파일을 공격한다면 gremlin 권한으로 된 쉘을 얻을 수 있을 것이다. int main(int argc, char *argv[]) { char buffer[256]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer,..
· Wargame/LOB
LOB를 할 때 정상적으로 exploit이 될 만한 코드도 안되는 경우가 있는데, 그 이유는 lob의 bash 버전이 낮기 때문에 \xff를 \x00으로 처리하기 때문이다. 이 말인 즉슨 ret를 \xff가 들어가는 주소로 변조한다 가정하면, 이 \xff는 \x00으로 인식되기 때문에 \xff가 입력되는 순간 더 이상의 입력을 받지 않게 된다. 따라서 정상적인 공격이 힘들어지는 것이다. 해결 방법은 간단하다. root/hackerschoolbof로 로그인한 후 vi /etc/passwd를 입력해 vi 에디터로 진입하고 :를 입력 후 %s/bash/bash2/를 입력해준다면 bash 버전이 2로 바뀌게 되면서 원활한 문제 풀이가 가능해진다. -login- id : root pw : hackerschoolb..
dyp4r
'LOB' 태그의 글 목록