바이트 오더링(Byte Ordering)

- 바이트 오더링 : 데이터의 저장하는 방식을 말함.

CPU 벤더사에 따라 바이트 단위로 데이터를 받아들이고 메모리에 적재하는 방식이 다르다고 함.

방식에는 대표적으로 2가지가 있는데 '빅 엔디언' 방식과 '리틀 엔디언' 방식임


빅 엔디언 : 네트워크 프로토콜에 사용

리틀 엔디언 : 인텔 x86 CPU 사용(window계열 리버서들이 리틀 엔디언에 대해서 알아야하는 이유)


핵심 : 리틀 엔디언은 역순으로 적재함

[엔디언 위키 바로가기]


리틀 엔디언 확인


다음의 코드를 통해서 리틀 엔디언의 개념을 알아보자!



LittleEndian.exe


LittleEndian.exe를 x32dbg를 통해서 open 해서 디버깅을 시작할 예정이다.


어제 해봤던 것처럼 F9를 눌르면 EntryPoint에서 부터 디버깅을 시작하면 된다.


시작!!



지난 시간 복습겸 main함수를 찾아보도록 한다 F8을 꾹 눌르면



401000을 호출하는 부분에서 MessageBox가 뜨게된다. 그렇다면 call함수 내부로 들어가보자 [Ctrl+F2]로 프로그램을 다시시작하고... 

[Ctrl+G]를통해 401000주소로 이동한다.

그랬더니


[짝짝짝! 여기가 main()의 내부이다. 소스코드의 byte, word, dword 가 보인다]


Goto를 이용해 byte의 주소인 413780의 헥사 덤프로 진입해보자.



[변수 b,w,dw의 값들이 '리틀 엔디언' 방식으로 저장되어 있는거 보인다 보여!]



CPU 범용 레지스터(EAX,EBX,ECX,EDX,EBP,ESI,EDI,ESP)

- 이 부분은 각각 레지스터의 용도와 쓰임새 부분을 짚고 넘어가야 될 것 같아서 정리해서 남겨두었다!


[CPU 범용 레지스터 정리]


이 후에 다른 레지스터들에 대해서도 간략히 알아보자!


세그먼트 레지스터

- 'Segment'는 메모리의 영역에 주소,범위 혹은 접근 권한 등을 부여해서 메모리를 보호하는 기법이다. 


세그먼트는 페이징 기법과 함께 가상 메모리를 실제 물리 메모리로 변경할때 사용되는데 이 세그먼트 메모리는 SDT라는 곳에 기술 되어있고, 


SDT의 index를 가지고 있는것이 '세그먼트 레지스터' 라고 할 수 있겠따 (어렵당;)


2바이트(16bit) 크기의 6개의 레지스터로 구분되어 있다.(CS, SS, DS, ES, FS, GS)


CS 코드 세그먼트, SS 스택 세그먼트, DS 데이터 세그먼트 이정도만 숙지하고 넘어가자!


플래그 레지스터

- 플래그 레지스터의 이름은 EFLAGS이며 32비트의 크기입니다.


여기에서는 깊게 이해하지말고 3가지 플래그만 알아두고 넘어가도록 합시다



[ZF : Zero Flag, OF : Overflow Flag, CF : Carry Flag 각각의 플래그들은 참일때 1로 셋팅 됩니다!]





'Reversing' 카테고리의 다른 글

PE File(1)  (0) 2019.04.02
리버싱 5  (0) 2019.04.02
리버싱 4  (0) 2019.03.29
리버싱 3 Stackframe  (0) 2019.03.28
리버싱 1  (1) 2019.03.26

CPU 범용 레지스터 (EAX,EBX,ECX,EDX,EBP,ESI,EDI,ESP)

- CPU 범용 레지스터란 범용적으로 사용되는(?) 레지스터 입니다. 모든 레지스터들은 각각 4byte(32bit)의 크기를 가진다고 하네요!


8개의 레지스터에서 상위 4개의 레지스터는 산술연산의 변수 값의 저장용도로, 하위 4개는 메모리 주소를 저장하는 포인터로 자주 사용된다고 합니다.

하지만 상황에따라서 레지스터의 용도가 다르게(?) 쓰일 수도 있습니다.


(* 앞의 E는 32bit 에서, 64bit는 R을 씀, RAX, RBX 이런식으로...)


* 요약ㅎㅎ

1) EAX : 산술 및 논리연산을 수행한 후에 함수의 반환값이 저장되는 용도 (쉽게 말해 함수의 리턴 값)

2) EBX : 메모리 주소를 저장하기 위한 용도

3) ECX : 반복문(for,while)에서 반복 카운트(loop count)로 사용 (루프 돌때마다 ECX 1씩감소)

4) EDX : EAX와 같이 쓰이고, 부호 확장 명령에 사용

5) ESI : 데이터를 조작 or 복사할 때 데이터의 주소가 저장됨

6) EDI : 데이터를 복사할 때 목적지 주소가 저장

7) ESP/EBP : ESP는 Stack의 끝 주소, EBP는 Stack의 첫 시작 주소를 의미함


그리고 각각의 레지스터는 32bit인데 16bit의 하위 호환을 위해 X로 나눠지고 X는 다시 H/L 구역으로 나눠짐 즉 EAX를 예로들면 32bit를 다 쓰고 싶으면 EAX를 사용하고 2바이트(16bit)만 쓰고 싶으면 EAX의 하위 비트 부분인 AX를 이용하면 되는 것, 1바이트만 쓰고싶으면 AH쓰면 되겠쥬? (알뜰하죠 ?ㅋ)



레지스터의 용도 정도만 간단하게 알고 넘어가야지~



'보안' 카테고리의 다른 글

Tomcat,JCE 취약점 ppt  (0) 2019.03.29
[보안] Tomcat 취약점  (0) 2019.03.26
[보안] 티스토리 블로그 취약점 문의  (0) 2019.03.25
[보안] 리버싱 입문기  (0) 2019.03.25
이번 주 해야할 것  (0) 2019.03.25

Tomcat의 취약점에 대해서 조사해봅시다


Tomcat 취약점

Tomcat은 대부분의 사람이 아는것처럼 웹서버를 돌릴 때 사용된다.

아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너만 있는 웹 애플리케이션 서버라고 한다.

[ 고양이 디자인 무엇;;;]



일단 대표적인 Tomcat 취약점에 대해서 설명해보겠다.


먼저 tomcat에는 서블릿 클래스를 등록하는 web.xml이 존재한다. 해당 문서에는 다음과 같이 PUT과 DELETE 메소드에 대해서의 거절유무를 설정하는


'readonly' 속성이 존재한다. 해당부분이 'false'로 되어있다면 취약점이 발생한다. (거절하시겠습니까 ? 아니요 = put,delete메소드 찬성!)



default는 true인데 개발자가 false로 변경하고 건들지 않았을수도 있음.


아무튼 간에 이후에 공격자는 위조된 요청을 보내서 PUT방식으로 업로드가 가능해짐


여기서 jsp파일을 업로드를 했을 때 확장자 필터링이 없을 시에는 당연히 PUT 요청이가서 취약점이 발생할 것.


하지만 대부분 확장자 필터링을 거치게되는데 어떠한 필터링 검증로직이냐에 따라서 다양한 우회 기법이 있을 수 있음.


기본적으로 공백이나 '\'같은 문자들은 치환되어 있는데 여기서 jsp파일 확장자 필터링을 우회하는 취약점이


CVE-2017-12615 이다.


이렇게 취약점이 세분화가 되는거 같은 느낌적인 느낌

12615 같은 경우에는 NTFS file stream개념을 이용하여 업로드하는 취약점이다 (띠용;;)

NTFS 볼륨 파일의 구조
-> <파일이름> : <스트림 이름> : <스트림 유형>
ex) "test.jsp"는 "test.jsp :: $DATA
이런식으로 서버에 원격 코드를 실행할 수 있는 RCE 취약점이 존재했었다.

CVE-2017-12616은 가상 디렉토리를 이용해 CVE-2017-12615와 같이 이용하는 취약점 공격이다
tomcat의 context.xml에 다음과 같이 추가한다.

<Resources className="org.apache.naming.resouces.VirtualDirContext" extraResourcePaths="/temp=C:\tomcat\webapps\ROOT" />

이렇게 추가하면 <URL>/temp로 접속하게되면 index.jsp에 접속한 것과 똑같은 효과를 가지게 된다.
여기에 12615를 이용하여 다음과 같이 이용한다.

ex) <URL>/temp/index.jsp::$DATA

이렇게된다면 소스코드 열람이 가능해지게 되는것이다. [출처]

CVE-12617은 12515와 같이 readonly=false환경에서 jsp확장자 검증의 취약한 로직을 이용한다.
확장자 검사를 우회할 수 있는 패턴인 '/'를 붙여 요청하면 정상적으로 파일이 업로드 되는 취약점이다.

=> PUT 방식 요청에 정상적인 업로드 파일을 변조하면 가능


'보안' 카테고리의 다른 글

Tomcat,JCE 취약점 ppt  (0) 2019.03.29
[보안] CPU 범용 레지스터  (0) 2019.03.27
[보안] 티스토리 블로그 취약점 문의  (0) 2019.03.25
[보안] 리버싱 입문기  (0) 2019.03.25
이번 주 해야할 것  (0) 2019.03.25

+ Recent posts