본문 바로가기

My Life/Diary

2016년 1월 22일 금요일 오늘은 OS 스터디에서 64비트 프로세서에 관한 운영모드, 레지스터, 메모리 관리기법에 대해서 발표했다. 확실히 페이징이나 세그먼테이션 같은 기법들을 읽어만 보다가 직접 말하면서 설명을 해 보니 설명해 주면서 나도 다시 한 번 더 이해가 되는듯 했다. 다음주에 부팅 과정과 부트로더 작성을 성휘가 발표할 것이다. OS도 어렵지만 참 재밌는 것 같다. 그리고 pwnable.kr의 alloca문제를 다시 붙잡았다.. 끝없는 삽질을 통해 내 우분투에서는 드디어 쉘을 따는데 성공했다. 그리고 기쁜 마음으로 pwnable.kr서버에 접속하여 똑같이 했는데 쉘이 오지가 않았다... gdb로 똑같이 따라 했는데 그냥 메모리 값이 다르게 나온다.. 내 우분투에서는 eip가 의도한대로 변조가 잘 되는데 pwnable.kr.. 더보기
2016년 1월 19일 화요일 오늘은 자습시간에 리버싱 핵심원리가 있어서 오랜만에 PE구조를 다시 공부해 보았다. 예전에는 그토록 어려웠던 IAT나 EAT를 다시 공부하니 예전 기억이 새록새록 올라왔다. PE를 다시 공부하고 나서 이번에 예전부터 만들어 보려고 했던 PE Viewer를 하나 만들기로 결심했다. 오늘은 직접적인 코딩은 하지 않았고 이전에 쓰던 PEView라는 유명한 프로그램을 직접 리버싱 해서 대체적으로 어떤 식으로 동작하는 지를 살펴 봤었다. 프로그램을 뜯어보고 옛날에 이 프로그램을 쓰면서 프로그램을 읽기 모드로 열어버려 PEView로 켜놓고 헥스 에디터로 수정되지가 않아 불편한 점이 있었는데 그 부분을 패치하고 프로그램을 처음에 어떻게 로딩하는지와 여러가지 궁금했던 부분을 봤었다. 오늘 대체적으로 어떤 구조로 되는지.. 더보기
2016년 1월 18일 월요일 오늘은 어제 끝난 CAT_Holyshield문제들을 다시 풀어보았다. 포너블 200을 풀어보려 했는데 계속해서 잘 되지 않았다. 아무래도 올라오는 라이트업을 보고 문제점을 파악해야할 것 같다. 포너블도 열심히 공부하고 리버싱도 열심히 공부해야겠다. 남은 시간에 pwnable.kr alloca를 다시 풀어봤는데 어떤 방식으로 풀어야 할지는 알겠으나 eip가 내 의도대로 제어가 되지 않는다... 인풋값과 실행하는 환경을 적절히 조합하면 될 것 같은데 잘 되지가 않는다.. 빨리 이 문제를 끝내고 지금부터는 대회 문제들을 주로 풀어봐야겠다. 내일도 열심히 삽질해야겠다. 더보기
2016년 1월 16일 토요일 15일 금요일부터 16일 토요일 밤까지 2016 CAT_Holyshield 대회를 했다. 먼저 내가 푼 문제는 MISC 50, 100, 100 그리고 Reversing 400이다. MISC 50은 사진 주고 키 찾는 문제이고 100짜리 하나는 비즈네르 암호문, 또 하나는 주어진 ELF를 분석하여 암호화된 사진을 복구하고 스테가노그래피로 숨겨져 있는 키를 찾는 것이다. 그리고 제일 재밌었던 Reversing 400은 DLL파일이 코드 가상화 기법이 적용되어있는 리버싱 문제였다. 처음에 간단한 방법 놔두고 엄한데서 삽질해서 3시간 가량 날려먹고 많은 삽질을 통해 풀었다.. 가상화 문제를 직접 풀어보는 것은 처음이라서 많이 삽질을 했었다. 또 각 opcode가 하는 역할들을 짚어 가면서 리버싱 하는 것이 재밌.. 더보기
2016년 1월 14일 목요일 오늘도 어제처럼 호실 안에서 노트북을 반입하여 pwnable.kr note를 풀었다. 쉘이 오지 않았던 이유는 소켓으로 계속 브루트포싱을 돌리다가 쉘이 연결되면 socket broken pipe라는 오류가 떴는데 이 이유가 많은 새로고침으로 인해 소켓이 끊어져서 생기는 오류라 한다.. 그래서 pwntools의 interactive()로 연결하도록 했더니 쉘이 따였다. pwntools를 실제로 써보니 정말 유용한 기능들이 많았었다. 나중에 필요하고 유용한 함수들만 모아서 나만의 모듈을 따로 만들어 봐야겠다. 그리고 pwnable.kr alloca문제도 풀려고 했는데 터뜨릴수는 있었으나 eip제어가 아직은 불가능했다. 뭔가 느낌이 좀 어려울듯한 느낌이 드는데 삽질을 좀 더 해 봐야겠다. 그리고 오늘 OS스터.. 더보기
2016년 1월 13일 수요일 오늘은 pwnable.kr의 rsa calculator를 풀고 note를 풀려고 노력했다. rsa는 어제 밤에 호실에서 몰래 노트북을 가지고 가서 풀었다. 약 두 시간동안 삽질을 했었는데 쉘이 오지 않는 이유를 알고 나니 너무 허무했었다.. 역시 나는 멍청이였다. 쉘이 오지 않는 이유는 rsa바이너리는 64비트 바이너리지만 나는 계속 32비트 쉘코드를 쓰고 있었던 것이다. 쉘코드가 실행이 되도 쉘이 안오길래 왜 그런가 하고 쉘코드까지 디버깅을 해 봤더니 이번에도 나의 멍청함을 다시 깨달을 수 있었다. 그리고 오늘 오후에는 note를 분석했는데 뭔가 풀 방법은 보이고 그 방법대로 하는데 또 쉘이 오지 않는다... 너무 슬프다. 또 내가 어떤 바보같은 짓을 했을지 걱정된다. 그래서 오랜만에 w3chall에 .. 더보기
2016년 1월 12일 화요일 일단 오늘도 pwnable.kr rsa_calculator를 분석하고 OS공부를 했다. 일단 rsa문제는 오늘 풀지 못했다. 두 군데서 터지는 것을 찾았고, 한 곳을 이용하여 eip를 변조할 수 있었는데 이상하게 쉘이 오지가 않았다.. 포너블의 고질적인 단골 손님인 "나는 똑바로 했는데 왜 쉘이 안따일까" 라는 딜레마에 빠지게 되었다. IDA나 gdb를 이용하여 디버깅 하면서 input을 넣으면 eip가 잘 변조가 되고 코드 역시 실행이 되는데 직접 실행해서 하거나 nc로 접속해서 input을 넣으면 eip가 변조되지 않고, 쉘도 오지가 않는다. 또 다시 삽질이 시작될 것 같다.. OS는 자료를 만드는데 그림 파일들이 공개된 게 많이 없어서 몇 개는 내가 제작해서 만들었다.. 의도치 않게 포토샵까지 공부.. 더보기
2016년 1월 11일 월요일 오늘은 pwnable.kr echo2를 풀고, OS발표 자료를 운영 모드 부분과 레지스터 부분 일부를 완성하였다. pwnable.kr은 항상 풀 때마다 느끼는 거지만 한 문제 한 문제 풀 때마다 삽질을 하는 능력이 늘어나는 것 같다. 내 적성에 꼭 맞는다. OS공부도 내가 직접 자료를 만들면서 공부를 하니까 머리에 더 잘 들어오고 이해가 더 잘 된다. 그리고 오늘은 재성이의 머신 러닝 DETS를 들으면서 R언어에 대해서 기본적인 부분을 배웠다. 파이썬과 비슷한 부분이 많아서 적응하기 편할 것 같다. 남은 기간동안 잘 배워야겠다. 내일은 남은 OS자료 더 만들고 pwnable.kr rsa_calculator문제를 풀어야겠다. RSA에 대해서 다시 공부해 볼 수 있을 것 같다. 더보기
2016년 1월 10일 일요일 오늘은 OS를 조금 공부하고 pwnable.kr crypto1문제를 풀었다. 운영체제에서 사용하는 메모리 관리 기법에 대해서 저번부터 보던 것을 다시 봤는데 여전히 어렵다. 그래도 볼 때마다 조금씩 더 이해가 되는 것 같아서 다행인 것 같다. 빨리 다 익히고 자료를 만들어야겠다. 그리고 pwnable.kr의 crypto1문제를 풀었다. AES암호화랑 암호화 모드에 대해서 다시 한 번 알아보고 공부할 수 있는 계기가 되었다. 조금 어렵긴 했는데 AES의 특성을 이용해서 풀 수 있었다. 머리에서 잊혀져 가던 AES를 다시 되새길 수 있어서 좋았다. 내일은 echo2를 풀고 OS자료를 만들어야겠다. 더보기
2016년 1월 9일 토요일 오늘부터는 일기를 비공개가 아니라 사적인 내용들 빼고 공개로 쓰려고 한다. 오늘은 pwnable.kr의 syscall을 풀면서 커널 익스플로잇을 해봤다. 직접 커널 쉘코드도 만들어 보고, 말로만 듣던 널디레퍼런스도 내 보고, 이번에도 삽질 엄청 많이 했다.. commit_creds(prepare_kernel_cred(0))에 대해서도 공부하고, syscall환경이 arm이라서 arm어셈 공부도 할 수 있었다. 오랜만에 얻을 수 있었던 지식이 많았던 것 같다. 이제 오늘 만들어둔 커널 쉘코드 NULL없애기 등이랑 여러가지 조금만 다듬고 쉘코드는 두고두고 사용해야겠다. 내일은 다음주 금요일에 OS스터디에서 발표할 내용 조금 더 공부하고 자료들도 만들고, 시간이 되면 pwnable.kr crypto1도 한 번.. 더보기