본문 바로가기

분류 전체보기

2016 KDMHS-CTF times 200점으로 나온 리버싱 문제이다. 새벽에 나와서 별로 풀 의지가 다들 없었던거 같다ㅠㅠ IDA로 까보면argv[1]로 플래그를 전달받는다.그 다음 이 부분을 보자. 먼저 타임스탬프를 가져와서 srand넣어주고 dword_804B060와 xor하는데 dword_804B060를 seed라고 하자.seed를 타임스탬프와 xor하고 순차적으로 rand()값을 0xffffff, 0xffff, 0xff로 나눈 나머지와 xor 해 주고 그 밑에서 막 쉬프트 연산을 해 준다. 많은 분들이 이 부분에서 아 이게 뭐야 하고 걍 닫았을 거라고 생각하는데 이 부분은 그냥 더미에 불과하다. 이거를 디버깅 해 봤다면 알 수 있었을 텐데 이 구간을 좀 더 간단하게 표현해 보면, 처음 seed값이 0x12345678이라고 하면 s.. 더보기
html 태그 정리 1 html 공부 해보고 있는데 태그가 엄청나게 많다.. - html타입이라는거를 알려줌~ html 시작함 ~ 언어는 영어시작 머리 부분 문서의 정보 표시 문자를 utf-8로 표시~ 제목(탭에 보이는 부분)~ 제목(내용에 보이는 부분) 크기 별로 1~6으로 나뉨~ 내용 부분~ 문단 ~ 문단 내용에 마우스를 올리면 작은 말풍선 뜸~ 하이퍼링크 ~ www.naver.com으로 이동 ~ 새 창으로 이동 이미지 image.png 표시 이미지가 로드되지 못했을 때 표시됨 가로 세로 픽셀 설정 줄 그어줌 더보기
2016 ASIS CTF Quals - firtog 포렌식 문제이다. 맨 처음 나온 리버싱이 너무 안풀려서 잡아본 문제이다. 파일은 패킷 파일이 주어진다. 네트워크 같은거 잘 몰라서 내부에 어떤 파일들이 있나 봤더니 zlib 파일들이 많이 있었다. 그래서 다 추출해 보았다. 123456file = open('firtog.pcap', 'rb').read().split('\x78\x9c') data = ''for i in range(1, len(file)): data += ('\x78\x9c' + file[i]).decode('zlib')open('decypted', 'wb').write(data)cs이렇게 파이썬 소스를 짜서 추출하면 된다. 추출된거 보면 막 이상한 것들이 많다. 페이크 플래그도 있고 막 파이썬 소스도 있고 했는데 추출된 데이터의 밑쪽을 보.. 더보기
2016 ASIS CTF Quals - Catch Me! 대회 전체적으로 리버싱이 상당히 어렵게 나왔다.. 5문제 나왔는데 최종적으로는 이 문제 하나밖에 못풀었다. 아무래도 리버싱 문제를 풀 때 인내심이 약간 떨어진 것 같다. 본선 올라갔으니까 본선 문제는 빡세게 제대로 잡고 다 분석하겠다는 마음으로 풀어봐야겠다. 이 문제는 x64 elf 바이너리이고 xmm 레지스터를 이용한 연산을 많이 한다. main함수의 코드는 이게 다이다. sub_400820의 함수 리턴값은 항상 0xB11924E1로 같으므로 크게 신경쓸 것은 없다. 그 후에 이 값들을 이용해서 0x6012A8부터 네 바이트 값을 만들어 내고 ASIS와 CTF 환경변수의 값들을 가져와서 CTF 환경변수의 값과 0xB11924E1 이 값을 xor했을 때의 값이 0xFEEBFEEB이면 ASIS 환경변수에 .. 더보기
2016 CodeGate Final rev 두 명 푼 250점 리버싱 문제입니다. 64비트 ELF이고 Go언어로 작성된 프로그램 입니다. 일단 실행시켜 보겠습니다.막 good good wrong wrong 출력하고 끝납니다. 모두 good이 나오는 키를 찾으면 될 것 같습니다.먼저 IDA로 까 보겠습니다. Go는 언어 특성상 헥스레이가 안되기 때문에 순 어셈만 보고 분석했습니다.먼저 입력을 받고 길이 체크 후에 메인 체크 루틴으로 넘어갑니다.길이는 15글자 이상이어야 합니다. 후에 메인 체크 루틴으로 넘어가면 그래프뷰 보고 쫄았지만 디버깅 하면서 분석하니까 크게 힘들지는 않았습니다.먼저 스트링의 첫 번째 글자와 마지막 글자를 가져와서 비교합니다. 만약 같다면 wrong을 출력합니다. 그 다음으로 첫 글자와 끝 글자가 숫자/알파벳 범위에 없고 합이.. 더보기
2016 CodeGate Final GMPQZ 6명 푼 미스크 문제입니다.이렇게 생긴 파일 하나 달랑 줍니다. 여기서 맨 앞에 있는 0x78 0x9c는 zlib이라는 압축 알고리즘의 시그니쳐 입니다. 내부에 시그니쳐가 많이 보이는 것으로 보아 여러개가 모여 있는 것 같습니다. 파이썬 소스를 짜서 몽땅 압축을 풀어 줍니다. 123456file = open('GMPQZ', 'rb').read().split('\x78\x9c') data = ''for i in range(1, len(file)): data += ('\x78\x9c' + file[i]).decode('zlib')open('decypted', 'wb').write(data)cs처음에는 압축이 풀린 것을 하나하나 다른 파일에 저장했는데 열어서 확인해 보니 중간 중간 0x55 0xaa로 끝나는 .. 더보기
2016 CodeGate Final BMP 27명 푼 미스크 문제입니다.웹사이트와 소스가 주어지는데 웹 사이트를 들어가 보면 이렇게 생겼습니다. 글자를 치면 이렇게 bmp파일이 점점 생겨나면서 올라옵니다. 옆에 flag.bmp가 만들어 지는 값을 찾으면 됩니다. 처음에는 편법으로 0~9, A~Z, a~z까지 싹다 어떤 형태의 그림이 만들어지는지 찾은 후에 테이블로 만들어서 비교하려고 했으나 이전 값이 현재의 bmp에 영향을 준다는 것을 깨닫고 포기했습니다. 결국 주어진 js파일을 분석해서 브루트포싱을 하는 파이썬 소스를 짜서 풀었습니다. 처음에는 소스가 한줄로 나열되고 난독화가 약간 되어 있어서 보기 편하게 만들어 준 후에 분석했습니다. 12345/**IE, Safari Not good.Chrome good Work.**/function crea.. 더보기
2015 Christmas CTF vsnoted 작년 크리스마스 때 열렸던 크리스마스 CTF vsnoted를 풀어보았다. 그 때 당시에는 풀어볼 엄두도 못냈었는데 이제는 조금 해 볼만 했다. 그리고 포맷스트링은 진짜 할 때 마다 너무 헷갈리는 것 같다. 풀 때는 내 환경의 스택 상황에 맞춰서 익스플로잇을 했는데 과연 이게 실제 대회 때에도 내 환경의 스택과 똑같이 같은 값이 들어있을 지가 의문이다. fsb문제가 나왔을 때 스택을 덤프해 주는 모듈 같은거를 하나 만들어 두어야 할 것 같다. 123456789101112131415161718192021222324252627282930313233343536373839404142from SunKn0wn import * r = remote('5unKn0wn.iptime.org', 8282) system_plt .. 더보기
fusion level04 얘도 엄청 어려웠다ㅋㅋㅋㅋ 두 군데에서 삽질을 했는데 첫 번째는 이 프로그램이 데몬으로 돌아가서 실행할 때마다 패스워드와 카나리, 베이스 주소 등등이 바뀌는 줄 알고 어떻게 할까 고민고민 하다가 성우형이 소켓이라는 사실과 패스워드를 구해내는 힌트를 주셔서 겨우 이 고비를 넘겼었다. 그리고 익스플로잇을 다 짠 후에 이번에는 당연히 소켓이니까 소켓용 /bin/sh를 보내다가 dup2 함수를 통해 파일디스크립터가 표준으로 바뀌어 있음을 깨닫고 일반 /bin/sh로 보내니까 쉘이 잘 따였다. 이 두 개 때문에 거의 이틀을 버렸다..ㅠㅠ1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545.. 더보기
OS 개발 18챕터 라운드 로빈 알고리즘이랑 태스크풀 등을 구현했다. 뒤로 갈수록 사실 흥미가 조금씩 떨어져서 의욕이 잘 나지가 않는다ㅠㅠ 잠깐 지금까지 했던거 다시 복습할 겸 헷갈리는 내용들 쭉 다시 읽어보고 이해하고 다음으로 넘어가야겠다. 근데 엄청 신기하다ㅋㅋㅋ 더보기