분류 전체보기
-
[02-10 공부정리]공부정리 2018. 2. 10. 03:09
오늘은 tuts4you에 Lena Tutorial 문제를 풀었다.1번 문제를 풀었는데 1번문제의 write up하는 형식의 글로 쓰도록 하겠다. 우선 tuts4you 사이트는 여기다.[tuts4you Site] .rar의 압축파일이며, 비밀번호는 tuts4you다.압축을 풀고 file폴더에 들어가면 [File]기본적인 참고문서들과 함께 우리가 리버싱할 reverseMe.exe 파일이 있다.거두절미하고 실행부터 해보자! [reverseMe 실행]실행을 하면 "Evaluation period out of date. Purchase new license" 라는 창이 하나뜨고확인을 누르면 종료된다.뭐 평가기간이 만료되었으니 새로운 라이센스를 구매하라는 글인데..실행으로 얻을 수 있는 정보는 없으니 ollyDBG..
-
[Stack 6]System/Protostar 2018. 2. 10. 00:29
[Stack6 Code] [Stack6 실행]우선 프로그램을 실행하면 입력한 값을 그대로 출력해준다.gets( )에서 BOF취약점이 있으며, 이 점을 이용해서 RET를 변조할 수 있다.gets( ) 다음에 __builtin_return_address(0)함수로 리턴주소를 ret에 저장한다그 다음에 ret이 0xbf로 시작하면, 즉 스택와 동일한 주소면 종료하는 조건문이 있다.따라서 쉘코드로는 쉘을 따내지 못한다.그래서 RTL을 이용해서 쉘을 따냈다. [RTL]ReturnToLiblaryRET공간에 시스템 라이브러리 함수의 주소값을 넣어서함수가 끝나고 RET주소로 복귀할 때, 시스템 함수가 실행되도록 하는 것이다.자세한 설명 : [RTL이란?] 우선 RTL공격을 하려면 System라이브러리 주소와 /bin..
-
[02-08 공부정리(RTL정리)]공부정리 2018. 2. 8. 03:32
오늘은 RTL에 대해서 공부했으니, 실습한 부분은 정리하겠다. [RTL이란?]Return To Library로 프로그램 ret(리턴 값)에 공격자가 원하는 라이브러리 함수 주소를 로드 시켜해당 라이브러리 함수를 실행하는 공격기법이다. 예를들면 System함수를 호출한다거나 또, System함수를 호출한다거나... 맞다. 우린 쉘을 따면 된다.또, RTL공격은 메모리 보호 기법중 NX Bit와 DEP를 우회한다.NX bit(Never Execute bit) : ELF 보호기법. NX특성으로 모든 메모리영역을 데이터 저장용도로만 사용한다. 따라서 쉘코드 실행을 방지한다.DEP(Data Execution Prevention) : PE 보호기법. 데이터 실행 방지로 스택이나 힙에서 쉘코드 실행을 방지한다. 간단..
-
[02-07 공부정리]공부정리 2018. 2. 7. 00:37
2018-02-06 공부정리 시작!오늘은 [리버싱 핵심원리]에서 스택부분을 공부했다.또, Google Codejam_Africa문제 중 [Odd Man Out] 문제를 풀었다. [Stack Memory] 프로세스에서 스택 메모리 역할은 다음과 같다.- 지역변수 저장- 함수 호출 시, 파라미터 전달- 복귀주소(Return Address) 저장 또한, 스택 메모리는 FILO(First In Last Out)구조로 되어있는데말 그대로 선입후출. 먼저 PUSH된 데이터는 제일 마지막에 POP되는 구조다. 스택을 관리하기 위해서 두개의 레지스터가 사용되는데ESP와 EBP가 그것이다.ESP는 Stack Pointer이며, 스택의 제일 위쪽을 가르키고 있다.(낮은주소)EBP는 Base Pointer로 스택 제일 바닥..
-
[02-06 공부정리]공부정리 2018. 2. 6. 01:41
2018-02-05 오늘 하루 공부한 것을 정리한다. 오늘은리버싱 핵심원리(나뭇잎 책)을 보면서 공부를 진행했다.내 분야를 탐색하는데 시간이 오래걸렸다.시스템도 재밌고, 네트워크 또한 재밌게 느껴졌다. 웹도 그러했고. 그러다 리버싱을 한번 경험해봤는데 너무 재밌었다!정확히 말하면 포너블 문제를 풀기위해 리버싱을 하는 과정이었는데포너블과 리버싱은 숟가락과 젓가락같은 관계라고 생각했기 때문에둘 중 리버싱을 좀 더 집중적으로 공부해보기로 마음먹었다.앞으로 공부는 [리버싱 핵심원리]로 진행할 것이다. 오늘은 1장~5장까지 공부했다.리버싱이 무엇인지 부터해서 HelloWorld.exe 메인함수 찾기, 디버거 사용법, 바이트오더링, IA-32 레지스터 까지 말이다. 우선 HelloWorld.exe에서 메인함수를 찾..
-
32Bit(x86)/64Bit(x64) 차이점 정리System/Reversing 2018. 2. 4. 02:56
[32Bit / 64Bit 차이점] 32Bit 64Bit 주소공간 2^32 만큼 사용가능 2^64만큼 사용가능 (실제로는 2^48) 레지스터 EAX,EBX,ECX,EDX,EBP,ESP,EDI,ESI (총 8개) RAX,RBX,RCX,RDX,RBP,RSP,RDI,RSI R8,R9,R10,R11,R12,R13,R14,R15 (총 16개) 함수 호출 규약 Cdecl / Stdcall Fastcall #64Bit에서 실제로는 48Bit만 사용 가능한 이유? 64Bit라면 64Bit만큼 주소 공간을 사용할 수 있어야 한다. 0xFFFF FFFF FFFF FFFF 총 16개Byte로 주소공간을 표현한다. 하지만, 64Bit를 전부 사용하게 되면 배보다 배꼽이 더 큰 상황이 생긴다. 2^64 만큼을 관리할 메모리 크..
-
[Stack 4]System/Protostar 2018. 2. 2. 23:44
[Stack 4 Code] [Stack 4 실행] 코드는 buffer를 입력받고 끝난다.BOF를 일으켜 win()를 실행시키면 되는 문제같다.우선, A를 65개 넣어봤지만 아무 반응이 없다.gdb로 열어봐야겠다. ========================================================== 문제를 풀기 위해선 EIP레지스터를 알아야 했다. EIP란Instruction Pointer로다음 실행될 함수의 주소값을 가지고 있는 레지스터다. 따라서, EIP공간까지 BOF를 일으켜서 win()의 시작 주소값을 넣어주면 되는 문제다. [Stack4 main] gets함수가 호출되는 부분에 BP를 걸고 실행을 시킨 후AAAA를 입력해봤다. 보면 buffer의 주소값이 0xbffff760임을..
-
[Stack 3]System/Protostar 2018. 2. 2. 20:42
[Stack 3 Code] [Stack 3 실행] 64바이트 버퍼공간을 입력받는다.그 후, 포인터fp안에 있는 주소값을 출력하고 그 주소값으로 fp함수를 호출한다.따라서, BOF로 우리가 원하는 주소의 함수를 호출할 수 있게된다.여기선 win함수를 호출하면 된다.그럼 code flow successfully changed 라는 문자열이 출력된다. =========================================================== 동작 모습은 확인 했으니 gdb로 main함수를 열어봤다.①에서 fp를 0으로 초기화 시켜준다.②에서 buffer를 입력받는다.③에서 fp가 0인지 아닌지 판별 후④ je(jump equal) 결과가 0과 같으면 ④-2로 jump하고다르면, ④-1로 계속 ..