전체 글
-
리버싱 기초 - 2 (어셈블리어 기초, x86 기준)해킹/reversing 2022. 6. 27. 12:07
범용 레지스터 eax (accumulator register) : 연산, 함수의 리턴값을 저장하는 레지스터 ebx ( base address register ) : 데이터에 대한 포인터를 저장하는 레지스터 ecx ( counter register ) : 반복문 수행 시 카운터로 활용되는 레지스터 edx ( data register ) : 연산에 사용되는 레지스터 esi ( source index register ) : 데이터 조작이나 복사 시 source pointer를 저장하는 레지스터 edi ( destination index register ) : 데이터 조작이나 복사 시 destination pointer를 저장하는 레지스터 esp ( stack pointer register ) : 스택의 끝지점..
-
리버싱 기초 - 1 (리버싱 기본 개념)해킹/reversing 2022. 6. 27. 10:32
리버싱(리버스 엔지니어링)이란? 소프트웨어 분야에서 리버싱이란 프로그램의 동작 구조, 기능 등을 분석하여 새로 만들거나 수정을 가하는 등의 일련의 과정을 일컫는다. 리버스 엔지니어링, 리버싱, 역공학 기법 등등 다양한 이름으로 부르지만 리버싱으로 많이 부른다. 분석 방법 크게 정적 분석과 동적 분석 2가지로 나눌 수 있다. 정적 분석은 파일을 실행하지 않은 채로 파일 형식, 압축 여부, 크기, 헤더 정보 등등을 분석하고, 소스 코드로 디컴파일하거나 어셈블리언어로 디스어셈블한 결과를 보며 프로그램의 동작 방식을 분석하는 방법이다. 동적 분석은 파일을 실행시켜서 결과를 보고 디버깅을 통해 코드 흐름, 메모리 상태, 레지스터 상태 등을 점검하며 프로그램의 동작 방식을 점검하는 방법이다. CPU 아키텍처 현재 ..
-
codegate2022 대학부 예선 후기헛소리 모음 2022. 2. 28. 02:31
어제 19시로 codegate2022 예선이 끝났다 2년 전에 체험삼아 아무 것도 모른채 나갔을 때랑 달리 본선을 노리고 처음으로 본격적으로 참가한 대회라 되게 간절했던 것 같다 우선 결과는 예선 9위로 본선에 나갈 수 있게 됐다 주요 멤버인 선배들이 본선 때면 다들 미국이나 군대로 가셔서 입상까진 쉽지 않을 것 같은데 열심히 준비해서 본선도 잘 해봐야겠다 문제는 전반적으로 상당히 어려운 난이도로 구성된 것 같았다 처음보는 블록체인 문제는 접근 방법도 감이 안 와서 건들지도 못 했고 포너블도 상당히 분석하기 복잡했다 리버싱도 까다로웠고 암호는 건드리지도 못 했다 즉 웹문제만 그나마 할만 해서 주구장창 풀었다 이번 예선을 하면서 진짜 합리적인 창의성이 중요하겠단 생각을 했다 한 문제에 8시간 가량 할당해서..
-
fta level11 문제 풀이(bof)ctf/ftz 2021. 12. 27. 11:02
level11에는 attackme파일이 있고 그 소스 코드가 hint에 있다. 간단한 bof문제로 보인다. bof가 아니더라도 printf( str )을 보니 FSB도 발생할 것으로 보인다. 이 글에서는 bof로 먼저 풀어보겠다. 인자로 쉘코드를 넣어주고 그게 strcpy함수에서 str변수로 복사가 된다. 여기서 bof가 발생해 리턴 값을 바꿀 수 있고 이 리턴 값을 str변수 주소로 하거나 환경변수의 주소로 하면 될 것 같다. gdb로 분석해 봤을 때 str 변수는 ebp-264위치에 있다. 그러면 쉘코드(25바이트)+A(268-25바이트)+str의 주소 이렇게 인자로 넣어주면 될 것 같다. 그런데 문제가 있다. aslr보호기법이 걸려 있어서 실행할 때마다 주소가 달라진다. 그래서 str의 주소 보다는..
-
ftz level9 문제 풀이ctf/ftz 2021. 12. 23. 17:30
level9의 hint파일을 보니 c로 작성된 코드다. 버퍼 오버 플로우 취약점이 발생하는 것을 볼 수 있다. 실행시키고 10바이트 크기의 buf에 40바이트 입력받으면서 bof가 발생하는데 buf에 40바이트 입력받으면서 buf2의 내용을 "go"로 바꿔주면 문제가 해결된다. 일단 buf의 10바이트를 아무 문자로 채우고 buf2까지 얼마나 떨어졌는지 모르기 때문에 하나씩 추가하면서 go를 buf2에 넣다보면 ax16go일 때 Good Skill이 뜨면서 level10권한으로 쉘이 실행된다. 여기서 my-pass 명령어로 비밀번호를 확인하면 된다.
-
ftz level8 문제 풀이ctf/ftz 2021. 12. 23. 17:23
level8의 문제는 위와 같다. find 명령어를 잘 써서 용량 2700에 유저권한이 level9인 파일을 찾으면 될 것 같다. find의 -size 옵션을 쓰면 되고 용량의 단위는 1byte가 c로 표시되므로 "find / -size 2700c 2> /dev/null"이렇게 해주면 될 것이다. /etc/rc.d/found.txt가 의심스럽다 cat으로 한 번 보자 파일에는 위의 내용이 여러 줄 도배되어 있다. shadow파일에는 비밀번호가 있는데 $(해싱알고리즘id)$(해싱후비밀번호) 이렇게 비밀번호 정보가 있다. 1번의 경우에는 md5 해싱이다. 우리는 일반적인 방법으로 해싱을 역연산해서 비밀번호를 구하기 힘들다. 이때를 위해 john the ripper라는 툴이 있는데 이 툴을 이용하면 편하게 비..
-
ftz level7 문제 풀이ctf/ftz 2021. 12. 23. 16:58
level7로 로그인 후 hint를 보니 패스워드를 추론하는 문제가 나왔다. 실행해보니 위와 같이 바로 패스워드 입력을 받는다. 패스워드에 아무 값이나 넣어보니 cat /bin/wrong.txt가 실행됐나보다. 그런데 파일이 없다고 아무 것도 뜨지 않았다. 찾아보니 개인이 ftz를 실행해서 문제를 풀 경우 파일이 없다고 만들어줘야 한다. 파일 내용은 --_--_- --____- ---_-__ --__-_- 위와 같다. 이를 이진수로 보면 "1101101 1100001 1110100 1100101" 이렇게 표현 될 것이고 이를 십진수로 변환하면 "109 97 116 101" 위와 같이 되고 이를 아스키코드 표에 맞게 문자로 바꾸면 "mate" 이걸 입력해준다. 성공적으로 level8의 비밀번호를 알아낼 수..