스터디 그룹

    ProjectH4C 3개월 4주차 과제 (pwnable.kr - passcode)

    📖 1) 문제 파악 우선 ssh로 접속해보자. 파일은 flag, passcode, passcode.c가 존재한다. passcode.c를 읽어보자. 로그인을 담당하는 함수인 것 같다. 간단하게 보면 passcode1과 passcode2를 입력받는다. 그리고 passcode1 : 338150, passcode2 : 13371337 을 만족하게 된다면 /bin/cat flag를 실행하게 된다. 이 부분이 핵심인데, 문제는 passcode1과 passcode2를 받을 때 scanf 내에서 '&'가 빠졌다는 것이다. 그렇게 되면 Segmentation Fault가 발생할 수 밖에 없다. 📖 2) 문제 분석 scanf 함수에서 &가 붙어야 하는 이유, Call-By-Reference, Call-By-Value에 관..

    ProjectH4C 3개월 3주차 과제 (pwnable.kr - flag)

    📖 1) 문제 파악 아마 리버싱 위주가 되는 것 같다. binary만 있으면 된다니 ...... 64비트구나 ...... 우선 좀 사릴 필요가 있겠다. main (start)는 이렇게 생겨있다. 진짜 별 게 안보여서 뒤지던 중 Hex View에서 이걸 보았다. UPX로 패킹이 되어있다. ko.wikipedia.org/wiki/UPX UPX - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. UPX(Ultimate Packer for eXecutables)는 여러 운영체제에서 수많은 파일 포맷을 지원하는 오픈 소스 실행 파일 압축 프로그램이다. GNU 일반 공중 사용 허가서를 통해 공 ko.wikipedia.org 여기서 UPX에 관한 정보를 얻어보자. 결론은 프로그램을 패킹 ( 압축 )..

    ProjectH4C 3개월 3주차 과제 (pwnable.kr - bof)

    📖 1) 문제 파악 무난하게 BOF 슈슉 해주면 풀릴 것 같다. 소스코드를 바로 다운 받을 수 있지만, 공부하는 차원에서 직접 IDA나 GDB로 보도록 하자. main 함수에서는 우선 func(3735928559); 를 실행한다. 이제 func 함수를 알아보자. 여기서 3735928559를 16진수로 바꾸면 0xdeadbeef가 된다. a1에는 0xdeadebeef가 들어가 있는 상황이다. 뭐 그런 상태에서 s배열, v3를 선언한다. 근데 아직 저 __readgsdword(0x14u)의 역할이 무엇인지 모르겠다. 아마도 canary인 것으로 생각된다. 📖 2) 문제 분석 우선 func 함수 내에서 return __readgsdword(0x14u) ^ v3 라는 코드가 있다. v3라는 변수도 마찬가지이고,..

    ProjectH4C 3개월 3주차 과제 (pwnable.kr - fd)

    📖 1) 문제 파악 ssh로 pwnable.kr에 접속해보자. 이렇게 문제파일의 소스코드를 제공해준다. /bin/cat flag 를 실행시켜보도록 하자. 📖 2) 문제 분석 결국 우리가 생각해야 하는 것은, 어떻게 buf에 LETMEWIN\n을 넘겨줄 것이냐 이다. 먼저 한 줄 위를 본다면 read(fd, buf, 32)가 존재한다. read함수의 경우 첫 번째 인자로 int fd;를 받게 된다. fd = 0 : 표준 입력 (STDIN_FILENO) fd = 1 : 표준 출력 (STDOUT_FILENO) fd = 2 : 표준 에러 (STDERR_FILENO) 이다. 즉, buf에 값을 받게 만들 것이라면 fd자리에 0을 넣어주어야 한다. 하지만 그 위에서 fd를 보게 된다면 프로그램을 실행할 때 두 번째..

    ProjectH4C 3개월 2주차 과제 (UNIT 51, 52, 53)

    📖UNIT 51. 📒 구조체 크기 알아보기 구조체의 크기를 알아보자. 어떻게 계산하면 될까? sizeof 함수를 사용하도록 하자. 우선 가상의 네트워크 헤드를 구조체로 만들었다. #include struct PacketHeader { char flags; // 1바이트 int seq; // 4바이트 }; int main() { struct PacketHeader header; printf("%d\n", sizeof(header.flags)); // 1: char는 1바이트 printf("%d\n", sizeof(header.seq)); // 4: int는 4바이트 printf("%d\n", sizeof(header)); // 8: 구조체 전체 크기는 8바이트 printf("%d\n", sizeof(str..

    ProjectH4C 3개월 2주차 과제 (해커스쿨 ftz - 8)

    📖 1) 문제 파악 📖 2) 문제 분석 find 명령을 잘 사용하면 될 거라고 생각하였다. find 명령에서 size 옵션을 준다면 용량으로 검색할 수 있다. 하지만 단위가 주어지지 않았다.... 사이즈 단위는 b : block c : byte k : killo byte w : 2byte word m : mega byte g : giga byte 순이다. 다 해보자. 📖 3) 문제 풀이 즉 2700바이트일 때 네 가지의 파일을 찾을 수 있었다. 먼저 첫 번째 파일은 아니다. 두 번째 파일이다. level9에 대한 계정 정보가 들어가있다. level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524 이 필드를 John the Rippe..