본문 바로가기

분류 전체보기

(24)
[문제해결] Offset 해결과정 Offset 문제 [실행 화면] 무슨 함수를 실행시킬지 물어봤는데? 아무 단어나 입력하면 아무것도 출력을 하지 않는다. [사전조사] 어떤 공격기법이 통할지 조사해봤다. Full RELRO : 저번에 함수의 진짜 주소를 다른 함수로 덮어씌우는(got 덮어쓰기) 기법이 불가능해진다. NX enabled : 데이터가 저장되는 영역에 실행 방지가 걸려 쉘코드 삽입이 불가능하다. PIE : 실행파일의 위치가 변하기 때문에 함수들의 절대주소는 알 수 없고, 상대적인 위치만 알 수 있다. [흐름 분석] 원하는 함수라.. 함수의 목록을 살펴봐야겠다. one 함수, two 함수, print_flag 함수가 있다. print_flag 함수를 실행시키는 것이 목적인것 같다. 우선 ebx에 offset _GLOBAL_OFFS..
[정보보안] Simple_Overflow_ver_2 해결과정 웬지 전혀 심플하지 않을 문제일것 같다. 프로그램 흐름이 조금 복잡하다. 일단 실행을 해봐야겠다. 문자열을 입력하면 주소와 함께 입력했던 문자들을 한글자씩 띄어쓰기 해서 보여주는것같다. (추측상으로 저 주소값은 문자열이 저장된 위치같다.) again에서 n을 답할때까지 계속 해주는것같다. 흐름은 다음과 같다. 1. 출력 버퍼 0으로 설정 1. "Data : " 출력 후 enter 입력 전까지 입력받음 2. int var_8 = 0 3. *esp = var_8; strlen(var_88) 4. if(ebx(=0) 초록색 화살표, 만약 길이가 0(입력이 없음)이면 빨간색 화살표 1. var_88 + var_8의 값이 저장된다. 즉, 문자열에서 (현재 반복횟수 - 1)에 ..
[문제해결] x64 Simple_size_BOF 해결과정 더 심플한 버전의 오버플로우 문제인가? 실행시켜보면 저렇게 메모리주소가 나오고 다음으로는 입력을 받는다. 보호기법은 딱히 없는것 같다. 흐름을 살펴봐야겠다. 1. 출력버퍼 0으로 설정 2. s에 있는 문자 출력(삐빅 으로 시작하는 문자열이 들어있음) 3. buf: 와 함께 var_6d30의 위치 출력 4. var_6d30에 입력을 받음 함수와 문자열에는 아쉽게도 "/bin/bash"와 관련된 부분은 찾을 수 없었다. 직접 실행하는 코드를 넣고(nx bit가 비활성화 되어있기 때문), 흐름을 유일하게 바꿀 수 있는 return address 부분을 변조하는 방법을 써야할것 같다. 쉘코드는 저번에 만들었던 [문제해결] HackCTF 내 버퍼가 흘러넘친다!!! 해결과정 (tistory.com) 쉘코드를 이용할..
[문제해결] x64 Buffer Overflow 해결과정 버퍼 오버플로우에 관련된 문제인것같다. 64비트 프로그램 하나를 줬다. 흐름을 알아봐야겠다. 함수들을 살펴보다가 camllmemaybe라는 함수가 있었다. 이 함수는 무슨함수일까? 오 쉘을 실행시키는 함수인것 같다. 이 함수를 불러와야하는게 목적인것 같다. __isoc99_scanf라는 함수가 눈에 띈다. 이 함수는 scanf와 거의 동일하지만 %a와 같은 서식 지정자를 못쓴다고 했다.(따라서 got overwrite는 못쓸것같다.) 단, scanf_s처럼 길이 제한을 하는 기능은 없기 때문에 버퍼 오버플로우를 할 수는 있어보인다. 그 다음으로는 입력한 문자열의 길이를 strlen을 통해 측정한다음, printf를 통해 "Hello %s" 형태로 출력한다. scanf 부분에서 버퍼 오버플로우를 발생시켜서..
[문제해결] HackCTF 내 버퍼가 흘러넘친다!!! 해결과정 main 함수 어셈블리어 변환 결과 예상 코드는 다음과 같다. 1: setvbuf(0,2,0); 2: printf("Name : "); 3: read(0,name,0x32); 4: gets(&(ebp+var_14)); printf를 통해서 fsb 취약점을 이용하는것은 불가능해 보인다. 일단 name의 위치가 어디인지 봐야겠다. 0x20만큼의 그냥 별개의 공간이다. 딱히 쓸 일은 아직 없어보인다. read함수에서도 문자열을 별개의 공간으로 보내버리니 gets함수 부분에서 버퍼오버플로우를 이용하는 방법밖에 없는것 같다. gets함수가 실행될때쯤 스택 모양이다. 현재 상황에서 함수의 흐름을 바꿀 수 있을만한곳은 +4 부분에 있는 return address이다. return address를 통해서 원하는 방향으..
[문제해결] HackCTF Basic_FSB 해결과정 일단 실행부터 해보았다. 입력한 문자열을 그대로 돌려주는 것 같다. 코드를 차근차근 뜯어보았다. 스택 사용 준비를 해주고(1) ESP를 4바이트만큼 위로 옮기면서 eax에 출력 관련 라이브러리를 로드한다(2). 그다음 스택에 0 2 0을 순서대로 집어넣고(3) eax를 집어넣은 다음(4) _setvbuf라는 함수를 호출을 한다... 스택의 전체적인 모습은 아래처럼 생겼을 텐데 저 함수는 대체 무엇을 하는 함수인지 모르겠다. 함수 내부로 들어가 봐야겠다. 뭔가 이미 존재하는 함수 같다. 구글링을 통해 저 함수에 대해 알아봐야겠다. (참고 : C 언어 코딩 도장: 85.20 입출력 버퍼 활용하기 (dojang.io)) int setvbuf(FILE *_Stream, char *_Buffer, int _Mod..
[어셈블리어 분석 도전] Hello World 프로그램 분석해보기 EBP(RBP) : 스택의 가장 아랫 부분을 가리키는 포인터 ESP(RSP) : 스택의 가장 윗부분을 가리키는 포인터 EAX(RAX) : 연산결과 & 함수 반환값 등을 저장 ECX(RCX) : 반복 작업 등을 할 때 카운트를 저장 수학을 이론만 알고 실제 문제에 적용해보지 않으면 실력 향상에 크게 도움이 안되듯 어셈블리어 해석에 익숙해지기 위해 기본적인 프로그램들을 이용해서 실제로 적용해보기로 하였다. 첫 번째 프로그램은 C언어를 처음 시작할때 짜봤던 그 유명한 Hello World으로 정했다. 변수의 저장방식을 알아보기 위해 Hello World와 함께 변수에 저장된 값 하나를 출력하는 기능도 더해보았다. #include int main(){ int a = 5; printf("Hello World! %..
어셈블리어 도전기 우선 도전 계기를 설명하기에 앞서서 정보보안 적용 분야를 3가지로 분류해 보았다. 1. 웹 2. 리버싱 3. 시스템해킹 정보보안에 관심을 가지기 시작했을 때 어느 부분부터 알아볼까 고민을 많이 했었다. 물론 3가지 분야 모두 제대로 다루기에 나에게는 아직 사전 지식이 많이 부족한 것을 잘 알고 있다. 우선 내가 정확히 무엇을 모르는지를 정리하는 것이 시작점을 결정하는데 도움이 많이 될 것 같아 글로 한번 정리해 보았다. 1. 웹 분야 사실 웹에 대해서는 아는 것이 거의 없다시피 하다. 가장 기본적인 HTML부터 PHP, ASP, Javascript 등 웹 프로그래밍에 대해서는 프로그래밍 경험이 전무하다. 웹서버를 마련하는 등 웹 프로그래밍을 제대로 사용하기 위해 준비해야 하는 것들이 너무 많다고 판단해서..