728x90

전체 글 153

[withCTF] 우리는 이 파일에 플래그를...

힌트를 보니 “우리는 이 파일에 플래그를 넣었지만 오는 길에 뭔가 엉망이 됐어요.” 에서 인코딩 과정중 망가졌거나 파일 속성이 잘못됐음을 짐작할 수 있었다. flag 파일을 다운받아 .png와 jpg 파일로 확장자를 변경해보았지만 flag값을 찾지 못했고 마지막으로 zip 으로 압축해 파일을 열어보니 flag값을 찾을 수 있었다. ABCTF{broken_zipper} 추가 풀이 HxD를 통해 초기 flag 파일의 헤더를 확인해보면 1F 8B 08 …gz라는 것을 알 수 있음 따라서 확장자를 zip으로 변경하고 해제하면 flag값 획득 가능

[포너블] 리눅스 프로세스의 메모리 구조

1. 세그먼트 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트로 나눈다. 세그먼트란 데이터의 용도별로 메모리를 나눈 것인데 크게 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 그리고 스택 세그먼트로 구분한다. 운영체제가 메모리를 용도별로 나누면 각각의 세그먼트에 권한을 부여할 수 있다는 장점이 있다. (읽기 쓰기 실행 권한이 있으며 CPU는 이 권한에 따라 접근할 수 있다.) 1.1 코드 세그먼트 실행가능한 기계 코드가 저장되는 곳이다. 프로그램이 동작하려면 코드를 읽고 실행시켜야 하기 때문에 읽기, 실행 권한이 부여된다. 쓰기 권한이 부여되면 공격자가 악의적인 코드를 삽입하기 쉬우므로 쓰기 권한은 부여되지 않는다. 예를들어 정수 31337을 반환하는 main함수가 컴파일 되면..

[CTF] 포렌식 포테이토 디지털 포렌식 미궁 게임 CLEAR

0. 서론 7월 13일 정보보호의 날을 맞아 과 동아리 I.Sly()에서 미궁게임을 개발하여 배포했다. 해당 미궁은 디지털 포렌식과 관련된 문제로 이루어져 있으며 문제 난이도는 비전공자도 충분히 풀 수 있는 정도(물론 나는 응애전공자지만) 라고 하길래 새벽 네 시쯤 잠이 안와서 도전해보기로 하였다. 난 CTF 문제를 풀어본 적도 없고 전공에서 배운 gdb디버거 등도 따라가기 어려워 했기 때문에 한 두 문제 풀다가 포기할 줄 알고 가볍게 시작했는데, 의외로.. 다 풀어내서 공부한 것들을 정리할 겸 백업해둔다. *다른 유저들의 플레이를 위해 flag 값은 적지 않았습니다. (정보 공유용x 그냥 내 기록용) *모든 저작권은 미궁 게임을 개발한 동아리 학생들에게 있습니다. (관련 글 : https://hacki..

[네트워크] IP Fragmentation의 취약점을 이용한 Ping Of Death 공격

*2022-1 네트워크 보안 과제 백업입니다. 1. 공격 대상 서비스 거부(DoS) 공격은 가장 파괴적이고 전 세계적으로 비즈니스 운영에 영향을 미치 는 사이버 공격 유형 중 하나이다. DoS의 확장된 공격은 분산 DoS (DDoS, Distribution Denial of Service)로, 여러 장치에서 공격을 가하여 희생자 컴퓨터의 네트워크 트래픽을 과부하 시키고 궁 극적으로는 시스템의 막대한 자원을 활용하여 서비스를 중단시킨다. DDoS 공격은 불필요한 요청 을 네트워크 서버로 과도하게 많이 보내며, 불필요한 요청은 희생자가 원하는 시스템 자원을 사 용할 수 없게 만든다. 그 중 프로토콜 공격의 유형에는 Ping of Death가 있다. Ping 프로그램은 호스트에게 ICMP 에코 요청 메시지를 ..

[시스템 보안] 세그멘테이션 폴트를 gdb 디버깅을 통해 확인하기

*2022-1 시스템보안 과제 백업입니다. 1. 문제 아래 소스 코드를 컴파일하여, 버퍼 오버플로우 취약점으로 인해 Segmentation fault (세그멘테이션 폴트) 오류가 발생하게 하는 최소 길이의 입력 값을 찾고, 이유를 설명하라. 이 과정에서 gdb 디버거를 활용하여 버퍼 오버플로우가 발생하는 시점 직전에 breakpoint (중단점)를 설정하고, 버퍼 오버플로우가 일어난 직후의 스택을 gdb를 통해 각각 확인하여 비교하라 (스크린샷 첨부 필수). 비교 과정을 통해, 세그멘테이션 폴트가 해당 입력에서 왜 발생하게 되었는지를 설명하라. #include int main(int argc, char *argv[]) { char buf[12]; gets(buf); printf(“%s\n”, buf); ..

[운영체제] 버퍼 오버플로우 1 (buffer overflow)

1. x86 아키텍쳐 - CPU - 메모리 - 입출력 장치 (I/O) 1) 연산장치 (ALU, Arithmetic and Logic Unit) - CPU의 핵심 부분 중 하나로, 산술과 논리 연산을 수행하는 연산 회로 집합으로 구성 - 관련 레지스터: 범용 레지스터 (EAX, EBX, ECX, EDX), 플래그 레지스터 (EFLAGS) * 레지스터 : 연산을 위해 사용되는 변수 * 플래그 레지스터 : 특수 목적 레지스터, 아키텍쳐의 제약으로 인해 생성되는 부산물들을 저장함 2) 제어 장치 (Control Unit) - 입력, 출력, 기억, 연산 장치를 제어하고 감시 - 주기억 장치에 저장된 명령을 차례로 해독하여 연산 장치로 보내 처리되도록 지시 프로그램 카운터 (PC): 다음에 실행할 명령의 주소 저장..

카테고리 없음 2022.06.26
728x90