본문 바로가기

CTFs/MMA 2016

[MMA 2016] pwnable : judgement judgement 이번 문제는 입력을 받고 그 값이 플레그하고 같은지 검사를 해 주는 프로그램이다.분석해 보면 다음 부분에서 FSB 버그가 존재한다. 1234567 printf("Flag judgment system\nInput flag >> "); if ( getnline(&format, 64) ) { printf(&format); // vulnerable! if ( !strcmp(&format, flag) ) ... }Colored by Color Scriptercs getline() 함수로 입력을 받는데, 내부에 Isprint 함수를 사용해 읽을 수 없는 아스키 코드는 입력이 불가능 하다. (딱히 문젠 안된다!)풀이는 %1s %2s ... %10s ... 이런식으로 계속 보내서 스택을 leak 해서.. 더보기
[MMA 2016] crypto : Super Express Super Express이번 문제는 암호화 파이썬 스크립트 하나랑 암호화한 데이터가 주워졌네요. 암호화 하는데 Key 라는 값과 Flag 가 사용되는데 두 개다 가려졌습니다. 흐음.... 는 그냥 별거없고 0 부터 255 까지 다 돌려가면서 해 보면 나오네요..ㅋㅋ 1234567891011121314151617enc = "805eed80cbbccb94c36413275780ec94a857dfec8da8ca94a8c313a8ccf9".decode('hex') def decode(a, b): flag = "" for i in p: flag += chr((ord(i)*a + b) % 251) return flag p = []for i in enc: p.append(i) for i in xrange(255): f.. 더보기
[MMA 2016] forensic : Rescue Data 1 : deadnas Rescue Data 1 : deadnas일단 3개의 disk 파일이 주어진다. 일단 disk0 뺴고는 뭔지 몰라서 카빙을 시도했지만 건진건 파손된 .jpg 파일 한개...그 뒤로 disk0 disk2 를 합쳐서 NAS 복원 프로그램 RAID0, 5 복원 및 다 시도해 봤는데 실패했다. ( runtimes 제품 사용함 ) 그런데 힌트로 주어진 RAID-5 문서를 관련해 보니 그냥 xor 하면 된다는 내용을 봤다.........결론적으로 disk0 하고 disk2 를 xor 한 파일을 disk1 으로 쓰면 된다는 것이다. 음.. runtimes 제품 사용했는데 제대로 RAID-5 복원이 안되서 OSForensics 을 씀...복원한 이미지를 열어보면 root 경로에 flag.jpg 파일이 들어 있는걸 확인.. 더보기
[MMA 2016] misc : ninth ninth일단 .png 파일이 하나 주어졌고 아래 "png 기반 스테고 문제가 아닙니다" 라 써져있었어요그래서 그럼 뭐지? ㅇㅅㅇ 하다가 무작정 카빙을 하기 시작했습니다. binwalk 로 카빙을 하고 그냥 플레그가 있는지 확인하다 발견했습니다 ㅋㅋㅋ... 123456789101112zero@ubuntu:~/Desktop/ninth$ binwalk -e ./*png DECIMAL HEXADECIMAL DESCRIPTION--------------------------------------------------------------------------------0 0x0 PNG image, 1200 x 848, 8-bit/color RGBA, non-interlaced99 0x63 Zlib compres.. 더보기
[MMA 2016] crypto : Twin Primes Twin Primes주어진 파일은 암호화 하는 파이썬 스크립트 하나와 각각 n 과 e 값이 적혀있는 2개의 파일과 암호화 된 파일이 주어졌다. 주어진 암호화 스크립트를 보니 일단 Twin Primes(일명 쌍둥이소수) 를 생성하고 이 값들을 이용해서 2개의 키들을 만든다.첫번 째 키에서는 각각 다른 쌍둥이 소수 p, q 가 사용되었고두번 째 키에서는 사전에 구해놓은 쌍둥이 소수인 (p+2), (q+2) 가 사용되었다.E 값은 0x10001(65537) 로 주워 졌으니 각 키에 대한 정보를 써 보면 12345678910111213- Key 1p1 = pq1 = qn1 = p*qd1 = inverse(e, (p - 1)(q - 1))e = 0x10001 - Key 2p2 = p + 2q2 = q + 2n2 .. 더보기