ProjectH4C 48

[TeamH4C_FTZ] Level1 ~ Level5

이번에는 해커스쿨에서 배포하는 워게임인 FTZ를 이어서 보도록 하겠습니다. Trainer10까지 모두 풀게 되면 level 1에 대한 로그인 정보를 얻을 수 있습니다. level 1 비밀번호를 얻었으므로 level 1에 접속하여 문제를 확인하도록 하겠습니다. Level 1 level 1에 접속하여 현재 디렉터리에 있는 파일들을 확인해보도록 하겠습니다. ls명령으로 파일들을 확인하여 보면 hint라는 파일이 보입니다. 문제의 hint로 보이기에 cat명령으로 확인하여 보면 setuid가 걸려있는 파일이 존재하여 이용하는 문제로 확인이 됩니다. setuid파일이 설정되어 있는 파일을 찾기 위해서는 find명령 옵션에서 perm옵션을 사용하여 찾을 수 있습니다. perm옵션을 이용하여 level 2가 소유자로..

[TeamH4C_HackCTF] 시스템 해킹_기초문제

저번 게시물에 이어 시스템 해킹 기초 문제를 좀 더 풀어보겠습니다. 이번에는 HackCTF사이트의 문제를 가져왔습니다. 값 변조 Basic_BOF #1 실행 주소 값 변조 Basic_BOF #2 return 주소 값 변조 offset 문자열 변환으로 return 주소 값 변조 g++ pwn 1. Basic_BOF #1 버퍼 오버 플로우 문제로 주어진 파일을 IDA로 열어 확인하였을 때 특정 변수가 -55903873일 때, 즉, DEADBEEF라는 16진수 값을 가질 때 shell을 획득하도록 되어있었습니다. 그렇기에 payload에 deadbeef를 패키징하여 16진수 형태를 표현하고 앞의 dummy값은 s크기인 40byte를 설정하여 check값을 변조하면 됩니다. 2. Basic_BOF #2 포인터로..

[TeamH4C_GDB] 메모리 분석

메모리 분석 내용으로 GNU 디버거라 하는 GDB를 통해 확인해보겠습니다. 참고한 사이트는 https://bpsecblog.wordpress.com/2016/03/08/gdb_memory_1/ 여기입니다. 메모리 분석 메모리는 유저 영역과 커널 영역으로 나뉘어 저장되어있습니다. 유저 영역은 사용자가 사용하는 영역이고, 커널 영역은 사용자가 마음대로 접근을 하지 못하도록 제한한 영역으로 생각하면 됩니다. 시스템 운영에 필요한 메모리와 운영체제를 커널 영역으로 분리한 것입니다. 나누는 영역은 운영체제마다 다르고, 설정에 따라 영역의 크기를 조정할 수 있습니다. 유저 영역을 보면 코드 영역, 데이터 영역, 힙 영역, 스택 영역이 존재하는데 순서대로 코드 영역에는 코드가 어셈블리 코드로 올라갑니다. 데이터 영역..

TeamH4C_ProjectH4C 2021.03.14

[TeamH4C_FTZ] Trainer1 ~ Trainer10

이번에는 해커스쿨에서 배포하는 워게임인 FTZ를 풀어보도록 하겠습니다. FTZ는 여러 가지 기법을 무료로 트레이닝할 수 있도록 도와주는 서버입니다. FTZ는 구글링을 통해 다운로드할 수 있으며 FTZ를 사용하기 위해 VMware과 putty를 다운로드하시면 됩니다. 혹시 모르기에 따로 링크는 하지 않도록 하겠습니다. 다운로드한 FTZ를 파일을 VMware로 열면 아래와 같은 화면을 확인하실 수 있으며 엔터를 눌러 red hat리눅스를 접속하면 됩니다. 리눅스에 들어가면 ftz login이라 표시되어 있는 화면이 보이실 텐데 아이디는 root로 로그인하시면 됩니다. 비밀번호는 hackerschool을 입력하시고 엔터를 클릭하면 되는데 패스워드는 안 보이는 것이 정상이니 여러 번 누를 필요 없이 한 번만 제..

[TeamH4C_C언어] 문자열과 구조체

안녕하세여! 이번 정리는 문자열을 배열에 저장하거나 포인터 문자열 출력을 해보도록 하겠습니다. 문자열 문자열의 초기화 문자열 입력하여 저장 문자열의 확장기능 문자열 길이 문자열 비교 문자열 복사 문자열 붙여넣기 문자열로 변환 문자열 검색 문자열 자르기 문자열 정수, 실수로 변환 회문, N-gram 간단한 회문과 N-gram 설명 구조체 구조체 정의 구조체 별칭 구조체 포인터 간단한 구조체 예제 문자열의 사용 C언어에서 문자열을 사용하기 위해서는 아래와 같이 기본적인 형태로 문자열을 선언하거나 초기화가 가능합니다. #include int main() { char* ptr1 = "string"; char* ptr2[] = { "string" }; char arr1[] = "string"; char arr2[..

[TeamH4C_C언어] 포인터를 활용한 문제

이번에 CodeUp에 나와있는 문제들을 포인터를 사용하여 풀어보겠습니다. 문제는 순서대로 1차원 배열 동적 할당, 2차원 배열 동적 할당, 특정 조건의 수 출력, 함수를 이용하여 비교출력, 특정 순서로 출력의 문제를 풀어봤습니다. 문제풀이 1차원 배열 문제로 배열의 형태가 아닌 포인터 형태로 나타내기 위해 malloc함수를 사용하여 동적 할당 형식으로 변수를 생성하고 변수를 역참조하며 값을 입력하는 방식으로 각각의 주소에 값을 넣어 입력값을 입력받았습니다. 그 후, 가장 빠른 번호를 출력시키기 위해 임시 저장 변수에 첫 번째 포인터의 값을 저장시킨 후 비교하여 가장 작은 값을 출력하도록 코드를 작성할 수 있습니다. 이번에는 2차 배열 문제로 이중 포인터를 사용하여 2차 배열의 형식을 만들어 문제를 풀었습..

[TeamH4C_C언어] 포인터의 활용

이번에는 C언어에서 사용되는 포인터에 대해 정리하겠습니다. 포인터는 주소 값을 이용하는 변수로서 애스터리스크(*)를 이용하여 가리키는 곳의 주소를 활용할 수 있습니다. 이번 정리에서는 아래와 같은 주제로 정리되어 있습니다. 포인터 단일 포인터 다중 포인터 메모리 동적 할당 메모리를 특정 값으로 초기화 배열 1차원 배열 2차원 배열 배열과 포인터의 응용 포인터의 사용 값을 변수에 저장하면 메모리 공간에 할당하는 방식으로 저장이 됩니다. 변수는 메모리의 특정 장소에 위치함으로 메모리 주소로도 표현할 수 있습니다. 변수의 메모리 주소를 구할 때 변수 앞에 주소 연산자(&)를 붙이고 서식 지정자를 pointer를 뜻하는 %p로 지정하거나 16진수 형태로 출력(%x)하면 메모리 주소를 확인할 수 있습니다. 이때,..

[TeamH4C_C언어] 다시 정리하는 CodeUp

이번에는 CodeUp에서 파이썬으로 풀었던 기초 100제 문제 중 가장 기억에 남았던 문제를 C언어로 풀어보았습니다. 크게 반복문, 조건문, 연산, 배열에 대해 정리하였습니다. Memorable CodeUp 첫 번째 문제로 기초 100제의 1079번 문제입니다. 입력이 반복되며 문자 'q'가 입력될 때까지 문자를 출력하는 문제입니다. 이 문제는 입력을 한 번은 무조건 받아야 하는 문제여서 반복문 중 do while반복문을 사용하여 푼 문제입니다. 반복 코드를 무조건 한번 실행하는 형식으로 기억에 남던 문제입니다. 문제의 풀이는 아래와 같습니다. 문자의 자료형인 char 변수를 선언하고 do while반복문을 활용하는 방식입니다. 여기서 scanf() 함수 뒤에 getchar() 함수가 이용되었는데 get..

[TeamH4C_C언어] 반복의 loop

반복되는 코드를 직접 작성하는 것은 불가능에 가깝고 가능하더라도 복잡한 코드가 될 것입니다. 그렇기에 프로그래밍 언어에서는 반복문이라는 것을 통해 반복되는 코드를 간단하게 작성할 수 있도록 도와줍니다. 반복문의 시작에 앞서 값에 따라 원하는 코드가 실행되는 조건문에 대해 정리하고 반복문에 대해 정리하겠습니다. switch 조건문 if와 else는 조건식이 참 또는 거짓일 때 처리가 가능하였지만, 두 가지 조건 말고 다양한 조건일 때 처리할 수 있는 조건문이 switch조건문입니다. switch 분기문은 조건이 많을 때 유용하며, 기본형식은 다음과 같습니다. switch(판별되는 값, 변수) { case 1: 코드; break; case 2:// 값이 2와 3일 때의 코드 실행 부분이 같을 때 처리방법 c..