2024/07 52

Type Error

타입을 반환하거나.. 변환하거나... 한 타입에서 다른 타입으로 값이 옮겨지는 과정의 논리적 취약점이다.예를 들면)int로 값을 입력받아 특정 함수에 넘겨준다.해당 함수에서 어떠한 검사 과정을 거쳐, int형으로 값을 반환한다.반환 받는 변수가 unsigned short형이다.위 과정에서 int -> unsigned short로 바뀌면서 소실이 일어난다.해당하는 CTF 문제 하나를 예시로 마무리하겠다.#include #include #include #define MAX_ID_LEN 10#define USERS_COUNT 5char account_id[USERS_COUNT][MAX_ID_LEN] = { "james", "sarah", "gildong", "asdf1234", "admin" };int get..

Hacking/Pwnable 2024.07.18

Deque STL

덱 STL 사용법.사용 방법헤더 파일#include 선언deque variable_name;type에 원하는 타입 적고, 변수명을 적어주면 된다.메소드D는 deque 변수라 가정한다.D.push_front(data)D.push_back(data)D.size()D.empty()D.pop_front()D.pop_back()D.front()D.back()D.begin()D.end()D.clear()D.insert(address) // ex) D.insert(D.begin() + 1)D.erase(address) // ex) D.erase(D.begin() + 3)순회for(auto x : D) cout 특징앞, 뒤에서 삽입 및 삭제가 가능하다.맨 앞, 맨 뒤에서의 작업은 O(1)이다.원래는 안되지만 STL D..

Foremost tool

위키문서 : https://en.wikipedia.org/wiki/Foremost_(software)참고자료 : https://m.blog.naver.com/koromoon/220553895618 포렌식 CTF 문제에서 사용할 수 있는 툴입니다.어떤 파일 안의 다른 파일이 숨겨져 있을 경우, 추출해줍니다.예를 들면ELF 시그니쳐로 시작하는 파일 속에, PNG 시그니처, JPEG 시그니처 등이 보여서 안에 다른 파일이 숨겨진 듯 할 때파일 용량이 뭔가 이상하게 클 때(파일의 형식에 비해)등, 이 툴을 이용해 문제를 해결할 수 있습니다. 사용 방법은 foremost -h를 치면 쭈루룩 나오긴 합니다.$ foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t ] [-s ] [-k ]     ..

Hacking/MISC 2024.07.17

Queue STL

리스트, 스택에 이어 큐도 STL에 당연히 있다.사용 방법헤더 파일#include 선언queue variable_name;type에 원하는 타입(int, char ...)을 적어주면 된다.메소드Q는 queue 변수라 가정한다.Q.push(data)Q.size()Q.empty()Q.pop()Q.front()Q.back()주의할 점: front와 back, pop은 비어있는데 사용하면 런타임 에러가 발생한다.특징back으로 삽입, front에서 제거가 이루어지고 시간복잡도는 O(1)이다. (FIFO)인덱스로 참조 불가능하다.

Stack STL

C++ STL에 구현되어 있는 stack ADT를 사용하는 방법을 알아보자.사용 방법선언stack variable_name;메소드stack S;S.push(10);S.push(11);...S.size() // return size of stackS.empty() // if stack is empty, return true (else false)S.pop() // delete top data at stackS.top() // just return top of stackS는 스택 변수, int 형 이라고 가정한다.S.push(data)S.size()S.empty()S.pop()S.top()주의할 점: pop과 top은 stack이 비어 있을 때 사용하면 런타임 에러!주의할 점2: pop은 삭제만 하고 값을 ..

시작해요 언리얼 2022 무작정 따라하기 - 3주차

KEYWORDS:블루프린트, 액터 움직이기, 뷰포트 창, 이벤트 그래프 창, 이벤트 그래프, 이동 그래프, 딜레이, 인스턴스 편집, 노드, 변수 승격, Set Actor Location, Get Actor Location, Arrow, Float 트랙, 루프블루프린트 클래스 생성하기여러개의 스태틱 매시(액터)들이 합쳐져서 하나의 역할을 하는 경우가 있다.매번 합치는 작업을 하기는 번거로운데, 하나의 역할로 합쳐서 만들어 놓을 수가 있다.점프맵의 골 지점(도착하면 클리어)을 만드는 예시로 알아보자.골 지점은 4개의 액터들로 구성된다. 그림을 보면 알 수 있다.평평한 바닥(하늘색)하트화살표트리거 볼륨(투명 사각형)이 4개를 묶어 하나의 블루프린트 클래스로 만들어 놓으면, 매번 도착지점을 만들 때 저 4개를 ..

조건부 이산 확률 변수, 확률 질량 함수, 기댓값

DRV의 조건부 성질에 대해 알아보겠다.조건부 확률 질량 함수(Conditional PMF)다음 두 조건이 만족하면,X is DRVEvent A with P(A) > 0조건부 확률 질량 함수임이 자명하다.$$p_{X|A}(x) = \frac{P({X=x}\cap A)}{P(A)}$$그렇다면 조건부 확률 질량 함수(이하 Conditional PMF)도 정확하게 PMF인지 확인을 해보자.Is Conditional PMF legitimate?P(X=x)들은 서로 partition of $\Omega$ 이다.혹시 집합의 분할이 가지는 의미를 까먹었을까봐 적어두겠다. 서로 disjoint하다전부 합치면 표본 공간($\Omega$)이다.=> 위 두개가 의미하는건 또, 전 확률 정리(total probability ..

정규 표현식의 활용

정규 표현식. 흔히 아는 그거다.C언어에서의 예로 들자면scanf("%[^\n]s", ..); // 공백을 포함하여 입력받기 스킬(by 정규표현식)// 저 의미는 줄바꿈(newLine)이 들어오기 전까지 입력받으라는 것이고// 그 전의 모든 것은 다 받는다는 말이다(공백도 받는다, 원랜 scanf는 공백 안받음)참고하면 좋을듯:https://velog.io/@purplew/Javascript-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9Dhttps://regexper.com/ (정규식 만든거 확인할 수 있는 사이트)정규식(Regular Expression)형태: /pattern/modifiersmodifiers(수정자)i : 대소문자 구분 하지 않음g : 조건에 맞는 문..

RTL and ROP

RTL(Return To Library)NX로 인해 셸코드를 사용할 수 없어졌다.그래서 아직 실행 권한이 있는코드 영역코드가 참조하는 라이브러리의 코드 영역을 이용하여 NX를 우회하여 공격하는 기법이 등장했다.위 두 영역에 공격자가 필요한 코드가 존재하면 -> 그 코드를 가져다가 사용.여기서 라이브러리를 사용하는 공격이 바로 "Return To Library(RTL)" 이다.이 기법에서 필요한 것들을 적어보면,해당 코드의 메모리 주소해당 코드의 호출 주소(PLT 주소 등)ret으로 끝나는 어셈블리 코드 조각.구하는 방법:ROPgadget 명령어 사용(정규 표현식으로 필터링 할 수 있음) 참고:system 함수로 rip가 이동할 때, 스택은 반드시 0x10단위로 정렬되어 있어야 한다는 것입니다. 이는 sy..

Hacking/Pwnable 2024.07.14

이벤트 핸들러 부착(Attaching an Event Handler)

이벤트 핸들러를 부착(?)하는 방법은 두 가지가 있다.이벤트 핸들러 부착하기Obtrusive Event Handlers (좋지 않은 방식)HTML 문서 내에 태그 안에 구체적으로 다는거.OK...function okayClick() {...}Attaching an Event Handler in JSJS 파일 안에서 붙이기.이러면 HTML 페이지에는 event handler가 하나도 안보일 수가 있음.그런데 그냥 달 수가 없음.var button1 = document.getElementById("ok"); // it's return null...button1.onclick = okayClick; 왜냐하면, 보통 js파일은 head다가 넣는게 정석이기 때문.헤드에서 js파일을 읽으면 아직 body가 로드되기..