카테고리 PWNABLE 문제 32 bit elf 바이너리인 easy_uaf 파일이 주어졌다. 변수 선언 시점에 5개의 변수에 각각 malloc이 이루어진다. 이 중 세 번째 할당된 ptr에는 flag의 값이 기록된다. 그 후에는 while(1) 을 통해 메뉴가 반복되는데, hi write delete print exit 총 5개의 메뉴가 있다. 1번 메뉴인 hi는 "hi~ easy uaf, layer7"이 출력된다. 쓸모 없는 메뉴이다. 2번 메뉴인 write는 초기에 malloc해놓은 5개의 영역에 글을 쓸 수 있는 메뉴이다. "what ? > "이라는 물음이 나왔을 때 1을 입력하면 buf에, 2를 입력하면 s에, 3을 입력하면 ptr에, … 등등 선택 가능하다. 또한 주목할 점은, 할당된 공간이 0..
카테고리 PWNABLE 문제 32bit elf 바이너리인 easy_fsb_ 파일이 주어졌다. IDA로 열어봤다. 지역변수인 buf에 100 바이트만큼의 입력을 받고 이 변수를 printf로 바로 출력하는 간단한 프로그램이다. 버퍼 오버플로우는 존재하지 않으며, printf가 변수를 포맷 없이 출력하고 있으므로, 변수에 "%x"등을 입력할 경우 이것을 문자열이 아닌 포맷 스트링으로 인식하는 Format String Bug가 발생한다. "AAAA%x%x%x%x%x%x%x"를 입력할 경우, 스택의 값들이 출력되는데 이때 일곱 번째 %x에서 "AAAA"에 해당하는 값인 "41414141"이 출력된 것을 확인할 수 있다. 이 위치가 입력 데이터가 들어가는 변수인 buf의 시작 지점이다. printf에 사용되는 포..
카테고리 REVERSING 문제 welcome 이라는 64 bit 바이너리가 주어졌다. Mac에서 실행할 수 있는 파일(Mach-O) 인데 일단 IDA로 열어봤다. v6의 값들과 v7의 값들을 XOR 연산한 결과가 "WelcomeToLayer7CTF"와 같다면 "Congratulation!\n"이라는 문자열이 출력된다. v6의 값이 무엇이어야 하는지를 맞춰야 하는 것 같다. XOR 연산의 특성상 A ^ B = C C ^ B = A 이므로 "WelcomeToLayer7CTF"와 v7의 값들(v7부터 v9까지 총 18바이트)을 XOR 연산하면 v6의 값이 나온다. a = "0415062c07083501" a += "55040b2006090c60" a += "1B3C" b = "WelcomeToLayer7CT..
카테고리 WEB 문제 "admin"으로 로그인해야 하는 문제이다. "asdf"로 아이디를 만들어서 로그인해보면 쿠키에 "VlVaa01GSXhXWGRQVkVKcFZtMVNNVlJXV2xOVlVUMDk%3D" 라는 값이 저장되어 있다. %3D는 '='에 해당하는 아스키코드이므로 base64 암호화로 추측하고 디코딩을 시도했다. VlVaa01GSXhXWGRQVkVKcFZtMVNNVlJXV2xOVlVUMDk= VUZkMFIxWXdPVEJpVm1SMVRWWlNVUT09 UFd0R1YwOTBiVmR1TVZSUQ== PWtGV090bVduMVRQ =kFWOtmWn1TP base64에서 '='이라는 문자는 패딩을 위해 넣는 것으로 알고 있는데 디코딩을 반복하다보니 이 문자가 제일 첫 번째에 나타났다. 문자열이 거꾸로 ..