그리디현재 상황에서 지금 당장 좋은 것만 고르는 방법,순간 가장 좋아보이는 것을 선택하며, 현재 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다. 구현머릿속에 있는 알고리즘을 소스코드로 구현하는 과정.모든 경우의 수를 주저 없이 다 계산 하거나, 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 등의 유형있다. DFS깊이 우선 탐색으로 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. 스택을 사용한다.const graph = { A: ["B", "C"], B: ["A", "D"], C: ["A", "E"], D: ["B", "F"], E: ["C","G"], F: ["D","H","I"], G: ["E","J","K"], H: ["F","L..
Buffer Overflow 데이터를 버퍼에 저장할 때 개발자가 의도한 크기를 넘어서 값을 넣는 방식이다. 그럼 버퍼 데이터가 초과하고, 초과된 데이터는 인접 메모리에 영향을 미친다. 이때 제어 관련 구문도 포함될 수 있다. 프로그램의 실행 흐름을 바꿔 특정 코드가 실행되게 한다. 해결 방안 입력 값의 타입 확인 입력 값의 길이 확인 용어 정리 Stack Frame 모든 함수가 호출될 때 할당되는 자신만의 스택 공간이다. SFP: Stack Frame Pointer 이전 함수의 Stack Frame Pointer를 저장하는 영역이다. Stack Pointer의 기준점이 된다. SP: Stack Pointer SFP를 기준점으로 해서, 상대 주소 offset 을 저장해 메모리에 접근한다. RET: Retu..
시스템 해킹 관리자 권한을 손 안에 넣는것이 목적이다. root 권한을 얻게 되면 서버를 쥐락펴락 할 수 있기 때문에, 시스템 해킹은 root 권한을 어떻게든 가져보겠다고 시도하는 것을 말한다. (궁극적인 목적임) 리모트 해킹 Remote Hacking 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 대, 아이디를 얻고자 시도하는 것을 말한다. 로컬 해킹 Local Hacking 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때, root 권한을 얻기 위해 시도하는 것을 말한다. 리모트 해킹을 성공해서 한 아이디를 손에 넣더라도, 별로 할 수 있는 것이 없기 때문에 바로 로컬 해킹을 하게 된다. 로컬 해킹의 원리 SetUID이다.일시적으로 자신의 ID를 변경하는 것 해킹 실습 로컬 해킹의 프로세스는 ..
SQL Injection 말그대로 sql을 삽입하는 취약점으로, 클라이언트 측에서 SQL 쿼리에 신뢰할 수 없는 데이터가 입력되었을 때, 데이터가 쿼리 로직의 일부로 해석되어 DB에서 실행될 때 발생한다. 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑 하지 못했을 경우에 발생한다. 거의 모든 데이터베이스 엔진은 유저 입력이 의도치 않은 동작을 하는 것을 방지하기 위해 escape 함수와 prepared statement를 제공한다. 문제를 확인해보자. 로그인 서비스에서 SQL Injection 취약점을 통해 FLAG를 획득하라고 한다. 한 번 접속해보자. 대문짝만하지 않게 Login 링크가 걸려있다. 클릭해보자. 우리는 여기에서 admin/admin을 테스트해보지 않을 수 있다. 가슴이 시키기..
CSRF 공격기법 크로스 사이트 요청 위조 공격 (CSRF: cross site request forgery attack) ▪XSS 와 유사하게 활용 가능 ▪XSS 와 차이 -> XSS는 특정 사이트를 신뢰하는 정책을 이용한 코드 삽입하여 사용자가 script 실행 -> CSRF는 특정 인증된 사용자의 요청을 신뢰하는 정책을 이용해 script 요청을 서버에서 실행시킴. 공격 경로 예시 공격자가 시스템 관리자에게 스크립트가 포함된 메일 전송 ▪인증된 세션을 가지고 있는 관리자가 메일을 읽음. ▪브라우저에서 인증된 세션과 함께 악성 스크립트가 실행. ▪관리자 세션 탈취 성공. 실습 입력받은 URL을 확인하는 봇이 구현된 서비스에서 CSRF 취약점을 이용한 FLAG 획득 문제이다. 문제는 여기있다. csrf..
개요현재 개발중인 서비스 ARIPAY는 교내 매점 상품권을 온라인으로 관리할 수 있는 플랫폼이다.지난번에 현재 잔액 조회 및 사용자 조회에 대한 개발을 마무리했고, 이제 포인트 충전 및 차감 기능을 구현해보려고 한다. 포인트 차감 & 충전흐름 쪼개기우선 포인트 차감은 사용자 및 관리자가, 포인트 충전은 관리자가 할 수 있어야한다. 사용자 학생증 바코드 찍기해당 하는 학생 정보를 포함해 충전 화면 이동금액 입력충전 버튼 클릭충전 완료그리고 차감은 아래와 같이 정리할 수 있었다.사용자 학생증 바코드 찍기해당 하는 학생 정보를 포함해 충전 화면 이동금액 입력결제 버튼 클릭충전 완료여기에 더해, 우리가 알아야할 데이터 정보를 정리할 수 있다.학생증 바코드포인트 내역충전/결제 여부금액고려해야할 부분여러 곳에서 상..
개요현재 진행중인 프로젝트 STAYMATE에서 아주 심각한 문제가 발견되었다.이전 글에서 카메라를 사용하기 위해 react-qr-reader라이브러리를 썼는데,호출이 과도하게 많아지는 문제점을 발견하게 되었다. 이러한 문제점을 발견하고 어떻게 해결을 할까 고민하기 시작했다.무한 호출을 막을 수 있는 방법우선 폭포처럼 내리는 무한 호출을 막을 수 있는 방법은, 유한 호출 될 수 있도록 만들면 된다. 연속으로 발생한 호출은 한 번만 인정해주거나 혹은 몇 초에 한 번씩 인식하도록 하거나. 이러한 방법을 해결할 수 있는 개념이 debounce와 throttle이다.Debounce와 throttle이란?Debounce연속적으로 발생한 이벤트를 하나로 처리하는 방식으로,주로 처음이나 마지막에 실행된 함수만 실행..
오늘은 텐서플로우를 활용해 선형회귀를 그려 시험 성적을 예측해볼 것이다. 1. 필요한 라이브러리 import하기import numpy as npimport matplotlib.pyplot as plt- 계산을 하는 라이브러리인 numpy와 데이터를 시각화해줄 matplotlib.pyplot 라이브러리를 import해준다.from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense- 모델 계층을 선형으로 쌓아줄 Sequential과 입력과 출력을 연결해주는 Dense를 import 합니다. 2. 데이터 파일 넣기x = np.array([[2,0],[4, 4],[ 6,2], [8,3] ])y = np.array(..
우리가 웹사이트에 가입할 때 보안을 위해 비밀번호를 생성한다. 비밀번호 입력란을 보면 조건이 나와있는 경우가 대부분이다. 가령 이렇게 말이다.비밀번호는 사용자의 정보를 보호하는 강력한 역할을 하기 때문에 단순하게 설정하지 않는 것이 매우 중요하다. 또 개발자는 사용자의 비밀번호를 암호화해서 저장하는 것도 굉장히 중요하다. 단순하게 설정했다간 당신의 정보가 다 털릴 수 있음을 기억해야한다. 당신의 비밀번호를 알아낼 수 있는 방법세 가지의 방법이있다. 우선 첫 번째 웹 프록시 툴을 사용하여 웹을 해킹할 수 있다.Web Proxy웹 프록시는 클라이언트에 설치하여 클라이언트의 통제를 받으므로 클라이언트가 웹 서버와 우베 브라우저 간에 전달되는 모든 HTTP 패킷을 웹 프록시로 확인 및 수정할 수 있다. Prox..
🚨 본 글은 필자의 정보보안 수업을 들을 후 정리한 내용입니다 :) 지난시간에 보았듯이 우리에게 얼마나 보안이 중요한지에 대해 이야기 해보았다. 그래서 오늘은 실제로 우리의 정보가 얼마나 인터넷에 널려(?)있는지 확인해보려고 한다. 그 전에 조금더 이해를 높이기 위한 몇 가지를 알아보자. 인터넷의 시작 1969년 미국 ARPA(Advanced Research Projects Agency)가 전 세계 주요 거점을 연결 하는 네트워크를 처음 만들고 이 네트워크를 알파넷이라 불렀다. 흔히 알파넷을 인터넷의 시작이라고 한다. 인터넷을 만든 목적은 정보를 편하게 고유하기 위함인데, 처음에는 대학 내 각 연구실 사이에 데이터를 전송하기 위해 시스템 간의 통신을 위한 프로토콜(통신에 대한 약속)을 만들어 사용하였다...