전체 글

보안 전문가가 되기 위한 노력들
1. 문제복호화 코드를 지웠다고 하네요…복호화 코드를 완성하면 될것 같습니다. 2. 코드 분석이러한 조건이 존재하고p 값을 알아내야 합니다.  전체적인 코드의 흐름을 살펴보면 n, key1, key2 값을 함수를 호출해서 얻고 그것으로 암호화 합니다.  평문을 입력하면 문자 한개 한개를 모두 ASCII 값으로 반환합니다.  n, key1, key2는 key 2 ≥ key1 일 때 까지 0~100 까지의 난수를 얻는다.하지만 현재 key2는 95 이므로key1은 95보다 작거나 같습니다.  ASCII 값으로 반환된 p를 int형으로 변환하고 n, key1, key2 와 함께 enc 함수에 전달  q 값을 구하는 수식을 표현해보면;;;따라서 p는 밑의 사진과 같은 식이 나옵니다. 3. exploit 코드 작..
1. 문제base64 공부 후 자신만의 암호를 만들었다고 합니다.힌트에서 32개의 문자를 가지고 base32를 드림이가 만든것 같아요 2. 풀이https://dntmdgns03.tistory.com/121해당 포스트에서 자세히 알 수 있듯이bsae64는 byte 크기로 나누고 6bits로 그룹화 하여 테이블에서 문자와 매칭하는 방식입니다.6bits인 이유는 64개의 수를 모두 표현하기 위해서 입니다.하지만 현재 드림이가 만든 인코딩 방식은 32개의 문자 즉 2^5 이므로 5bits씩 그룹화 하여 인코딩 하는 방식그렇다면 base64 인코딩 방식을 역으로 구성하는 데신 인코딩 문자열을 6bits가 아닌 5bits 2진수로 변환하면 됩니다.  먼저 인코딩 테이블을 만들어 줍니다.이 후 패딩 처리된 문자를 제..
1. Base64Base64 인코딩 방식은 바이너리 데이터를 ASCII 문자열로 변환하는 인코딩 방법이다.바이너리 데이터를 64개의 인쇄 가능한 ASCII 문자로 변환한다.문자는 A-Z, a-z, 0-9, +,/ 로 구성되고, 인코딩 과정에서 패딩을 위해 ‘=’문자가 사용된다. 2. Base64 인코딩 과정2.1 바이너리 데이터를 비트 단위로 나누기인코딩할 바이너리 데이터를 8비트 단위의 바이트로 나눈다.왜 8비트인가 하면 보통 데이터를 표현하고 처리할 때 8비트가 일종의 표준화가 되었고,현대 컴퓨터 아키텍처와 잘 호환된다. 따라서 처리 속도를 최적화할 수 있다.이 외에도 다양한 이유가 존재한다. 2.2  24비트 블록으로 그룹화Base64의 모든 문자를 표현하기 위해서는 2^6 이 필요하다. 따라서 6..
·Language/C
1. 공용체구조체와 유사한 데이터 타입이지만 공용체의 모든 멤버가 메모리의 같은 위치를 공유한다.따라서, 공용체의 크기가 가장 큰 멤버의 크기와 동일하며, 하나의 멤버만 저장하거나 접근할 수 있다.1.1 기본 구조union 키워드를 사용하여 선언한다.해당 코드에서는 str[20]이 가장 크므로 Data라는 공용체의 크기는 20Byte 이다.union Data { int i; float f; char str[20];};// 변수 선언 ( 구조체와 유사 )union Data data;data.i = 10;data.f = 220.5;printf("data.f: %f\\n", data.f); 2. 열거형상수를 더 읽기 쉽게 정의할 수 있게 해주는 데이터 탑이다.enum 키워드를 사용하여 정의된다..
·Language/C
1. 구조체란?구조체는 여러 개의 변수를 하나의 이름으로 묶어서 사용할 수 있게 해주는 데이터 구조이다.서로 다른 타입의 변수들을 묶어서 하나의 높은 수준의 데이터 타입으로 다룰 수 있으며, 이는 데이터를 구조화하는 데 있어서 매우 유용하다. 2. 구조체 선언구조체는 메모리상에 구조체 멤버들의 자료형의 byte합과 같다.구조체 이름은 구조체와 구조체를 구별하기 위해서 붙여지는 이름이다.구조체 멤버는 아직 변수가 선언된 것이 아니다.// 기본 구조 struct 구조체명 { 자료형 멤버명; 자료형 멤버명; ...};// 예시 struct Student { char name[50]; int age; float grade;}; 3. 구조체 변수 선언 및 초기화구조체를 정의한 후,..
1. WSL 이란? WSL(Windows Subsystem for Linux)은 윈도우 운영 체제에서 리눅스 바이너리 실행 파일들을 네이티브로 실행할 수 있게 해주는 호환성 계층입니다. 이를 통해 개발자들은 윈도우 환경에서 리눅스 기반의 개발 작업을 보다 쉽게 할 수 있게 되었습니다. WSL은 리눅스 커맨드라인, 도구, 유틸리티 및 응용 프로그램들을 윈도우에서 직접 실행할 수 있게 해 주며, 윈도우와 리눅스 간의 파일 시스템 접근을 가능하게 합니다.  1-1 WSL1WSL1은 시스템 호출 변환을 통해 리눅스 바이너리를 실행  1-2 WSL2실제 리눅스 커널을 사용하여 향상된 성능과 완전한 시스템 호출 호환성을 제공한다. WSL 2는 가상화 기술을 기반으로 하며, 파일 시스템 성능과 리눅스 호환성 측면에서..
1. 리눅스란?▶ Linux는 커스텀 OS를 만드는 역할을 한다.  리눅스는 오픈소스라는 큰 특징을 가지고 있습니다. 이는 그 코드가 누구에게나 공개되어 있으며, 누구나 이를 자유롭게 사용하거나, 필요에 따라 수정하거나, 그리고 그 수정한 버전을 다시 배포할 수 있다는 것을 의미합니다.이런 특성 때문에 전 세계의 많은 개발자들이 리눅스를 개선하고 발전시키는 데 기여하고 있습니다. 그리고 이런 리눅스 커널을 기반으로 다양한 소프트웨어와 유틸리티를 추가하여 만든 운영 체제를 '리눅스 배포판'이라고 합니다.우분투는 그런 리눅스 배포판 중 하나로, 사용자 친화적인 인터페이스와 편의성을 강조하고 있습니다. 리눅스는 그 유연성과 오픈소스라는 특성, 그리고 뛰어난 안정성과 보안성 덕분에 서버부터 스마트폰, 임베디드 ..
1. 문제 홈 디렉터리에 setuid 바이너리가 있습니다.이것은 커맨드라인 인자로 지정한 포트에 대해서 localhost에 연결을 만듭니다.그 후 텍스트 한 줄을 읽고 이전 단계의 비밀번호와 비교합니다. 2. 풀이 suconnect 라는 실행 파일은 TCP를 사용해서 localhost에 있는 지정된 포트에 연결한다고 합니다.그렇다면 bandit20에 2개의 접속을 시도하여 한 개는 nc로 포트를 개방하고 한 개는 비밀번호를 보내는 식으로해결해보겠습니다.  1025번으로 포트를 열고 접속하여 비밀번호를 전송하면 됩니다.
1. 문제 홈 디렉터리에 setuid 바이너리를 사용해야 합니다. 2. 관련 지식setuidsetuid(set user ID upon execution)는 실행 파일에 설정할 수 있는 특수 접근 권한입니다.이 권한이 설정된 실행 파일을 실행하면, 해당 프로그램은 파일 소유자 권한으로 실행된다.  결론적으로는 사용자가 setUID 설정이 적용된 파일을 실행하는 동안은 파일 소유자의 권한이 부여됩니다. 3. 풀이 해당 bandit20-do를 확인해보니   euid를 보면 일시적으로 bandit20의 소유자 권한을 얻을 수 있다.   그렇다면 bandit20을 실행해서 비밀번호를 읽어오면 됩니다.
스우스우03
스우스우