고블린을 사냥해봅시다. 예전에 게임 튜토리얼로 고블린 잡던 때가 떠오르네요.. login : cobolt password : hacking exposed 탐색전 cat goblin.c /* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } 이번엔 gets 함수에 대한 취약점인 것 같습니다. gets함수도 입력에서 길이제한이 없으므로 bof가 일어납니다. 더군다나 이제 main에서 인자를 받지 않고 stdin 이라고 되어있네요. 저번 문제에서 small buffer에 대해서 환경 변수를..
코볼트를 사냥해봅시다. 이전 글에서 bof와 스택 프레임까지 어느정도 설명했으니 여기선 생략하겠습니다... (https://thfist-1071.tistory.com/entry/LOB-1-gate-gremlin-%ED%92%80%EC%9D%B4) 그리고 참고할 것 https://yehey-study.tistory.com/entry/gdb-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C gdb 명령어 모음 gdb 명령어 모음 시작과 종료 gdb (프로그램명): 시작 q(quit) / ctrl+d: 종료 file 프로그램명: 디버깅할 프로그램으로서 파일을 사용한다. disas 함수명: 특정 함수의 어셈블리 코드 출력 disas [주소] [주 yehey-study.tisto..
이번에 S!에서 포너블 스터디를 시작하면서 처음으로 주어진 과제네요. LOB 풀이를 시작해보겠습니다. 환경 구축은 다음에 숫자 0으로 올려보도록 해야겠네요. bof의 개념을 알고 hackerschool의 과정을 어느정도 진행했다면 딱히 서론이 필요없을테니 바로 풀이를 시작하겠습니다. 풀이 우선 LOB의 redhat과 xshell을 통해 telnet 연결을 합니다. id : gate pw : gate 로 들어가서 gate로 일단 로그인합니다. ls -l 명령어를 입력합니다. (권한을 보기 위해서) gremlin 파일과 gremlin.c 파일이 보입니다. 여기서 권한의 rw's' 에서 s 부분은 setuid를 의미하는데, 대문자 S가 들어가면 일반 권한의 -를 의미합니다. 어찌되었든 gate는 gremlin..
나름 오랜만에 롸업을 써 봅니다. 꾸준히 공부하고 싶은데.. 교양보다 내가 하고싶은 공부를 하고 싶어요. 서론 이번 문제는 Stack Canary에 관련된 문제 ssp_001입니다. 이 문제를 풀면서 어셈블리를 봐야하는 중요성을 꽤 느꼈습니다. checksec을 하면 이렇게 나타납니다. NX로 인해 쉘코드를 삽입할 수 없고, Canary found이므로 오버플로우 시에 Canary를 고려해야합니다. 또한 32비트 파일이네요. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, ..
아무래도 기억력이 나쁜 편이라 계속해서 썼던 코드를 잊어버리네요. 그래서 블로그를 시작했지만 암튼, 문제 풀이를 해보겠습니다. 문제 이번 문제도 사실 풀이는 이미 이전에 있습니다. 그래도 그냥 해보죠.. 제 풀이는 안 보고 했으니까. shecksec 을 하면 다음과 같이 나타납니다. Canary를 찾을 수 있습니다. // Name: r2s.c // Compile: gcc -o r2s r2s.c -zexecstack #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); p..
쓸데없는 얘기 없이 바로 풀이로 들어가겠습니다. 아마(?) 풀이가 이미 드림핵에 나와있는 걸로 기억하기 때문에 풀이 문제는 다음과 같습니다. 환경은 다음과 같습니다. 리눅스에서 checksec 명령어 하면 뜨는 화면 32bit 파일이고 보호기법이 적용되지 않았습니다.(-fno-stack-protector) cat basic_exploitation_000.c를 통해 소스코드를 읽어봅니다. setvbuf에 관해선 이전 글을 참고하시면 좋습니다. 해당 소스코드는 buf라는 배열에 0x80바이트를 할당하고 buf의 주소값을 출력합니다. (실행해보면 주소값이 계속 바뀌는 것을 알 수 있는데 ASLR이 적용되어 있기 때문입니다.) 이후 buf에 최대 141byte만큼 문자열을 입력받습니다. 141은 그닥 중요하지 ..
서론 안녕하세요, 이번에는 Return Address Overwrite라는 문제를 풀어보겠습니다. 언제동안 버퍼오버플로우만 하는건지. 이제야 다시 몇년 전의 제 진도를 따라잡는군요.. 음.. 이 글을 다 쓴 줄 알아서, 면접 때 보여줄려다가 없길래 굉장히 쪽팔렸습니다.. 쓸데없는 소리는 그만하고 풀이를 시작하겠습니다. 이 문제는 예제에서 풀었던 그대로 풀이하시면 됩니다. 풀이 (겉보기) 문제 파일을 다운로드하고 cat 명령어를 통해 소스코드를 읽습니다. setvbuf라는 함수를 자주 까먹는데 이참에 기억해둬야겠습니다. 분석은 사실상 예제를 보면 됩니다만 여기서도 적어보겠습니다. 입력이 scanf("%s",buf);인 것을 보아 여기에서 오버플로우가 일어나기 쉽습니다. %s는 입력 문자열의 길이제한을 두지..