HELLO_HELL?

블로그 이미지

준P

'System'에 해당되는 글 12건

제목 날짜
  • [FTZ] hackerschool level10 2016.01.03
  • [FTZ] hackerschool level9 2016.01.03
  • [FTZ] hackerschool level8 2016.01.03
  • [FTZ] hackerschool level6 2016.01.02
  • [FTZ] hackerschool level5 2016.01.02
  • [FTZ] hackerschool level4 2016.01.02
  • [FTZ] hackerschool level3 2016.01.02
  • [FTZ] hackerschool level2 2016.01.02
  • [FTZ] hackerschool level1 2015.12.24
  • buffer over flow 이론 2015.01.06
  • bof) 스텍 기반의 버퍼오버 플로우 -default 2014.09.12
  • 간단한 hello_world 쉘 코드 만들기 shell code 2014.09.03

[FTZ] hackerschool level10

System/FTZ 2016. 1. 3. 20:13



접속을 해보니 두명의 사용자가 공우 메모리를 통해 은밀한  대화를 한다네여


키 값만 알려주는데 공유메모리는 무한정 할당 되는것이 아니기 떄문에 얼마나 할당 되었는지 알아야  합니다.


ipcs -m 명령어로 얼마나 할당 되었는지 알수 있습니다.



1028 바이트나 할당 되었네여


자 이제 프로그램을 하나 작성해서 공유 메모리의 대화 내용을 봅시다.

참고로 level10의 홈 디렉토리는 쓰기 권한이 없으므로 tmp 폴더로 가서 제작을 하셔야 합니다.



저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level9  (0) 2016.01.03
[FTZ] hackerschool level8  (0) 2016.01.03
[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
Posted by 준P

[FTZ] hackerschool level9

System/FTZ 2016. 1. 3. 18:06



접속 해보니 처음으로 bof 문제가 나왔다.


배열의 크기가 10 인데 최대로 입력받을수 있는 크기는 40이다.


배열의 특징은 배열 크기 뒤의 배열 끝을 알리는 null 배열이 있다. 또한 이 뒤에 배열을 시작 하기 전으로 돌아가기 위해 몇가지 주소가 담겨져 있다 이크기는 배열 4 칸만 큼 지니고 있어서 


총 기본 배열 10 + null 배열 1 + 기타 배열 4 = 15 


그리고 buf2에 go가 들어가야 하므로 



저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level10  (0) 2016.01.03
[FTZ] hackerschool level8  (0) 2016.01.03
[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
Posted by 준P

[FTZ] hackerschool level8

System/FTZ 2016. 1. 3. 16:42



접속을 해보니 힌트에 용량이 2700인 shadow파일을 찾으란다......(그만 찾자!!!)


참고로 shadow파일은 /etc/passwd 파일의 계정 비번이 들어 있는 파일이다. (서로 연관성 있는 파일이다.)



찾아보니 총 4개의 파일이 나왔는데 하나는 이미지 2개는 앞축 파일이다. 그래서 나머지 텍스트 파일을 열어보니


level9의 키가 들어 있다.


shadow 파일의 2번째필드에는 비밀번호가 암호화되어서 들어 있다.


john the ripper로 풀수 있다고 한다.


http://www.openwall.com/john/


크랙커를 다운받고 src 폴더에서 ./configure 한뒤 make -s 하면 run 폴더에 john파일이 생성 되면서 크래커를 실행할수 있다.


found.txt 파일의 내용 한줄을 복사한뒤 일반 파일로 저장한뒤


./join <저장한 파일>하면 자동으로 풀린다.




저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level10  (0) 2016.01.03
[FTZ] hackerschool level9  (0) 2016.01.03
[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
Posted by 준P

[FTZ] hackerschool level6

System/FTZ 2016. 1. 2. 23:13

이번 문제는 새로 ssh로 level6로 로그인 해서 푸는 문제이다.




옛날 인터넷 에서 많이 쓰던 해킹 기법이라는데 여기서 그냥 아무렇게나 엔터를 치면 



접속 메뉴가 나오는데 여기서는 어떠한 해킹은 불가능 하다. 



하지만 이때 ctrl + c를 해주면 쉘로 넘어가진다.



저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level9  (0) 2016.01.03
[FTZ] hackerschool level8  (0) 2016.01.03
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
[FTZ] hackerschool level3  (0) 2016.01.02
Posted by 준P

[FTZ] hackerschool level5

System/FTZ 2016. 1. 2. 22:30



접속해보면 level5 란프로그램은 /tmp 폴더에 level5.tmp라는 파일을 생성한다고 한다.


그래서 level5 프로그램을 실행하고 파일을 열어봐야한다.

그냥 비번을 알려준다.


저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level8  (0) 2016.01.03
[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
[FTZ] hackerschool level3  (0) 2016.01.02
[FTZ] hackerschool level2  (0) 2016.01.02
Posted by 준P

[FTZ] hackerschool level4

System/FTZ 2016. 1. 2. 22:24



FTZ에 접속을 해보니 힌트에 누가 백도어를 심어 놓았다는 것이다!!(이런 나쁜놈!!)


/etc/xinetd.d폴더에 가보니


아주 대놓고 백도어라고 써있다.


열어보니


finger서비스이다.


처음에 finger서비스를 찾아보았지만


finger 자체 취약점이 아니라 서비스가 실행되면서 /home/level4/tmp/ 경로에서 backdoor라는 프로그램을 실행시키는 것이다.


따라서 /home/level4/tmp 폴더에 가보니 

아무 파일도 없다..


따라서 새로 파일을 만들어서 finger를 실행 했을때 같이 실행되도록 해야한다.


backdoor.c


#include <stdio.h>

#include <stdlib.h>

int main(){

system("my-pass");

}





저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level3  (0) 2016.01.02
[FTZ] hackerschool level2  (0) 2016.01.02
[FTZ] hackerschool level1  (0) 2015.12.24
Posted by 준P

[FTZ] hackerschool level3

System/FTZ 2016. 1. 2. 21:10


접속을 해보면 hint에 소스코드가 있다.


간단하게 dig명령어를 실행시켜주는 프로그램 인데 보기만 해도 취약해 보인다.


추가적인 힌트로 동시에 여려명령어를 실행하면 어떻게 될까? 


리눅스에서는 세미콜론(;)으로 동시에 여러 명령어를 실행할수 있다.


또한 작은 따음표(')로 묶어서 하나의 인자로 보넬수도 있다.


이러한 특성을 이용해서


autodig ' ;/bin/bash;'


명령어로 level4의 쉘을 얻을 수 있다.



level4이다.!!!

저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
[FTZ] hackerschool level2  (0) 2016.01.02
[FTZ] hackerschool level1  (0) 2015.12.24
Posted by 준P

[FTZ] hackerschool level2

System/FTZ 2016. 1. 2. 21:01



ftz에 로그인 해보니 힌드에 파일 편집중에 쉘 명령어를 실행 할수 있다고 한다.


vi 편집기에서 명령 모드에서는 ! <명령어>를 통해 쉘 명령어를 실행이 가능하다.


그러나 level3로 올라가기위해서는 level3의 권한을 가지고 있는 에디터 여야 한다.


따라서 level3의 유저 레벨의 권한을 가지고 있는 에디터를 찾아야 한다.



editor를 실행하면 



:! /bin/bash 명령어로 쉘을 실행 시키자!!


level3이다.



저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
[FTZ] hackerschool level3  (0) 2016.01.02
[FTZ] hackerschool level1  (0) 2015.12.24
Posted by 준P

[FTZ] hackerschool level1

System/FTZ 2015. 12. 24. 22:13

hackerschool의 FTZ level1 문제이다.


FTZ에 접속을 해보니 두개의 디렉토리와 힌트 파일 하나 있다.



level2 권한의 setuid가 걸린 파일을 찾아서 해킹하라는것 같은데


나머지 디렉토리를 뒤져봐도 실행 파일을 찾을수  없다.


그렇다면 검색을 해봐야 하는데 리눅스에서는 find 명령어로 파일이나 디렉토리를 검색 할수 있다.


그런데 uid는 사용자 식별번호이다. setuid는 사용자의 권한을 사용하는것 인데 파일이나 디렉토리에는 특정 사용자만 사용가능하도록 설정이 가능하다.


보통 rwx로 알고 있는데 (또는 777) 여기서 특수 권한 으로 관리를 할 수 있다.


setuid 는 권한을 빌릴 수 있는 특수 권한이다.


4000번 이상으로 설정이 된다.


find명령어로 level2권한의 4000번 이상의 파일을 찾으면 된다.



주의 할점은 일반 유저 권한으로 찾기 때문에 퍼미션 오류가 뜨는 파일을 찾을수 있고 여러 파일을 찾을수 있다.


따라서 퍼미션 오류와 같은 에러 메세지는 출력 하지 않도록 출력 리다이렉션을 시킨다.


2> 는 오류메세지를 파일로 저장할수 있다.


/dev/null 은 휴지통이나 블랙홀 처럼 모든 파일을 없애 버린다. 즉 사라진다.


/dev/null에 저장한다는 것은 오류 메세지를 버린다는것과 같다.



실행 시켜 보니 단한가지의 명령어를 실행가능하다고 한다.


/bin/bash와 같은 쉘을 실행 시키면 그 유저의 쉘을 실행 시킬수 있다.


쉘의 uid가 level2로 변경됬다.


저작자표시 비영리 변경금지 (새창열림)

'System > FTZ' 카테고리의 다른 글

[FTZ] hackerschool level6  (0) 2016.01.02
[FTZ] hackerschool level5  (0) 2016.01.02
[FTZ] hackerschool level4  (0) 2016.01.02
[FTZ] hackerschool level3  (0) 2016.01.02
[FTZ] hackerschool level2  (0) 2016.01.02
Posted by 준P

buffer over flow 이론

System/Buffer Over Flow 2015. 1. 6. 15:36

버퍼오버 플로우는 버퍼가 넘쳐서 다른 값을 건들이는 공격 입니다.


버퍼오버 플로우는 ret값을 건들여 공격쉘을 실행 하는 것입니다.


버퍼는 데이터를 전송하고나 보관하는 메모리 임니다.


버퍼는 메모리의 힙이나 스텍에 존제 합니다.


스텍과 힙의 특징은 


스텍은 높은 주소부터 시작하고 힙은 낮은 주소부터 시작합니다.

간단한 취약점이 있는 프로그램을 만들었습니다.



그냥 인자 값을 출력하는 프로그램 입니다.


a를 6번입력하면 6번 나옴니다.


이 프로그램의 취약점은 strcpy로 복사를 할떄 버퍼의 크기만큼 제한하지 않는다는점 입니다.


제한하지 않으면 버퍼의 크키를 넘어버리는 문자열을 넣게 되면 오류가 발생한다는 것입니다.


스텍 구조를 보겟습니다.





프로그램에 인자 값을 넘겨 줄떄  인자 값이프로그램 앞에 오게 되므로 ret주소 위에 있습니다.


허나 ret주소는 프로그램이 시작하기 전 주소로 돌아감니다.(프로그램이 종료 되면 스텍이나 힙을 정리해줌)


또한 리틀에디안을 사용하기 때문에 buffer가 넘치면 ebp와 ret을 건들이기 됨니다.


인자 값을 가져올때는 최초 ebp에서 12를 뺸주소에서 가져오게 됨니다.


8을 뺴면 인자의 수를 알수 있습니다. 


인자의 수 에 따라 4를 더해 거나 뺴서 인자값을 가져올수 있습니다.



저작자표시 비영리 변경금지 (새창열림)

'System > Buffer Over Flow' 카테고리의 다른 글

bof) 스텍 기반의 버퍼오버 플로우 -default  (0) 2014.09.12
간단한 hello_world 쉘 코드 만들기 shell code  (0) 2014.09.03
Posted by 준P

bof) 스텍 기반의 버퍼오버 플로우 -default

System/Buffer Over Flow 2014. 9. 12. 22:22

버퍼오버 플로우에는 크개 두가지가 있습니다.


스텍 기반의 오버플로우 힙 기반의 오버플로우가 있습니다.


이중에서 스텍기반의 오버플로우를 해보겟습니다.


스텍 구조는 다음과 같습니다.



버퍼오버플로우의 최종 목표는 ret 즉 리턴주소를 변경하는 것입니다.


32비트 에서는 스택주소의 크기가 4바이트 이고 64비트에서는 8바이트 입니다.


자신의 컴퓨터의 비트에따라 스택 주소의 크기가 달라지니 주의 

 

오버플로우 기술은 매우 오래되었지만 현재까지 쓰이고 있는 기술이며 근본적으로는 막을수가 없습니다.


(컴퓨터 os 구조상 불가능하져)


버퍼오버플로우를 어렵게 하는 기술이 있습니다.


윈도우에는 ssecurity cookie나 리눅스에는 alsr이라든지 여러가지 방어 기술이 있습니다.


저는 이방어기술을 스킵하기위해 최적화 옵션을 제거하고 해보도록 하겟습니다.



저는 버퍼오버플로우 취약점이 있는 간단한 프로그램을 만들었습니다.


쉘에서 입력받는 문자열을 그대로 출력하는 프로그램입니다.


이프로그램이 취약점이 있는 이유는 간단합니다. b라는 포인터의 데이터를 100개의 방밖에 없는 buffer에 집어넣기때문에 전부다 집어넣지 못하기 떄문에 일어 남니다.



컴파일을 하고 쉘을 통해 입력을 하면 위 사진과 같이 뜸니다.


-static 옵션은 최적화 옵션을 해제하는 옵션입니다.



lea 오퍼랜드 함수는 주소를 나타내는 함수입니다.


rax에 rbp에서 0x70만큼떨어저있는 b포인터함수의 주소를 넣어서 rax에 입력한값을 넣는것이져


0x70은 10진수로 표현하면 112입니다.


컴퓨터에서 버퍼오버플로우를 방지하기위해 빈공간이 조금 있습니다.



info func 명령어는 gdb에서 프로그램에서 사용된 함수를 나타내주는 명령어 입니다.


해더파일에는 많은 함수가 내장되어있으므로 많은 함수가 보임니다.


우리가 만든 hack 함수가 바로 보이네요


주소는 0x0000000000400e30 입니다.


컴퓨터에서는 리틀에디안 방식을 사용합니다.


따라서 주소를 반대로 압력해주셔야 합니다.


위에서 버퍼의크기는 112라고 했습니다. 그런데 sfp가 있으므로 8바이트를 더 추가해 주셔야합니다.


총 120 바이트 입니다.


이제 버퍼오버플로우 공격을 해보면 


짜짠하고 성공합니다.



저작자표시 비영리 변경금지 (새창열림)

'System > Buffer Over Flow' 카테고리의 다른 글

buffer over flow 이론  (0) 2015.01.06
간단한 hello_world 쉘 코드 만들기 shell code  (0) 2014.09.03
Posted by 준P

간단한 hello_world 쉘 코드 만들기 shell code

System/Buffer Over Flow 2014. 9. 3. 17:14

hello_world프로그램은 c언어로 만들면


#include <stdio.h>

void main(void){

write(1,"hello_world",11);

}


이렇게 만들어짐니다.


하지만 어셈블리에서는 


rax에 시스템 콜 넘버를 넣어야하고 


나머지(rbx, rcx, rdx)에 함수 인자값을 넣어야합니다.


그리고 실행을 해야합니다.


실행 오퍼랜드는 int 0x80입니다.


그리고 이실행 뒤에 종료 를 해야합니다.


종료를 하지 않으면 세그먼트 오류가 떠버리기떄문 입니다.


자 이제 쉥코드를 만들어 보져


쉘코드를 만들기전에 nasm이 설치 되어 있어야 합니다.


nasm 설치는 


우분투


apt-get install nasm


데비안 


yum -y install nasm


일단 vim으로 파일을 만들어 주세요 저는 hell.s라고 만들었습니다.


참고로 확장자는 s나 asm으로 해주셔야 합니다.


그리고 나서 이렇게 입력해 줌니다.


아 참고로 저는 fedora 20에서 만들었습니다. 64비트 버전이라서 rax를 사용합니다.


32비트 이신 분들은 r 를 e로 바꾸어 주시기 바람니다.


rax라면 eax로 바꾸어 주세여 



global _start

_start

jmp go                ;go로 점프합니다.

func:

xor rax,rax          ;rax를 null로 만듬니다.

push 0x04           ;0x04값을 수텍에 넣습니다.

pop rax                ;rax 에 0x04값을 넣습니다.

xor rbx, rbx         ;rbx를 null 값으로 만듬니다.

push 0x01           ;스텍에 0x01값을 넣습니다. 

pop rbx                ;rbx에 0x01값을 넣습니다.

xor rcx, rcx           ;rcx를 null값으로 만듬니다.

pop rcx                 ;rcx에 hello_world를 넣습니다.

xor rdx, rdx          ;rdx를 null값으로 만듬니다.

push 0x0b            ;스텍에 0x0b값을 넣습니다.

pop rdx                 ;rdx에 0x0b값을 넣습니다.

int 0x80                ;실행 시킴니다.

xor rax, rax          ;rax를 null값으로 만듬니다.

push 0x01            ;스텍에 0x01값을 넣습니다.

pop rax                 ;rax에 0x01값을 넣습니다.

xor rbx, rbx          ;rbx값을 null로 만듬니다.

int 0x80               ;실행시킴니다.

go:

call func                ;func를 불러옴니다.

db 'hello_world' ;스텍에 'hello_world' 값을 넣습니다.


그런데 start에서 바로 call를 하면 안될까여??


되긴되여 하지만 null값이 생겨서 안됨니다.


쉘코드에는 null값이 있으면 안되거든요


참고로 쉘코드는 이런 간단한것 이외에도 다양하게 쓰입니다.


null값은 문자열 끝을 의미 합니다.


따라서 프로그램이 동작중에 종료 되어버릴수 있다는 것이져


그리고 이 어셈블리어의 흐름을 설면해 드리자면 start에서 점프로 go 로 간다음 call로 func를 불어온뒤에 hello_world 문자열을 스텍에 집어 넣습니다. 그리고 나서 func에 있는 코드를 실행 합니다.


이제 모두 입력 하셧으면 이제 컴파일을 해야져


32비트의 경우


nasm -f elf hell.s


64비트의 경우 


nasm -f elf64 hell.s


이렇게 해주시면 오브젝트 파일이 만들어 짐니다.


마지막 확장자가 o로 변경되어서 새로 만들어짐니다.


ld hell.o


이 명령어로 실행가능 한파일로 만들어줌니다.


./a.out


으로 실행시켜 줌니다.


실행시키시면 hello world를 보실수 있습니다.



저는 문자열끝에 개행 문자를 넣지않아서 이렇게 되었네여


이제 objdump로 보시면 됨니다.


objdump -d a.out


명령어로 보시면 됨니다.



네 이렇게 null값이 없습니다.


이제 저코르에 \x를 붙여서 사용하시면 됨니다.


\xeb\x23\x48\x31\xc0\x6a\x04\x58\x48\x31\xdb\x6a\x01\x5b\x48\x31\xc9\x59\x48\x31\xd2\x6a\x0b\x5a\xcd\x80\x48\x31\xc0\x6a\x01\x58\x48\x31\xdb\xcd\x80\xe8\xd8\xff\xff\xff\x68\x65\x6c\x6c\x6f\x5f\x77\x6f\x72\x6c\x64


이 쉘코드를 사용하실려면 




이렇게 만드신후에 컴파일 하시면 됨니다.


감사합니다.


저작자표시 비영리 변경금지 (새창열림)

'System > Buffer Over Flow' 카테고리의 다른 글

buffer over flow 이론  (0) 2015.01.06
bof) 스텍 기반의 버퍼오버 플로우 -default  (0) 2014.09.12
Posted by 준P
이전페이지 다음페이지
블로그 이미지

by 준P

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

글 보관함

«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

링크

카테고리

HELLO? (157)
스터디 (6)
Windows 구조와 원리 OS를 관통하는 프로그.. (6)
Development (44)
Android (5)
Assembly (4)
C/C++ (11)
C# (0)
HTML (1)
JAVA (2)
JSP (3)
JS Script (2)
Linux Shell Script (2)
Open GL (1)
PHP (0)
Python (1)
QT library (3)
SQL (1)
Swift (1)
MongoDB (0)
Express JS (1)
Angular JS (1)
Node JS (1)
SpongePoweredForgePluginDev.. (2)
Unity3d (1)
Docker (0)
Linux (22)
Linux Kernel Study (1)
Network (9)
WireShark (1)
Network Theory (6)
Hack the packet 2013 (2)
Reversing (50)
Windows PE (10)
Windows Reversing (1)
Linux PE (0)
Linux Reversing (0)
Android Reversing (2)
Reversing Tools (8)
CodeEngn (25)
Reversing.kr (2)
abex's (2)
Sites (3)
System (12)
FTZ (9)
Buffer Over Flow (3)
GDGkr (1)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
준P's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

HELLO_HELL?

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • HELLO? (157)
    • 스터디 (6)
      • Windows 구조와 원리 OS를 관통하는 프로그.. (6)
    • Development (44)
      • Android (5)
      • Assembly (4)
      • C/C++ (11)
      • C# (0)
      • HTML (1)
      • JAVA (2)
      • JSP (3)
      • JS Script (2)
      • Linux Shell Script (2)
      • Open GL (1)
      • PHP (0)
      • Python (1)
      • QT library (3)
      • SQL (1)
      • Swift (1)
      • MongoDB (0)
      • Express JS (1)
      • Angular JS (1)
      • Node JS (1)
      • SpongePoweredForgePluginDev.. (2)
      • Unity3d (1)
    • Docker (0)
    • Linux (22)
    • Linux Kernel Study (1)
    • Network (9)
      • WireShark (1)
      • Network Theory (6)
      • Hack the packet 2013 (2)
    • Reversing (50)
      • Windows PE (10)
      • Windows Reversing (1)
      • Linux PE (0)
      • Linux Reversing (0)
      • Android Reversing (2)
      • Reversing Tools (8)
      • CodeEngn (25)
      • Reversing.kr (2)
      • abex's (2)
    • Sites (3)
    • System (12)
      • FTZ (9)
      • Buffer Over Flow (3)
    • GDGkr (1)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바