분류 전체보기

· #Tip
Function Prologue Epilogue. A.함수의 호출. 1.함수 호출은 간단히 말해 이런 식.2.함수가 사용한 파라메터를 스택에 넣고, 함수 시작 지점으로 함수 호출.3.함수 내에서 사용할 스택 프레임을 설정 = 프롤로그.4.함수 내용 수행.5.수행을 마치고 처음 호출한 지점으로 돌아가기 위해 스택을 복원 = 에필로그.즉 호출한 지점의 다음 라인으로 점프.이 때 3번 과정을 프롤로그, 5번 과정을 에필로그라고 한다.둘 다 스택 프레임 설정과 복원에 관계 있다. B. 함수 호출 규약. 프롤로그와 에필로그는 함수 호출 규약 = 콜링 컨벤션에 따라 조금 다르다. Ex) -CDECL.1. 스택에 파라미터 삽입 순서 : 왼쪽 => 오른쪽.2. 스택의 정리를 호출한 함수(Caller)에서 수행. 즉 가..
Pwnable.flag 풀이. 파파가 포장된 선물을 줬다. 열어보자.이 Flag 문제도 bof 문제처럼 바이너리가 주어졌다.'this is reversing task. all you need is binary' 이 문구을 보니 뭔가 리버싱 문제인 거 같다.일단 그래서 헥스에디터로 flag 바이너리를 실행해봤다.보니까 ELF 파일에 UPX로 패킹이 된 거 같다. 일단 그러면 언패킹을 해줘야 한다. 그러기 전에 wget를 통해서 flag 바이너리 파일을 다운로드 받고, gdb를 이용할 수 있도록chmod 775를 하여 권한을 올려준다. 일단 리버싱 문제이기 때문에 문자열이 어떤 것이 있는지 확인하고자 strings flag 명령어를 이용하여 문자열을추출해 봤다. strings flag>flag_str.txt..
Pwnable.bof 풀이. Nana가 내게 말하길 버퍼오버플로우가 가장 일반적인 소프트웨어 취약점이라고 합니다. 그게 사실인가?라고 쓰여져 있다.일단 다운로드 하라고 하는 bof라는 실핼 파일과 bof.c라는 소스 코드가 있다.또한 nc를 통해 접속해서 푸는 문제라고 나와 있다.nc란 netcat의 줄임말로 TCP/UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓸 수 있는 유틸리티다.UNIX 계열의 cat을 보면 파일을 대상으로 읽고 쓰는데 Netcat는 network connection에 읽고 쓰는 것이라고 한다.pwnable 문제 유형을 보면 ssh를 통해 원격 터미널 접솟을 통해 문제를 푸는 경우도 있고,nc 서버로 접속해 문제를 푸는 경우도 있기에 숙지하고 있어야 하는 방법이다.먼저..
Pwnable collision 풀이. 일단 소스 코드를 해석하자면 인자는 2개로 해야 하며, 두번째 if는 2번쨰 인자의 글자, 즉 바이트 수는 20이어야 하며 세번째 if는 hashcode값과 check_password(첫번째 인자를 지칭)와 같으면 flag를 실행해주는 구조다. 일단 hashcode는 양수의 고정값이고, check_password 함수는 양수의 고정값을 반환하며 받아온 인자를 정수화시키고 그것을 5번씩 더해서 리턴해주는 형태다. 일단 그러면 위 소스코드에 나온 0x21DD90EC를 만들어 줘야 하므로, 역추적을 해본다. 다시 말해 20바이트 문자열을 int형 포인터로 캐스팅하여 정수값으로 res에 더한다. 즉 res = 0x21DD09EC 4바이트씩 총 20바이트, 다시 말해 5번을..
· #Tip
기본적으로 알아야 할 Gdb의 기본적인 사용법을 알아보겠다.여러 기본 명령어가 있지만, 사용하면서 기본적으로 알아야 할 명령어들이다. 1. gdb -q [binary] ==> gdb가 소리 안내고 켜지게 한다. ======> 아래 캡쳐를 보면 gdb를 통해 test 라는 파일을 디버깅할 때 -q 옵션의 유무에 따라 차이가 나타난다. 2.run or r ==> 바이너리를 실행한다.=====> gdb로 파일을 여는 명령인 r 옵션. 3.about breakpoint브레이크 포인트란 gdb와 같은 디버거가 프로그램을 실행시킬 때 브레이크 포인트를만나면 프로그램의 흐름이 일시적으로 멈추게되고, 브레이크 포인트 전까지만프로그램을 실행시키게 된다.즉 브레이크 포인트를 어디에 거느냐에 따라 결과도 당연히 달라진다.3..
Pwnable.uaf 1.Introduction '"엄마 Use After Free 버그가 뭐예요?" 라는 영어 문장으로 시작한다.UAF--> Use After Free 버그란 힙영역에서 발생하는 버그다.운영체제의 최적화를 위해 운영체제는 힙에 할당하고 해제한 영역을 flag비트만 설정해둔 다음, 그 영역의 메모리 데이터를 그대로 남겨둔다. 해제한 힙 영역을 재사용함으로써 문제가 발생한다. 즉 객체지향 언어인 C++, JAVA에서 발생한다.왜냐하면 동적으로 힙영역에 객체를 생성하고, 해제하게 되면 객체 데이터가 힙 영역 메모리에 그대로 남아있기 때문이다.객체안에 함수가 있다면, 그 영역에 함수 포인터를 원하는 값으로 덮어 씌워서 프로그램의 실행을 움직일 수 있다. 일단 putty를 키고 접속해본다.힌트를..
Codeengn Challenges = Basic 20 풀이. 20번이다. Key파일에 들어갈 Key값을 구하는 문제다.일단 Crackme3.key라는 파일이 필요하다.다운로드 후 .exe파일을 실행해본다. 지금 다음의 crackme를 시도해보라는 말이 등장한다.일단 올리디버거를 실행해본다. KEY파일이 18(12)만큼의 바이트가 있는지 확인해본다.12는 HEX. 10진수로는 18. 저 회색 부분을 보면 알고리즘이 나왔는데, 인터넷을 검색해보니 이 알고리즘은 한자리씩 A ~ O까지 XOR 연산을 하는 알고리즘.C로 해석해봤다. Key는 10진수로 18자리니까 123456789123456789로 맞춘다.이 알고리즘은 XOR 연산을 한 뒤에, 연산값을 누적시키는 것이 특징이다.이 값하고 나머지 4자리 값하고..
Codeengn Challenges = Basic 19 풀이. 19번이다.음.............. 몇 밀리세컨트 후에 종료되는지 묻고 있다.일단 밀리세컨트란 millisecond를 말하며 시간의 단위다.ms라고 쓰고, 1ms는 1000분의 1초다.즉 10ms = 100분의 1초. 100ms =10분의 1초. 1000ms = 1초.다운로드를 해서 .exe 파일을 실행해본다. ??????????????????????? 이강석이란 사람이 CodeEngn.com을 만들었다는 메시지가 뜨고,시간 지나니까 자동으로 닫힌다.즉 창이 뜨고 닫히기까지의 시간을 ms 단위로 구해야 한다.올리디버거를 실행한다. 첫 줄에 PUSHAD라는 명령어가 있는 것을 보아 UPX로 패킹되어 있을 확률이 높다.PEID를 실행해본다. ..
Allblackk
'분류 전체보기' 카테고리의 글 목록 (36 Page)