System
텔넷(Telnet) 서버
텔넷 서버 오랫동안 사용된 원격 접속 방법으로, 보안이 취약하나 가장 기본적인 원격 접속방법으로 여전히 쓰이고 있다고 한다. * 실습 환경: CentOS 7 텔넷 서버 구축 텔넷 서버 설치 # dnf -y install telnet-server >> telnet client는 대부분의 운영체제에서 내장되어있다. 텔넷 서비스 시작 # systemctl start telnet.socket >> telnet은 socket 형시으로 되어 있어서 항시 떠있지 않고 해당 요청이 들어왔을 때 뜨게해서 효율성을 높인다. >> Listen 영역에 있는 "23"이 telnet이 사용하는 포트번호이다. 23번 포트는 다른 서비스를 사용하는 포트로 사용하면 안된다! 더보기 **포트(port)** TCP/UDP 포트를 줄여서 ..
[Heap] Memory Leak
Memory Leak 메모리가 해제되면서 unsorted bin에 들어가는 힙은 main_arena 영역의 주소가 FD와 BK에 저장된다. main_arena는 libc.so.6 라이브러리의 구조체이기 때문에 main_arena의 주소를 알아내 계산을 하면 라이브러리 함수의 주소를 구할 수 있게 된다. leak1 // gcc -o leak1 leak1.c #include #include int main() { char *ptr = malloc(0x100); char *ptr2 = malloc(0x100); free(ptr); ptr = malloc(0x100); printf("0x%lx\n", *(long long *)ptr); return 0; } 0x100 크기의 힙을 할당-해제하며 unsorted ..
[Dreamhack] house_of_force
checksec 32bit Canary발견되지만 heap문제니까...상관없을듯 Pseudo code int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax int v5; // [esp+0h] [ebp-10h] int v6; // [esp+4h] [ebp-Ch] int v7; // [esp+8h] [ebp-8h] unsigned int v8; // [esp+Ch] [ebp-4h] v8 = __readgsdword(0x14u); v6 = 0; v7 = 0; initialize(); while ( 1 ) { while ( 1 ) { puts("1. Create"); puts("2. Write"); puts("3. Exi..
[Heap] House of Force
House of Force top chunk의 size를 조작함으로써 임의의 주소에 힙 청크를 할당할 수 있게 하는 공격 기법 static void * _int_malloc (mstate av, size_t bytes) { INTERNAL_SIZE_T nb; /* normalized request size */ ... mchunkptr remainder; /* remainder from a split */ unsigned long remainder_size; /* its size */ ... use_top: victim = av->top; size = chunksize (victim); if ((unsigned long) (size) >= (unsigned long) (nb + MINSIZE)) { re..
[Linux/CentOS] 시간 예약 서비스 - cron, at
cron 주기적으로 반복되는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약해 놓는 것이다. (= cron) cron 과 관련된 서비스(데몬)을 crond 라고 한다. 이와 관련된 파일은 /etc/crontab 이다. 분(00~59) 시(00~23) 일(1~31) 월(1~12) 요일(0~6) 사용자 실행명령 요일은 0을 일요일로 두고 이어진다. 사용자는 해당명령을 실행할 사용자를 지정해준다. 시간 조건에 상관 없을 때는 '*'로 표시한다. /etc/crontab 파일에 반복하고 싶은 작업에 대한 세부적인 사항들을 적어주면 된다. 주기적으로 실행할 내용을 디렉터리 넣고 작동한다. /etc/crontab 파일이 시간별, 일별, 주별, 월별로 호출하는 디렉터리들이다. >> 00 * * * * root ru..
[Linux/CentOS] 파일 위치 검색 - find, which, whereis, locate
find # find [경로] [옵션] [검색조건] [action] 옵션 -name : 이름이 ~인 파일 찾기 -user: 사용자가 ~인 파일 찾기 -newer: -perm: 허가권이 ~인 파일 찾기 -size: 크기가 ~인 파일 찾기 action -print (default) 기본값으로 따로 지정하지 않을 경우 실행; 찾은 내용을 출력 -exec + 명령 + \; 외부의 명령을 실행 -delete 찾은 내용을 삭제 # find /home -name "*swp" -exec rm { } \; >> "find /home -name "*swp""을 먼저 실행한 후 실행결과가 rm의 { }인자로 들어가 .swp 파일들이 rm 명령으로 실행되어 파일이 삭제된다. 이 때 -exec와 \;는 외부명령어의 시작과 끝을..
[Linux/CentOS] 파일 압축과 파일 묶기
파일 압축 확장명: xz, bz2, gz, zip, Z 등 windows와 달리 파일의 압축과 파일 묶기가 나눠져있다. 데이터의 크기를 줄이기 위한 과정이다. xz # xz [옵션] [파일] 확장명이 xz인 파일을 압축하거나 풀어준다. # unxz 파일이름 xz 확장명의 압축 파일의 압축을 해제한다. = # xz -d mode -z + 파일 (compress) 파일 압축: 따로 명령관련 옵션을 지정해주지 않았을 때의 default(생략가능) -d + 파일.xz (decompress) 압축 해제 -t + 파일(.xz) (test) 어떤 옵션들을 붙여 실행했을 때의 결과를 출력해주면서 테스트 >> 파일이 실제로 삭제되거나 압축되는 것은 아님 -l + 파일.xz (list) xz 압축 파일에 포함된 파일 목록..
[Linux/CentOS] 프로그램 설치 - RPM, DNF
RPM (Redhat Package Manger) Windows의 setup.exe처럼 프로그램 설치 후 바로 실행할 수 있는 설치 파일 >> *.rpm (확장명) '패키지'라고 부른다. 설치하려는 rpm 파일이 DVD에 있거나 인터넷에서 미리 다운로드한 후 설치해야 함 rpm 파일 형식 패키지이름-버전-릴리즈번호.CnetOS버전.아키텍쳐.rpm (예시) gzip 패키지 패키지 이름 gzip 패키지(프로그램)의 이름; 이름에 하이픈(-)이 포함되어 있을 수 있기 때문에 버전 바로 앞까지를 패키지 이름으로 생각하고 봐야한다. 버전 1.9 대부분 2~3자리 수 릴리즈 번호 4 문제점을 개선할 대마다 붙히는 번호 CentOS 버전 el8 CentOS 8에서 배포할 때 붙여진다. (Redhat enterpris..
링크, ln 명령어
링크(Link) = 하드 링크(hard link) + 심볼릭 링크(symbolic link / soft link) 하드 링크 원본 파일에 대한 directory entry를 하나 더 만드는 개념 원본 파일이 inode1을 사용한다고 하면, 하드 링크를 생성했을 때 하드링크파일만 하나 생성되고 같은 inode1을 공유한다. 다만, 같은 system 내에서만 사용이 가능하다. 윈도우에는 없는 개념이지만 윈도우로 예를 들면 같은 드라이브 내에 원본파일과 하드링크파일이 존재해야 사용할 수 있는것이다. # ln 링크대상파일이름 링크파일이름 심볼릭 링크 Windows의 바로가기 역할을 하는 링크 심볼릭 링크 파일의 내용은 실제 원본 파일의 경로(원본 파일 포인터)다. 하드 링크와 달리 원본파일의 inode1과 다른..
[Heap] The House of Spirit
House of Spirit fake fastbin chunk를 해제(free)하면서 malloc 할당 시 임의의 포인터를 반환하도록 함으로써 원하는 주소에 값을 쓸 수 있게 하는 공격방식이다. >> 같은 크기만큼을 재할당할 때, 같은 주소를 반환하는 fastbin의 특성을 이용 (fastbin을 공격하는 기법) stack에 가짜 청크를 쓰고 해당 stack의 주소에서 0x10(64bit기준) 더한 주소로 free()를 호출할 수 있을 때 구현가능하다. stack에 fastbin에 해당하는 크기의 fake chunk를 작성하고 malloc()으로 메모리를 할당한다. 그리고 fake chunk의 주소+0x10인 주소에 free()를 호출해 해당 chunk가 fastbin에 저장되게 한다. 해당 chunk의..