반응형

분류 전체보기 225

Layouts 조사

1. LinearLayout - LinearLayout은 단 방향으로 모든 하위 요소를 정렬하는 뷰 그룹이다. - 두 가지 방향이 있다. 1. horizontal(수평) 2. vertical(수직) - LinearLayout의 모든 하위 요소는 순차적으로 스택 되므로, 세로 목록의 경우 너비에 상관없이 한 행당 하나의 하위 요소만 있게되며, 가로 목록의 경우 높이가 한 행 높이다. 주요 속성 android:orientation : 레이아웃 방향을 지정할 수 있다. android:gravity : 객체가 자신의 경계 내에서 X, Y축 모두에 내용을 배치하는 방법을 지정 2. FrameLayout - FrameLayout은 단일 항목을 표시하도록 설계되었다. - 일반적으로 단일 하위 뷰를 유지하는 데 사용해..

Palette 조사

안드로이드의 화면을 만들기 위한 도구들이다. 1. Text - TextView : 화면에 입력한 문자열을 보여준다. - EditText : 입력 기능이 가능한 텍스트이다. 여러가지 타입이 존제한다. 1) password 2) E-mail 3) Phone 4) Postal Address 5) Multiline Text 6) Time 7) Date 8) Number - AutoCompleteTextView : 사용자 입력을 자동으로 완성해주는 텍스트뷰이다. ex) "o"를 입력하면 "o"로 시작하는 리스트형태로 보여준다. - MultiAutoCompleteTextView : 자동완성텍스트 뷰와 비슷하다. 그러나 자동완성텍스트는 한번만 실행되지만 이것은 계속 사용이 가능하다. 대신 ',' 이후 자동완성 리스트..

12단계 golem -> darkknight

이번 문제는 FPO라고 적혀있다. 이것은 Frame Pointer Overwriting이다. 소스코드를 보면 덮을 수 있는 게 고작 1byte이다. 그러면 쉘 코드를 넣고 마지막 1byte를 쉘코드 -8 위치인 곳의 주소 값으로 바꿔 EBP ESP를 조작해서 실행되게 해 보자. 0xbffffab4 주소 값으로 조작하면 딱 쉘 코드로 점프한다. 메모리 주소를 보고 구한 값으로 exploit을 시도해보았다. 그런데 아무것도 안 뜨고 입력해도 반응이 없다. 실패한 것이다. 그래서 메모리 값이 어떻게 변하는지 일부러 다른 값으로 또 실패시켜 덤프 파일을 얻어 분석해보자. 덤프 뜬 것으로 확인해보니 주소 값이 바뀌었다. 이제 0xbffffabc로 하면 성공할 것이다. 성공!

11단계 skeleton -> golem

이번 문제는 스택 구간을 전무 못쓰게 하고 있다 버퍼, argv, 환경변수, 절대경로, 그냥 싹 다 0으로 초기화시켜버린다. ㅎㅎㅎ LD_PRELOAD를 사용해야 한다. LD_PRELOAD란? = 공유 라이브러리의 경로를 지정해준다. - 유닉스/리눅스 계열에서 사용되는 환경변수이다. - 프로세스가 실행될 때, 이 환경변수에 지정된 공유라이브러리가 먼저 로드된다. - 따라서 다른 라이브러리의 함수와 LD_PRELOAD에 지정된 라이브러리의 함수가 서로 이름이 똑같을 경우 후자가 실행되게 된다. (라이브러리 적재 순서 때문) 일단 소스코드를 공유라이브러리로 컴파일하되 명을 쉘 코드로 짓자. [그림 1-2] 처럼 공유 라이브러리로 컴파일하고 LD_PRELOAD 환경변수에 쉘 코드를 올려버린다. 쉘 코드가 올라..

공유 메모리(Shared Memory)

공유 메모리는 프로세스 간에 서로 공유하는 메모리 공간이다. 프로세스는 시작 시 혹은 실행 중에 이러한 데이터를 저장하고 사용하기 위한 메모리 공간을 커널에 요구하여서 할당받아 사용하게 되는데, 이러한 메모리 공간은 기본적으로 메모리를 요청한 프로세스만이 접근 가능하도록 되어있다. 하지만 가끔은 여러 개의 프로세스가 특정 메모리 공간을 동시에 접근해야 할 필요성을 가질 때가 있다. 이러한 작업을 위한 효율적인 방법을 공유 메모리가 제공한다. 공유 메모리는 여러 IPC 중에서 가장 빠른 수행 속도를 보여준다. 이유는 하나의 메모리를 공유해서 접근하게 되므로, 데이터 복사와 같은 불필요한 오버헤드가 발생하지 않기 때문에, 빠른 데이터의 이용이 가능하다. 그러나 하나의 프로세스가 메모리에 접근 중에 있을 때,..

시스템/리눅스 2019.09.19

문자열 테이블

윈도우즈에서는 문자열들도 리소스의 일종으로 취급된다. 대량의 문자열을 사용하는 프로그램은 리소스에 문자열을 정의해 놓고 필요할 때마다 리소스의 문자열을 읽어와 사용한다. TCHAR *str = TEXT("String Test"); switch(iMessage) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 10, 10, str, lstrlen(str)); } 문자 배열 또는 문자형 포인터에 바로 문자열을 초기화하여 이 문자열을 화면으로 출력하면 그만이다. 물론 단순한 문자열 출력이 목적이라면 이런 방법이 더 편하겠지만 문자열 리소스는 여러 가지면에서 이점을 준다. 첫째로 문자열 자체가 코드와 분리됨으로써 문자열만 따로 관리할 수 있으며 프로젝트를..

시스템/윈도우 2019.09.12

10단계 vampire -> skeleton

환경변수, 버퍼, argv 모두 사용을 못한다. 그런데 리턴은 \xbf로 시작하는 주소를 넣어야 한다... 망막하다... [그림 1-2] 메모리 주소를 끝까지 확인하다 보면 맨 아래에 실행한 파일 절대 경로가 넣어져 있다. 주소도 \xbf로 시작해 딱인 것 같다. 심볼릭 링크를 이용해 쉘 코드를 절대 경로에 넣고 절대 경로 주소 값을 가져와 리턴 시키면 될 것 같다. 이렇게 확인해보면 쉘 코드가 잘 들어가 있는 것을 확인할 수 있다. 0xbfffff88을 사용하자. 이렇게 하면 exploit을 성공한 것을 볼 수 있다.

8단계 orge -> troll

우왕!! 이번 단계 소스코드에 argv[1]만 쓸 수 있게 돼 있고 argv[1]을 0으로 초기화해버린다. 환경변수, buffer, argv[2]도 사용할 수가 없다. 그렇다면 argv[0]에 쉘 코드를 넣고 exploit을 시행하 보자. 심볼릭 링크를 이용해 argv[0]에 쉘 코드를 넣어보자. 그러나 [그림 1-2] 심볼릭 링크가 실패가 되었다. 실패 내용은 No such file or directory이다. 쉘 코드를 보면 \x2f라는 부분이 있다 이것은 '/'이다 여기서 '/' 이것은 경로를 의미하기 때문에 오류가 날 수밖에 없다. 쉘 코드에서 /bin/sh 이런 식으로 쉘을 실행해야 하기 때문에 '/'의 문자가 필요하다. /bin/sh 부분을 인코딩해서 쉘 코드에 \x2f 문자가 안 나타나게 하..

7단계 darkelf -> orge

전 단계에서 소스코드가 좀 더 추가되었다. 이번에는 argv[0] 즉, 실행파일의 길이가 77이 아니면 에러를 출력하겠다는 코드다. 이제 argv[0]의 길이만 77로 변경해 exploit을 해주면 된다. 심볼릭 링크를 이용해 길이가 77인 파일을 만들자. 심볼릭 링크로 argv[0] 길이가 77인 파일을 만들어 실행했다. 그러나 [그림 1-2] argv[0] error가 발생했다. . 과 / 도 argv[0]의 길이에 포함시키는 것이었다. 그래서 다시 길이가 75인 파일을 만들어 테스트해봤다. [그림 1-3] 성공하는 것을 볼 수 있다. 실행할 때 파일의 길이를 . / 를 포함해 계산하는 것을 알 수 있다. 이제 argv[2]의 주소를 이용해 exploit을 할 수 있게 주소를 구해보자. 그러나 gdb..

반응형