분류 전체보기
-
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로 계속 ..
-
[Stack 2]System/Protostar 2018. 2. 1. 20:53
[Stack 2 Code] [Stack 2 실행] getenv함수로 환경변수 GREENIE값을 불러온 후strcpy함수로 버퍼에 복사하는 과정에서 BOF가 발생한다. 환경변수 GREENIE를 만든 후, AAAA를 넣어주고 실행을 하면 modified값을 출력한다.BOF를 일으켜 modified변수에 0x0d0a0d0a를 넣어주면 Success 문구를 출력할 수 있다. ======================================================= 우선 버퍼공간이 64바이트니까 A를 64개 채워주고 스택상황을 확인해보자 저 부분이 strcpy함수를 호출하는 부분이니까그 다음 주소인 0x080484e4에 BP를 걸고 실행을 한다. ESP를 확인해보면 41(A)이 64개 채워진 다음 스택공..
-
[Stack 1]System/Protostar 2018. 2. 1. 17:45
[Stack 1 Code] [Stack 1 실행] Stack 1에 AAAA값을 넘겨 실행하면Try again, you got 0x00000000 이라면서modified변수 안에 값을 16진수로 8자리 출력해준다.BOF를 일으켜 modified변수 값을 0x61626364(abcd)로 조작해주면you have correctly got the variable to the right value라는 Success 문자열이 출력될 것이다. ================================================================================================== BOF취약점이 있는 strcpy함수를 사용함을 알 수가 있다.따라서, 인자값을 넘겨줄 때 64바이트를..
-
[Stack 0]System/Protostar 2018. 2. 1. 17:20
[Stack 0 Code] [Stack 0 실행] 버퍼가 64바이트 공간을 갖고 있으며, BOF를 일으켜 modified의 변수값을 바꾸면 되는 문제다.modified의 변수값이 0이아닌 다른값으로 조작되면you have changed the 'modified' variable이라는 문자열을 출력한다. gets함수를 호출하는 주소에 BP를 걸고 실행시켜보자 그 후 A를 64개 입력하고 ESP를 보면 64개까지 A가 채워져있고 그뒤는 modified변수 공간이므로 0으로 초기화 되어있다. 따라서, 버퍼64개를 넘겨준 뒤 임의의 값을 하나 더 넘겨주면 BOF가 발생되어 modified변수의 값이 바뀔 것이다. 성공적으로 modified변수 값을 조작했다. 그 후, Success 문자열 you have cha..
-
[C / lpcap] ARP SpoofingNetwork/NetProg 2017. 12. 14. 23:12
안녕하세요. 오랜만에 글을 씁니다. 처음에 윈도우환경에서 ARP Spoofing툴을 만들다가 라이브러리 지원한계 때문에 Ubuntu로 넘어갔습니다.다른 공부하는 분들도 ARP Spoofing처럼 Pcap을 이용해서 개발하실 때는 Ubuntu에서 하시는걸 추천드립니다! 우선 ARP Spoofing에 대해서 간단히 설명하자면 *정상적인 패킷흐름* ARP SPOOFING *비정상적인 패킷흐름*VICTIM GATEWAY -----------------> VICTIM ATTACKER GATEWAY위 처럼 중간에 ATTACKER를 지나서 패킷이 흐르게 됩니다. 이렇게 되면 공격자 입장에서는 VICTIM의 패킷을 전부 훔쳐볼 수 있게되는거죠. 어떻게 이런 공격이 가능할까요? ARP Protocol이 동적인 부분을 이..
-
MS, 오픈소스 코드 검사도구 '소나' 공개Issue 2017. 10. 28. 00:18
MS사에서 오픈소스 코드 검사도구인 '소나'를 공개했다. URL을 입력하면, 해당 웹페이지의 취약점과 그 이유를 알려준다.개발자의 경우에는 보안용으로 사용할 수도 있겠지만, 공격자 입장에서는 공격도구로 사용할 수 있을 것 같다. 또, 비쥬얼 스튜디오에도 추가한다고 하니 소나의 기능들을 따로 빼와서해당 프로그램을 개발하는데 도움이 될 것으로 보인다. 아래는 해당 기사 전문이다. 마이크로소프트(MS)가 코드 검사도구 '소나'를 오픈소스 기술로 공개했다. 소나는 린트 도구로, 소스코드를 스캔하고 잠재적인 오류를 찾아내며 보안, 성능, 접근성 등을 검사해준다. 안토니 몰레다 MS 웹 플랫폼 프로그램 매니저는 공식 블로그를 통해 "웹은 복잡하나 소나로 훨씬 쉽게 코드를 짤 수 있을 것"이라며 "단순히 오류를 알려..