본문 바로가기

분류 전체보기

(75)
8주차 C언어 #define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int a, b; int total = 0; scanf("%d", &a); for (int i = 0; i 1.scanf로 먼저 숫자를 몇 개 검사할지 입력받습니다. total은 소수의 개수를 저장할 값입니다. 2.button이라는 변수를 만들어서 소수가 맞으면 0, 소수가 아니라면 1을 저장합니다.3.for문을 통해서 입력받은 숫자들이 소수인지 아닌지 검사합니다. 4.검사 과정에서 소수가 아니라고 판단 될 경우 button에 1을 저장하여 반복문을 빠져나옵니다.5.값을 출력합니다.   #define _CRT_SECURE_NO_WARNINGS #include #in..
7주차 시스템 실습에 사용될 코드는 다음과 같다.// Name: rao.c// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0;}분석취약점은 scanf("%s", buf)부분에 있다. 실수 또는..
7주차 웹해킹 1기본적으로 파이썬을 어느 정도 알아야한다. flask를 이용하여 사용자가 요청하는 걸 만들어낼 수 있다.2당장 제 vs code로 실행이 불가능해 온라인 세팅 환경을 이용했습니다. 3flask에서 random.random()을 실행하고 확인해봅니다4라우팅(Routing) :어떤 주소를 누가 담당하고, 어떤 요청을 어떤 함수가 응답할 것인지 연결시키는 작업5html코드를 사용하여 구현한 모습이다. 1.html의 html을 누르면 다음와 같이 변한다.
7주차 C언어 #define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int a; int b; while (1) { scanf("%d %d", &a, &b); if((a == 0) && (b == 0)) break; else if (b % a == 0)printf("factor\n"); else if (a % b == 0) printf("multiple\n"); else printf("neither\n"); } return 0;}1.두 수를 입력받는다.2.배수인지 약수인지 판별한다.3.출력한다.#define _CRT_SECURE_NO_WARNINGS #incl..
7주차 암호학 이산 로그 문제(Discrete Logarithm Problem)자연수 a,m, 정수 b에 대해 a^x≡b(modm)을 만족하는 정수 x를 구하는 문제이다 Diffie-Hellman 키 교환1976년 Whitfield Diffie와 Martin Hellman은 공개된 채널로 키를 교환할 수 있는 Diffie-Hellman 키 교환 절차를 만들어냈다. 예시를 들어 설명해보겠다. 키 교환에서 통신을 진행하는 가상의 두 인물을 Alice와 Bob이라고 한다. 둘 사이에서는 다음의 절차에 따라 교환이 이루어진다.  1. 키를 교환하고자 하는 Alice는 소수 p와 1≤g≤p−1을 만족하는 적당한 수 g를 정해 Bob에게 전송합니다. p는 보통 2^1024 이상의 큰 소수로 설정합니다. 2. 다시 Alice는 1..
6주차 웹해킹 Blog을 입력하여 위와 같이 띄운다. 을 입력하여 쿠키를 띄운다.  htmlspecialchars에 의해 공격이 불가능함을 알 수 있다. Change Secret해당 창에 을 입력해준다.을 secret에 입력하여 해당 화면을 띄운다.여기에서도 htmlspecialchars가 사용됨을 알 수 있다.
6주차_시스템 버퍼 버퍼(Buffer)는 일상에서 ‘완충 장치'라는 뜻으로 사용되며, 컴퓨터 과학에서는 ‘데이터가 목적지로 이동되기 전에 보관되는 임시 저장소’의 의미로 쓰다.  버퍼 오버플로우 버퍼가 넘치는 것을 의미한다. 버퍼는 제각기 크기를 가지고 있는데, int로 선언한 지역 변수는 4바이트의 크기를 갖고, 10개의 원소를 갖는 char배열은 10바이트의 크기를 갖다.   중요 데이터 변조버퍼 뒤에 중요한 데이터가 있다면, 해당 데이터가 변조됨으로써 문제가 발생할 수 있다. 데이터 유출 C언어에서 정상적인 문자열은 널바이트로 종결되며, 표준 문자열 출력 함수들은 널바이트를 문자열의 끝으로 인식한다. 만약 어떤 버퍼에 오버플로우를 발생시켜서 다른 버퍼와의 사이에 있는 널바이트를 모두 제거하면, 해당 버퍼를 출력시..
6주차 암호 RSA 암호 알고리즘두 개의 키가 사용된다. 하나는 공개키이고 다른 하나는 비밀키이다.공개키(Public key): 모든 사용자에게 공개되며, 평문을 암호화할 때 사용비밀키(Private key): 타인에게 노출되어서는 안 되며, 공개키로 암호화된 암호문을 복호화할 때 사용됩니다. 키 생성 공개키와 비밀키를 생성하는 키 생성 과정이 필요하다.  RSA는 소인수분해를 어렵게 만들기 위해 복잡한 연산을 거쳐 키를 생성해야 한다.  1. 먼저 서로 다른 두 소수 p와 q를 선택한다. 일반적으로 1024비트 이상에서 비트 길이가 같은 수로 생성한다. 그 뒤, p와 q를 곱하여 n을 구하고, ϕ(n)을 계산합니다.2. ϕ(n)보다 작은 수 중 ϕ(n)과 서로소인 e를 선택하고, d≡e^(−1)modϕ(n)인 d를..
5주차_시스템 SYSV리눅스는 SYSTEM V(SYSV) Application Binary Interface(ABI)를 기반으로 만들어졌다.SYSV에서 정의한 함수 호출 규약은 3가지 특징을 가진다. 6개의 인자를 RDI, RSI, RDX, RCX, R8, R9에 순서대로 저장하여 전달합니다. 더 많은 인자를 사용해야 할 때는 스택을 추가로 이용한다.Caller에서 인자 전달에 사용된 스택을 정리한다.함수의 반환 값은 RAX로 전달한다.// Name: sysv.c// Compile: gcc -fno-asynchronous-unwind-tables -masm=intel \// -fno-omit-frame-pointer -S sysv.c -fno-pic -O0#define ull unsigned long ..
6주차 C언어 추가 과제 8월 5일 회의 불참 과제#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int arr[3] = { 0 }; int blank[2] = { 0 }; int a, b, c; scanf("%d %d %d", &a, &b, &c); if ((a > b) && (a > c)) { arr[2] = a; if (b > c) { arr[1] = b; arr[0] = c; } else { arr[1] = c; arr[0] = b; ..