System
[POXX 2020] tips
checksec - 64bit - NX - not stripped - statically linked >> plt와 got가 따로 구분되지 않는다. Analyze Pseudo Code 함수리스트를 살펴보면 가젯을 심어둔 함수가 있음을 확인할 수 있다. 실행 "/bin/sh"문자열이 포함되어 있지 않아 따로 writableArea에 넣어줘야한다. bss 영역: 0x6cbb60 gadgets syscall ; ret ; = 0x43ef25 pop rax ; pop rdx ; pop rdi ; pop rsi ; ret ; = 0x4009bc pop rdx ; pop rdi ; pop rsi ; ret ; = 0x4009bd pop rax ; ret ; = 0x41f854 SROP 방식으로 exploit 코드를..
[POXX 2020] investigator
checksec - 64bit - Partial RELRO - No Canary - NX Analyze Pseudo Code int __cdecl main(int argc, const char **argv, const char **envp) { __uid_t v3; // eax const char *v4; // rdi int v6; // [rsp+18h] [rbp-8h] int v7; // [rsp+1Ch] [rbp-4h] setvbuf(stdout, 0LL, 2, 0LL); v3 = getuid(); seteuid(v3); v7 = 0; puts("---------------------------------------------------"); puts("####FIND####THE####VACCINE..
[LOB] gremlin → cobolt
gate에서 gremlin으로 사용자 변경을 해주고 gate에서 얻은 gremlin의 비밀번호를 입력한다. 그리고 gate 단계에서 사용자만 변경했기 때문에 gate 권한의 디렉터리에서 gremlin 권한의 디렉터리로 옮겨준다. Analyze - small buffer로 buffer의 크기가 16byte밖에 안된다. - strcpy 함수에서 스택 버퍼 오버플로우 취약점이 발생한다. - buf[16] + SFP[4] + RET[4] = 24byte - 32bit - dynamically linked - not stripped debugging Payload 버퍼의 크기가 쉘 코드를 모두 입력받기에 너무 작기 때문에 쉘코드를 환경변수로 저장하여 환경변수를 호출하도록 한다. BUF+SFP (20) || RET..
[Protection Tech.] ASLR
ASLR = Address Space Layout Randomization = 메모리 손상 취약점 공격을 방지하기 위한 기술; 라이브러리, 힙, 스택 영역 등의 주소를 바이너리가 실행될 때마다 랜덤하게 바꿔 RTL 등 정해진 주소를 이용한 공격을 막는 보호기법이다. Detecting ASLR NX bit의 경우 바이너리의 컴파일 옵션에 따라 적용 여부를 결정했지만 ASLR은 서버의 설정파일에 의해 적용 여부가 결정된다. ▷Ubuntu16.04: /proc/sys/kernel/randomize_va_space 파일의 값을 통해 확인할 수 있다. ▶설정 파일의 값 0 ASLR을 적용하지 않음 (해제) 1 스택, 라이브러리 메모리를 랜덤화 2 스택, 힙, 라이브러리 메모리를 랜덤화 현재 설정되어 있는 ASLR..
[LOB] gate → gremlin
xshell에 연결했다. 안전하게 사용하기 위해.. gremlin을 복사해 g를 만들었다. 항상 시작전에 $ bash2 입력하기! Analyze - simple bof 문제 - strcpy 함수에서 buffer overflow 취약성이 나타나기 때문에 이 함수에 bof를 일으켜 문제를 풀면 될 것이다. - buffer(256) + SFP(4) + RET(4) 이런식으로 넣으면 될 것 같다. - argc가 2개 미만일 때(=명령어만 있는 경우) 오류메시지를 출력하고 종료한다. - 위의 조건에서 통과된다면 인자로 입력한 argv[1]이 버퍼에 복사되고 그 주소가 출력될 것이다. - 32bit - not stripped - dynamically linked debugging strcpy함수를 실행하여 buff..
PLT, GOT
PLT, GOT Procedure Linkage Table(PLT) = 외부 라이브러리 함수를 사용할 수 있도록 주소를 연결해주는 역할을 하는 테이블 ▷ PLT의 주소는 고정되어 있기 때문에 서버에 ASLR 보호기법이 적용되어 있어도 PLT로 점프하면 RTL과 비슷하게 공격할 수 있다, Global Offset Table(GOT) = PLT에서 호출하는 resolve 함수를 통해 구한 라이브러리 함수의 절대 주소가 저장되어 있는 테이블 ▷ 초기에는 라이브러리 함수의 주소를 구하는 바이너리 코드 영역의 주소가 저장되어 있다가, 함수가 처음 호출되면서 라이브러리 함수의 실제 주소가 저장된다. ASLR이 적용되어 있는 환경에서, 동적으로 라이브러리를 링크해 실행되는 바이너리(Dynamically Linked ..
[Protection Tech.] NX bit
NX bit = No(Never) eXecute bit (실행 방지 비트) = 메모리에 쓰기 권한과 실행 권한을 동시에 부여하지 않음으로 해당 프로그램의 공격을 어렵게 한다; 프로세스 명령어나 코드, 데이터의 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술이다. → NX bit가 적용된 메모리 구역은 데이터 저장을 위해서만 사용되고, 프로세서 명령어가 실행되지 않도록 한다. DEP = Data Execution Prevention = MS Windows 운영 체제에 포함된 보안기능으로, 악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가적으로 확인하는 HW 및 SW 기술이다. - 하드웨어 DEP: 메모리에 명시적으로 실행코드가 포함되어 있는 경우를 제외하고 프로세스의 모든 메모리 위치에서 ..
[CentOS 8] APM 웹 서버
APM = Apache 웹 서버 + PHP 웹 프로그래밍 언어 + MariaDB (MySQL의 후속버전) 데이터베이스 >> 리눅스에서는 LAPM, 윈도우에서는 WAPM 으로도 부른다 APM 설치 (CentOS에서 dnf 명령을 이용해 쉽게 설치할 수 있다) 설치할 패키지: httpd, php, php-mysqlnd, mariadb-server # dnf -y install httpd php php-mysqlnd mariadb-server 서비스 가동 # systemctl status httpd # systemctl start httpd # systemctl status httpd
XRDP 서버
XRDP 서버 X 윈도우 환경으로 원격접속 하고 싶을 때 사용할 수 있는 원격 접속 서버 (= 그래픽 모드로 원격 관리를 지원한다) 원격지로 그래픽 화면을 전송한다. >> 텔넷, ssh 서버에 비해 느려진다. Windows의 '원격 데스크톱 연결' 프로그램을 사용해 리눅스에 그래픽 환경으로 접속한다. XRDP 외에도 X 윈도우 환경으로 접속하는 방식으로는 VNCSERVER도 있다. XRDP 서버 구축 XRDP 서버 설치 # dnf -y install epel-release >> xrdp가 CentOS8에서 기본으로 제공하는 설치 패키지가 아니기 때문에 추가 패키지를 제공하는 저장소인 EPEL을 설치한다. 또는 xrdp 설치파일을 인터넷에서 직접 다운로드 받아 설치를 할 수 있다. # dnf -y inst..
OpenSSH 서버
OpenSSH 서버 텔넷보다 보안이 강화된 SSH 서버 텔넷과 거의 유사하고, 데이터 전송 시 암호화 한다는 차이점이 있다. 암호화관련 주요 기능 - 암호화된 터미널 접속 (telnet과 동일) - 암호화된 file 송수신 기능 (FTP 기능) - 통신 선로 암호화 기능 (클라이언트와 서버 사이의 네트워크 연결을 암호화) ssh >> 리눅스와 윈도우에서의 사용법 같음 Openssh 서버 구축 openssh 서버 확인 # rpm -qa openssh-server # systemctl status sshd >> sshd는 22번 포트를 사용하고 있음을 확인할 수 있다. client (linux) 에서 접속 # ssh 사용자이름@호스트 이름 또는 # ssh 사용자이름@IP 주소 또는 # ssh -l 사용자 이..