전체 글(333)
-
[1] BufferOverflow Attack의 기초 ( 스택기반의 버퍼오버플로우 )
해당 게시글의 내용은 해커스쿨-도서관 에서 다운받은 파일을 기반으로 저의 공부를 위해 작성했습니다 " 해커 지망자들이 알아야 할 Buffer Overflow Attack의 기초 " By 달고나 님의 pdf의 사진과 글을 요약 정리했습니다 [1] 목적 Buffer Overflow 공격이 어떻게 이루어지는지를 설명하고 이러한 공격이 가능하게 되는 원리와 컴퓨터 시스템의 기본구조 설명 [2] 8086 Memory Architecture 8086 시스템의 기본적인 메모리 구조는 그림1 과 같다. 시스템은 " 커널 " 을 메모리에 적재시키고 " 가용메모리 "를 확보한다 운영체제는 하나의 프로세스를 실행시키면 그 프로세스를 Segment라는 단위로 묶어서 가용메모리 영역에 저장시킨다 구조는 그림2 ..
2017.06.01 -
방화벽설정과 SSH통신 [ iptables , ssh ]
iptables를 이용해서 각 서버의 SSH통신을 관리해보겠습니다 먼저 SSH통신을 위한 패키지를 다운받아야합니다#yum -y install openssh-client" #ssh 계정명@서버IP주소 " 명령어를 통해서 해당 서버로 접속할 수 있습니다 ( 계정명@ 생략하면 root계정으로 접속 ) 예제에 사용할 서버는 Server-A / Server-B / Server-CServer-A IP : 100.100.100.110Server-B IP : 100.100.100.120Server-C IP : 100.100.100.130 [ ex1 ] [ 명령어를 치는 서버 Server-A ]#iptables -A INPUT -p tcp --dport 22 -j ACCEPT해당 설정은 INPUT체인에 추가할것이고, t..
2017.05.31 -
Exploit-exercises Nebula level06 [ John the Ripper ]
Nebula level06번 문제입니다 flag06계정은 유닉스시스템의 자격증? 이라고한다 level06 / level06 계정으로 로그인하고 /home/flag06 디렉토리를 살펴보았지만 쓸만한 파일이 존재하지않았다 문제의 목적이 무엇일까.. flag06계정에 관한 힌트가 있는 것으로 보아 사용자계정과 관련된 문제같다 사용자 계정과 비밀번호에 관련된 파일 - /etc/passwd , /etc/shadow 이 두가지가 대표적이다 두 파일을 살펴보자. 참고로 /etc/shadow파일은 root계정으로만 볼 수 있다 level06@nebula:/home/flag06$ cat /etc/passwd 다른 계정들은 모두 비밀번호 위치에 "x" 문자가 있지만 flag06계정만..
2017.05.30 -
Exploit-exercises Nebula level05 [ SSH key , tar ]
Nebula level05 문제입니다 flag05의 홈디렉토리를 보면 취약한 디렉토리 허가권이 있다고합니다 바로 보이네요. 기타사용자도 읽고 실행시킬 수 있는 .backup/ 디렉토리가 보입니다. 해당 파일에 들어가보면 " backup-1907011.tgz " 압축파일이 보입니다. 해당 파일이 무엇인지 설명드리겠습니다. " 확장자 tgz " : tar.gz - 여러개의 파일들을 하나로 묶은 후에 " gzip " 으로 압축한 파일입니다 압축 or 압축해제 명령어 압축파일 형식에는 대표적으로 " gzip " 과 " bzip2 " 가 있습니다 #gzip [파일명] => 파일명.gz / 원본파일은 삭제됨 #gunzip [파일명] => 해당 파일명의 파일이 생성 #bzip2..
2017.05.30 -
Exploit-exercises Nebula level04 [ Link ]
Nebula level04문제입니다 당신은 " token " 파일을 읽어야합니다. 그러나 코드가 파일 읽기를 제한하고 있다 우회할 수 있는 방법을 찾아라 일단 flag04의 홈디렉토리로 가보도록 하겠습니다 flag04 실행파일과 token 파일이 존재합니다. flag04파일을 여러번 실행시켜보았습니다. 아마도 파일을 읽어들이는 실행파일로 보입니다. token을 읽어드리려고 했지만 권한에 제한이 걸려있습니다 인자로 token 문자열이 들어가 있으면 해당 실행파일을 종료시킵니다 ( strstr 함수 ) 어떻게하면 token파일을 인자로 넣을 수 있을 지 생각해봅시다 token파일을 다른이름으로 저장하던지 링크파일을 생성하면 된다 cp 명령어와 하드링..
2017.05.30 -
Exploit-exercises Nebula level02 [ system()함수 ]
해당 소스코드는 flag02의 소스코드입니다 asprintf( &buffer, "/bin/echo %s is cool" , getenv("USER") ); getenv함수는 해당 이름에 해당하는 환경변수의 값을 가져오는 함수입니다 USER라는 이름으로 level02가 환경변수에 저장되어있어서 level02 가 %s 에 들어가게 됩니다 asprintf함수에 의해서 buffer라는 변수에 "/bin/echo level02 is cool" 이라는 변수가 저장됩니다 그리고 system함수에 의해서 ehco 명령어가 실행된다. 아래는 /home/flag02/flag02의 실행화면이다 어떻게 flag02의 권한을 가질 수 있을까? 이번 문제는 system()함수의 취약점을 이..
2017.05.30 -
Exploit-exercises Nebula level01 [ 환경변수 ]
Nebula level01번 문제입니다 /home/flag01/flag01 실행파일을 실행한 결과입니다 "echo" 명령어의 결과와 같습니다. 원래 명령어는 $echo 만 쓰는거 아닌가? 라고 하실 수 있습니다. 하지만 리눅스에서 명령어의 동작원리는 환경변수에 PATH 에 저장된 경로에서 " echo " 라는 명령어에 대한 정보가 있는 파일을 검색한 후 존재하면 그 파일을 실행시켜주는 원리입니다 환경변수 PATH란 무엇인가? ㅡ 그림 1.3 을 보시죠 명령어 " env " 는 환경변수의 리스트를 출력해주는 역할을 합니다 환경변수중에서 PATH 가 보입니다. " : " 를 경계로 각 디렉토리에서 입력된 명령어들을 검색합니다 그러면 echo라는 파일..
2017.05.30 -
FTZ level20 포맷 스트링 버그 [FSB]
FTZ level20번 문제는 포맷 스트링 버그문제입니다 ( level11번에서도 풀었엇죠? )힌트를 봐보시면 포맷스트링 취약점이 보입니다[ 그림1 ] 포맷스트링 취약점이 있는 것을 알았고, 이제 포맷스트링 공격에 필요한 것은 무엇일까요?2가지 : RET(리턴 어드레스) , 쉘 생성코드 주소 level11번문제에서는 " nm " 명령어를 통해서 소멸자의 주소를 알아냈습니다.하지만 이번에는 " nm " 명령어로 볼 수 없게 막아놧네요. 하짐 또다른 방법이 있습니다 [level20@ftz level20]$ objdump -h attackme[ 그림2 ] 18 .dtors 라는 것이 보일겁니다. 해당 라인에 나와있는 주소값은 " __DTOR_LIST__ " 의 주소입니다 어디서 많이 본거 같죠? " __DTO..
2017.05.30 -
FTZ level19 Return to Libc
level19번 문제입니다 이번 문제는 에그쉘을 이용해 쉘을 실행시키는 방법과 RTL기법을 활용해서 문제를 풀어보도록 하겠습니다 먼저 힌트파일을 보겠습니다. 다른 문제들과 다르게 소스파일에 setreuid() 함수가 없습니다 따라서 이전 문제처럼 쉘 생성코드만 작성하고 실행시킨다고 level20계정의 권한을 얻을 수 없습니다 setreuid()함수를 실행할 수 있는 코드를 직접 만들어야 합니다 이제 해당 파일의 스택구조를 살펴보겠습니다 gdb분석 결과 Procedure prelude 과정에서 sub $0x28,$esp 부분이 보이실겁니다 40byte만큼 지역변수 공간을 할당해주었습니다. 따라서 스택구조는 다음과 같습니다 buffer SFP RET 환경변수 등등...
2017.05.30 -
FTZ level18 포인터 특성 활용
level18의 힌트파일을 보면 " File Descriptor " 개념이 나옵니다. 소스파일을 읽기 어렵게 만들어놓은 함정입니다 switch문만 제대로 파악하면 문제는 풀리지만 나머지 소스에 대해서 설명해 드리겠습니다 그럼 힌트파일을 열어보도록 하겠습니다 소스가 엄청 깁니다 천천히 따라서 읽어보세요 #include #include #include #include void shellout(void); int main() { char string[100]; int check; int x = 0; int count = 0; fd_set fds; // fd_set 타입의 fds 변수선언 ( 파일디스크립터의 집합 or 소켓 구조체 ) printf("Enter your command: ");..
2017.05.28