일단 leviathan 같은경우 힌트가 주어지지 않는다! Data for the levels can be found in the homedirectories. You can look at /etc/leviathan_pass for the various level passwords. /etc/leviathan_pass..
Level30 -> Level31 ssh://bandit30-git@localhost/home/bandit30-git/repo에 git 저장소가 있습니다. bandit30-git 사용자의 비밀번호는 bandit30 사용자의 비밀번호와 동일합니다. 저장소를 복제하고 다음 레벨..
Level28 -> Level29 ssh://bandit28-git@localhost/home/bandit28-git/repo에 git 저장소가 있습니다. bandit28-git 사용자의 비밀번호는 bandit28 사용자의 비밀번호와 동일합니다. 저장소를 복제하고 다음 레벨..
Level26 -> Level27 그 전 레벨에서 수고했다 한다. 이제 bandit25에서 bandit26의 shell을 땄는데, 바로 bandit27을 그상태에서 얻어 보라는 뜻이다. 1.ls 를 통해 살펴보니 예전에 풀었던 bandit19 문제와 똑같..
Level24 -> Level25 데몬은 포트 30002에서 수신 대기 중이며 bandit24에 대한 암호와 비밀 숫자 4자리 핀코드가 제공된 경우 bandit25에 대한 암호를 제공합니다. 무차별 대입(brute-forcing)이라고 하는 10000..
Level23 -> Level24 시간 기반 작업 스케줄러인 cron에서 일정 간격으로 프로그램이 자동으로 실행됩니다. /etc/cron.d/에서 구성을 찾고 어떤 명령이 실행되고 있는지 확인하십시오. 참고: 이 수준에서는 자신의..
https://www.youtube.com/watch?v=i5dlfOonhLI 노말틱 님이 주최하시는 ! 해킹랜드에 참가하게 되었다. 티켓 비밀번호는 stage1, stage2, stage3 를 깨고 나면, 나온다!! 일단 bandit 문제를 클리어한 나한테는 비..
Level21 -> Level22 시간 기반 작업 스케줄러인 cron에서 일정 간격으로 프로그램이 자동으로 실행됩니다. /etc/cron.d/에서 구성을 찾고 어떤 명령이 실행되고 있는지 확인하십시오. 1.일단 /etc/cron.d/ 에 접..
Level19 -> Level20 다음 레벨에 액세스하려면 홈 디렉토리에서 setuid 바이너리를 사용해야 합니다. 인수 없이 실행하여 사용법을 알아보세요. 이 레벨의 비밀번호는 setuid 바이너리를 사용한 후 일반적인 위치..
Level17 -> Level18 홈디렉토리에는 2개의 파일이 있습니다: passwords.old 및 passwords.new. 다음 수준의 암호는 passwords.new에 있으며 password.old와 passwords.new 사이에서 변경된 유일한 줄입니다. 참고..
Level15 -> Level16 SSL 암호화를 사용하여 localhost의 포트 30001에 현재 수준의 암호를 제출하여 다음 수준의 암호를 검색할 수 있습니다. 유용한 참고 사항: "HEARTBEATING" 및 "Read R BLOCK"이 필요하십니..
Level13 -> Level14 다음 레벨의 비밀번호는 /etc/bandit_pass/bandit14에 저장되며 bandit14 사용자만 읽을 수 있습니다. 이 수준의 경우 다음 암호를 얻지 못하지만 다음 수준에 로그인하는 데 사용할 수 있는..
Level11 -> Level12 다음 레벨의 비밀번호는 data.txt 파일에 저장됩니다. 여기서 모든 소문자(a-z) 및 대문자(A-Z)가 13자리 회전되었습니다. 위 조건을 가지고 비밀번호를 알아내 보자! 1. ls 명령어를 살펴보..
Level9 -> Level10 다음 레벨의 비밀번호는 몇 개의 '=' 문자가 앞에 오는 사람이 읽을 수 있는 몇 가지 문자열 중 하나로 data.txt 파일에 저장됩니다. 위 조건을 해결 해보자! 1. 이 문제를 해결하기 위해선 저..
Level7 -> Level8 다음 비밀번호는 백만번째라는 단어 옆에있는 data 파일에 저장되어 있다 한다. 찾아보자! 1.일단 millionth라는 문자열을 출력하기 위해선 grep과 파이프라인 명령어가 필요한데, 이 명령어들..
Level5 -> Level6 이번에는 inhere 디렉토리 안에, 여러 파일들이 있는데 그중에 사람이 읽을 수 있고, 1033바이트 크기 내 이며, 실행 불가능한 조건을 모두 만족시키는 파일 안에 비밀번호가 숨겨있다! 해결 해..
Level 3 -> Level4 비밀번호는 inhere 디렉토리 안에 있는 hidden 파일에 있다. 1. ls 명령어를 이용해 inhere 디렉토리가 있는지 확인한다. 2. cd 명령어를 이용해 inhere 디렉토리에 접근한다. 3. ls -a 를..
세팅을 전 시간에 끝마쳤으니, Level1 부터 풀어나가 보자. 리눅스에서 복사, 붙여넣기는 shift + ins를 사용하면 된다. Level 0 -> Level1 Home Directory에 있는 readme 파일 안에 비밀번호 알아내기이다. 1...
https://overthewire.org/wargames/ 에 접속하면 이런 화면이 나타난다. 우리는 Bandit 에 접속해 해결하려 한다. 이 Bandit을 풀기 위해선 터미널에 접속해야 하는데, putty라는 프로그램을 이용할 예정이다...
IP 주소 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다. 만약 서버가 들어가지 않으면 IP가 안전하지 않다고 한다. 네트워크에 연결된 장치가 라우터이든 일반 서버..
전 게시글과 같이 Jupyter 노트북에서 New 버튼을 눌러, Python 3을 클릭하게 되면, 위와 같이 Untitled 라는 문서가 생성 된다. 1. Pandas 사용법 import pandas as pd #pandas의 Dataframe을 생성한다. names =..
1. google에 아나콘다를 친후 버전에 맞는 아나콘다를 다운 받아 준다. 2.다운 받게 되면, 주피터 노트북과 함께 스파이더, 프롬프트 등이 깔려있다. 3.프롬프트를 열고 가상환경을 만들어 준다. conda create -..
심층 학습 또는 딥 러닝(deep structured learning, deep learning 또는 hierarchical learning) 여러 비선형 변환기법의 조합을 통해 높은 수준의 추상화(abstractions, 다량의 데이터나 복잡한 자료들 속에서..
딥러닝 ⊂ 머신러닝 ⊂ 인공지능 포함관계로 한 번에 설명될 수 있다. 즉, 인공지능이 가장 넓은 개념이고 그 다음으로 머신러닝 딥러닝 순이다. 인공지능(Artificial Intelligence) - 인공지능은 학습, 추론 능..
이번 포스팅에서는 보안문자를 칠 때까지 딜레이가 된후 보안문자가 쳐지면, 바로 좌석 선택 -> 카카오 페이 결제 수단까지 나오게끔 하는 조금 더 디테일한 매크로를 만들어 볼 예정이다. 앞서 포스터와 같이 악..
악용할 예시가 있기 때문에 코드 몇줄은 넣지 않고 올린다. from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException from..
소켓 소켓(Socket)은 전구나 형광등을 고정하는 도구이자 전기를 공급하기 위한 투입구 역할을 수행한다. 컴퓨터 네트워크에서 소켓은 통신을 위한 ‘종착지’와도 같은 역할을 수행합니다. 두 개의 컴퓨터가 통신..
오늘 할 실습은 네이버 뉴스에서 연예 주요 뉴스와 IT/보안 주요 뉴스를 스크래핑 해오도록 하겠다. 자세한 설명은 앞 포스터에 나와 있으니, 참고 바란다. 코드 예시 from selenium import webdriver from seleni..
전 차시에 대해 굉장히 자세히 다루어 봤으므로 간략한 소스코드로 설명하겠다. 우리의 목표는 네이버 웹툰에 접속하여 인기급상승 웹툰의 인기순 목록을 불러오는 것이다. 코드 예시 from selenium import webdr..
일단 네이버 항공권 웹 자동화를 하기 위해선 Chromedriver 와 selenium 설치가 필요하다. VS code를 통해 진행 하도록 하겠다. 목표 네이버 항공권에서 내가 가는 날짜, 오는 날짜, 가는곳을 선택하고 최저가 부..
예외 예외(Exception)란 프로그램이 동작하는 과정에서 발생하는 예상치 못한 오류(Error) 의미한다. C++에서는 발생할 가능성이 높은 오류에 대해서 예외 처리(Exception Handling)을 할 수 있도록 해준다. 예외..
C++ STL 연관 컨테이너 1) STL 연관 컨테이너 라이브러리는 매우 활용도가 높은 자료구조를 제공한다. 2) 연관 컨테이너는 키(Key)와 값(Value) 형태의 관련 있는 데이터를 쌍으로 저장하는 컨테이너다. 3) 가..
C++ STL 시퀀스 컨테이너 1) STL 시퀀스 컨테이너 라이브러리는 매우 활용도가 높은 자료구조를 제공한다. 2) 기존의 C언어를 이용하면 구현하기 까다로웠던 다양한 자료구조를 손쉽게 이용할 수 있다. 3) 가장..
C++ STL 컨테이너 어댑터 1) STL 컨테이너 어댑터 라이브러리는 매우 활용도가 높은 자료구조를 제공한다. 2) 기존의 C언어를 이용하면 구현하기 까다로웠던 다양한 자료구조를 손쉽게 이용할 수 있다. - Stac..
스마트 포인터 C++의 스마트 포인터(Smart Pointer)는 프로그래머의 실수로 메모리 누수(Memory Leak)을 방어하기 위한 수 단으로, 포인터처럼 동작하는 클래스 템플릿(Class Template)이다. 기본적으..
일반화 C++은 일반화 프로그래밍(Generic Programming)이 가능한 언어이다. C++에서는 템플릿(Template)을 이용해서 일반화 프로그래밍을 사용할 수 있다. 템플릿 (template 명령어) 템플릿(Template)이란 매개변..
가상 함수 가상 함수(Virtual Function)란 자식 클래스에서 재정의할 수 있는 멤버 함수다. virtual 키워드를 이용해 가상함수를 선언할 수 있으며 자식 클래스에서 가상 함수를 재정의하면 재정의된 멤버 함수..
다형성 칼 객체, 대포 객체, 총 객체를 attack() 분류한 구성에서는 무기 객체에서 attack() 함수를 실질적으로 구현할 필요가 없다. 이럴 때 무기 객체를 추상 클래스(Abstract Class)로 구현하면 효과적으로 설..
정적 멤버 정적 멤버(Static Member)란 클래스에는 포함 되어 있는 멤버이지만 모든 객체가 공유하는 멤버이다. 정적으로 선언된 멤버는 메모리 상에 오직 하나만 할당되어 관리된다. 정적 멤버를 public으로 선..
캡슐화 기법중 하나인 프렌드에 대해 알아보자. 프렌드 C++에서는 기본적으로 멤버 변수에 접근하기 위해서 public 멤버 함수를 이용해야 한다. 다만 특정한 객체의 멤버 함수가 아닌 경우에도 private 멤버에 접..
C++에서는 동일한 이름의 멤버 함수를 다양한 방식으로 활용하기 위해 오버로딩을 사용할 수 있다. 코드 예시 #include #include using namespace std; class Person { private: string name; public: Person() {..
상속 -상속(Inheritance)은 객체 지향 프로그래밍의 주요한 특성 중 하나다. -현실 세계에서의 상속의 개념을 프로그래밍으로 그대로 가져와 사용할 수 있다. -이를 통해 프로그램의 논리적 구조를 계층적으로 구..
C++의 생성자 -C++에서는 생성자(Constructor)를 이용해 객체를 생성함과 동시에 멤버 변수를 초기화할 수 있다. -생성자는 특별한 메소드로, 클래스의 이름과 동일한 이름의 메소드로 구현된다. -생성자는 반환..
구조체와 클래스의 차이점 -일반적으로 C++의 클래스(Class)는 구조체보다 더 효과적인 문법이다. -구조체와 클래스는 거의 흡사하게 동작하지만, 클래스에서는 내부적으로 ‘함수’ 등을 포함할 수 있다. -또한..
C++에서의 Hello World 는? 코드예시 #include using namespace std; int main(void) { cout << "Hello World" << endl; system("pause"); return 0; } 가장 기본적인 뼈대를 이루는 위 코드이다. C++의 iostream..
라빈 카프 문자열 매칭 -아스키 코드 기반의 해시함수(Hash Function)을 이용해 특정한 문자열에 대한 해시 값을 구한다. -'연속적인 문자열이 이어지는' 상황이므로 해시함수의 동작에 있어서 연산 속도가 O(1)이..
단순 비교 문자열 매칭 1.단순 비교 문자열 매칭 알고리즘은 두 문자열을 처음부터 끝까지 계속 비교하는 알고리즘입니다. 2.단순 비교 문자열 매칭 알고리즘은 O(NM)의 시간 복잡도를 가집니다. ex) ABCDEFG 에서..
인덱스 트리 트리 구조로 구간 합 구하기 -세그먼트 트리는 구현하는 과정이 복잡하고 어렵다는 점에서 구간 합을 더 쉽게 구할 방법이 필요하다. -인덱스 트리는 구현이 매우 간단하다. -인덱스 트리를 활용해 구..
1.설치 위 명령어들을 우분투에 설치 2.실행 $ python3 Python 3.6.9 (default, Apr 18 2020, 01:56:04) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> fro..
ELF(Executable and Linkable Format) : 실행 파일, 목적 파일, 공유 라이브러리 그리고 코어 덤프를 위한 표준 파일 형식이다. 1999년 86open 프로젝트에 의해 x86 기반 유닉스, 유닉스 계열 시스템들의 표..
어셈블리어에서 { } -> push 와 pop 으로 처리된다. return 0 같은경우는 ex) xor eax, eax 처리된다. 파이프라인 : CPU와 같은 디지털 집적회로의 속도를 향상시키기 위한 회로 내지는 회로설계 기법을 지칭한..
미디어쿼리 소개 -미디어퀴리(Media Queries)는 각 미디어 매체에 따라 다른 스타일(css style)을 적용할 수 있게 만드는 것이다. -미디어 매체는 모니터와 같은 스크린 매체, 프린트, 스크린 리더기와 같은 것들..
display 속성 요소의 렌더링 박스 유형을 결정하는 속성이다. 기본 값 : - (요소마다 다름) display: value; < 속성 값 > none 요소가 렌더링 되지 않음 inline inline level 요소처럼 렌더링 block block l..
VMware 을 이용해 우분투 18.04 버전을 깔아놨다. gdb 사용법은 간단하다. git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh 이와 같은 코드를 우분투에 쳐주면 다운이 완료 된다. 그 뒤에 gdb를..
end로 점프하면 프로그램이 종료된다고 가정하자. 프로그램이 종료됐을 때, 0x400000 부터 0x400019까지의 데이터를 대응되는 아스키 문자로 변환하면 어느 문자열이 나오는가? [Register] rcx = 0 rdx = 0 rsi =..
타이포그래피의 구조 모든 폰트는 em박스를 가지고 있고 위 그림과 같은 구조로 이루어져 있습니다. •em 폰트의 전체 높이를 의미한다. •ex ( = x-height ) 해당 폰트의 영문 소문자 x의 높이를 의미한다. •Ba..
CSS Reference를 통해 확인 가능한 사항들은 다음과 같다. 정의 해당 속성이 어떤 변화를 일으키고 어떻게 동작하는지 파악할 수 있다. 기본 값 상속 여부 애니메이션 가능 여부 사용 가능한 CSS버전 문법 해당 속..
스택 -후입선출(LIFO, Last-In-First-Out) 자료구조 -스택포인터(SP, Stack Pointer)는 스택의 최상위(top) 원소를 가리키는 주소를 저장하는 레지스터 -8086은 스택 세그먼트 레지스터 SS와 스택 포인터 SP를 제..
프로그램 실행 흐름 제어 -IP(Instruction Pointer): 다음에 실행할 명령어의 (오프셋) 주소를 저장하는 레지스터 -IP의 값을 변경하여 프로그램의 흐름을 제어할 수 있다. -프로세서는 이런 프로그램 제어를 위한..
증가와 감소 -INC와 DEC 명령어는 레지스터 또는 메모리 피연산자의 값을 1씩 증가/감소 시킨다. -피연산자의 값을 1씩 변화시키지만, 캐리 플래그에는 영향을 미치지 않는다. -플래그: AF, OF, PF, SF, ZF INC..
음수와 양수 -컴퓨터에서 정수 데이터는 부호가 있는(signed) 경우와 부호가 없는(unsigned) 경우로 분류 된다. -부호가 없는 경우 모든 비트가 정수의 데이터 비트로 이용되지만, 부호가 있는 경우 최상위 비트(M..
프로그램 기본 구조 .MODEL SMALL -메모리 모델을 정의한다. Small의 경우 데이터 세그먼트와 코드 세그먼트가 각각 하나씩 존재하는데, 대부분의 실습용으로 충분하다. .DATA, .CODE -데이터 세그먼트와 코드 세..
컴퓨터의 데이터 표현 -오늘날 대부분의 컴퓨터는 내부적으로 이진수를 이용하여 데이터를 표현하고 저장한다. -이진 데이터를 사용하는 것이 디지털 회로로 구현하기 쉽고 효율적이기 때문이다. -이진수 한 자리..
가상 클래스(pseudo class) -가상 클래스는 미리 정의해놓은 상황에 적용되도록 약속된 보이지 않는 클래스이다. -우리가 직접 요소에 클래스를 선언하는 것은 아니고, 약속된 상황이 되면 브라우저 스스로 클래스..
CASCADING STALE SHEETS -HTML(마크업 언어)을 꾸며주는 언어 -html이 웹페이지의 정보를 표현한다면, CSS는 html을 보기 좋게 디자인 하는 역할 h1 {color: yellow; font-size:2em;} 선택자(selector) - "h1" 속..
메모리 모델 -작성되는 프로그램의 코드와 데이터의 크기를 나타내기 위해 사용되며, 사용자는 프로그램 코드와 데이터의 크기에 해당하는 메모리 모델을 어셈블러에게 알려줘야 한다. -어셈블러에게 세그먼트..
주소지정방식(addressing mode) -주소지정방식은 명령어의 피연산자를 지정하기 위한 방법들을 의미한다. 피연산자(Operand)는 크게 레지스터, 즉시 값, 메모리가 될 수있다. -8086은 레지스터, 즉시 값에 접근하..
레지스터 집합 범용 레지스터(General Purpose Register) -범용레지스터는 데이터를 임시로 저장하기 위해 주로 사용되며, 프로그래머가, 즉 소프트웨어적으로 임의로 접근 가능하다. 8086에는 16비트 범용 레지..
x86의 역사 8086 (1978) -16비트 프로세서: 16비트 레지스터와 16비트 데이터 버스 -20비트 주소 버스 : 1MB 주소 지정 가능 -한번에 하나의 프로그램을 실행하는 실제 모드(real mode)로 동작한다. 8088(1979) -8..
type="text" 주로 아이디, 이름, 주소, 전화번호 등 단순한 텍스트를 입력할 때 사용한다. placeholder 속성: 사용자가 입력하기 전 미리 화면에 노출하는 값으로, 입력하는 값의 양식을 표현할 수 있습니다. type..
제목(HEADING) Hello h1~h6 -> 숫자가 올라갈수록 글씨의 크기가 작아진다. 단락과 개행(PARAGRAPH,LINEBREAK) : 태그는 글의 단락을 나타낸다. :태그는 글의 줄바꿈을 생성한다. 텍스트 관련 태그들(B,I,U,S) :..
명령어의 구성 요소 1.연산코드와 피연산자 -연산코드(Operation Code,Opcode): 1.기계(CPU)가 수행할 동작을 나타내는 코드이다. 2.명령어에서 '어떤 연산'인지를 나타내는 부분이다. -피연산자(Operand):연산(..
중앙처리장치 CPU의 구성요소 1.레지스터 집합(Register Set) -메모리 또는 입출력 장치에서 불러온 값이나 프로세서의 연산 중간 결과값들을 저장하는 고속의 저장장치 -범용 레지스터(General Purpose Register)..
1. 논리 게이트 -전기적 준위에 따라 0과 1로 표현되는 디지털 신호를 처리하는 소자 -AND, OR, XOP, NOT 등의 논리 게이트 존재 2.조합 회로 -입력과 출력을 가진 논리 게이트의 집합 -가산기(adder), 디코더,..
스택 push val: val을 스택 최상단에 쌓음 연산 rsp -= 8 [rsp] = val ex) [Register] rsp = 0x7fffffffc400 [Stack] 0x7fffffffc400 | 0x0 <= rsp 0x7fffffffc408 | 0x0 [Code] push 0x31337 결과 [Register] rsp..
코드 어셈블리어 기계어 위와 같이 어셈블리어는 우리가 친 코드를 기계어로 치환해주는 역할을 수행한다. 어셈블리어는 명령어(Operation Code,Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성된다. 인텔x..
리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트(코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트) 로 구분한다. 운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 적절..
세그먼트 트리 선형적으로 그냥 구간 합을 구하는 것은 비효율적이다. 트리 구조를 활용해 구간합을 구하는 과정은 O(logN)의 시간복잡도를 가진다. 구간합트리는 부모에서부터 왼쪽 자식과 오른쪽자식에게 절반을..