전체 글 130

[Stack Buffer Overflow] 데이터 변조와 유출

데이터 변조 #include #include #include int check_auth(char *password) { // 입력값(= password)을 buffer(= temp)에 담아 인증을 구현하는 함수 int auth = 0; char temp[16]; strncpy(temp, password, strlen(password)); // strncpy: 입력받은 password 중 어떤 길이 (여기서는 strlen(password))만큼을 temp에 복사함. // 이때, password의 길이가 temp의 크기보다 크면, // password의 일부는 스택에서 temp가 차지한 범위를 넘어감. // 이때, 그 넘친 위치에 만약 중요한 데이터가 있었다면, 이 데이터를 오염시켜버림. // 이 코드의 경..

IT/시스템 보안 2024.02.29

[System Hacking] shell_basic: orw를 통해 flag 파일 얻기

1. mycode 어셈블리 작성하기 이 문제에서 orw를 하기 위해서는 아래와 같은 syscall이 필요하다. 1. open("/home/shell_basic/flag_name_is_loooooong", RD_ONLY, NULL) 2. read(fd, buf, 0x30) 3. write(1, buf, 0x30) 따라서 위를 수행하는 어셈블리를 아래와 같이 작성했다. "/home/shell_basic/flag_name_is_loooooong"의 hex를 stack에 push하기 xor rax, rax push rax mov rax, 0x676e6f6f6f6f6f6f push rax mov rax, 0x6c5f73695f656d61 push rax mov rax, 0x6e5f67616c662f63 push ..

IT/Wargame 2024.02.29

[Shellcode] objdump을 이용한 byte code 추출

예시 어셈블리 코드 (shellcode.asm)의 byte code를 추출해보겠습니다. shellcode.asm section .text global _start _start: xor eax, eax push eax push 0x68732f2f push 0x6e69622f mov ebx, esp xor ecx, ecx xor edx, edx mov al, 0xb int 0x80 1. nasm 설치 sudo apt-get install nasm 2. shellcode.o 생성 nasm -f elf shellcode.asm 3. shellcode.o 파일을 어셈블리 언어로 변환하여 출력 objdump -d shellcode.o 4. shellcode.bin 생성 objcopy --dump-section .t..

IT/시스템 보안 2024.02.28

[Shellcode] execve

목적 execve 셸코드를 이용하면 임의의 프로그램을 실행할 수 있는데요, 만약 그것이 셸 프로그램이라면, 서버의 셸을 획득한 것이므로, 서버의 시스템을 제어함으로써 시스템 해킹을 성공한 것이 됩니다. ※ 셸(Shell): 운영체제에 명령을 내리기 위해 사용되는 사용자의 인터페이스 방법 1. execve 셸코드 작성 linux의 다양한 셸 프로그램 중 기본인 /bin/sh를 실행하는 execve 셸코드를 작성해보겠습니다. execve 셸코드는 스켈레톤 코드 (C언어로 작성됨) + 셸코드 (어셈블리) 의 구조입니다. 스켈레톤 코드 __asm__( ".global run_sh\n" // C에서 run_sh에 접근 가능하도록 global로 설정 "run_sh:\n" // 아래 어셈블리 코드는 예시이며, 각 l..

IT/시스템 보안 2024.02.28

[Shellcode] orw: open-read-write

목적 공격 대상이 되는 시스템의 파일을 유출해 내는 것입니다. 방법 아래는 linux 환경에서 진행한 것입니다. 0. 공격 대상이 될 파일 작성 실습을 위한 예시입니다. echo 'flag{this_is_open_read_write_shellcode!}' > /tmp/flag 1. orw 셸코드 작성 “/tmp/flag” 파일을 읽는 orw 셸코드를 작성해 보겠습니다. orw 셸코드는 스켈레톤 코드 (C언어로 작성됨) + 셸코드 (어셈블리) 의 구조입니다. 스켈레톤 코드 __asm__( ".global run_sh\n" // C에서 run_sh에 접근 가능하도록 global로 설정 "run_sh:\n" // 아래 어셈블리 코드는 예시이며, 각 line은 \n으로 구분되어야 함 "xor rdi, rdi\n..

IT/시스템 보안 2024.02.27

[Stack Frame] 프로시저 호출 시의 스택 프레임 살펴보기

코드가 쭉 진행되다가 특정 프로시저가 호출되면, 프로시저가 실행되고 나서 다시 원래의 실행 흐름으로 돌아옵니다. 예시 코드 0x400000: call func: push  &  jmp 0x400005: mov esi, eax...0x401000: push rbp 0x401001: mov rbp, rsp 0x401004: sub rsp, 0x30 0x401008: mov BYTE PTR[rsp], 0x3 ...0x401020: leave: mov rsp, rbp  &  pop rbp 0x401021: ret: pop rip  &  jmp rip   빠르게 보는 전 과정의 메모리 변화  상세한 작동 1. 프로시저 호출2. function prologue: 기존 상태의 기록, 새로운 stack frame의 마..

IT/시스템 보안 2024.02.20

[KU Friend Matcher] 프로젝트 개요: 고려대학교 학생 친구 찾기 플랫폼

✅ 프로젝트 개요고려대학교 학생들이 자신을 다양한 해시태그로써 표현하고, 다른 가입자들을 해시태그를 통해 필터링하여, 자신에게 맞는 친구를 찾을 수 있는 웹서비스 ✅ demo ▶ 메인 페이지자신의 Bio(자기소개)와 Hashtags 설정을 완료한 상태.(찾고자 하는 친구의 특성 Hashtags 설정도 완료되었음)   ▶ 친구 찾기 페이지특정 친구를 Add한 상태.   ▶ 친구 목록해당 친구가 추가된 상태.  ✅ 구현된 기능 ▶ 로그인/로그아웃, 회원가입로그인을 시도하면, 사용자의 비밀번호는 여러 조건들을 만족해야 로그인에 성공한다. - including a special character, lowercase, and uppercase letter, etc. And it is stored in the da..

IT/프로젝트 2024.02.19

[Docker] multi-container application: Docker compose

이전 글 👇 2024.02.07 - [IT/DevOps] - [Docker] Database 유지하기: 2. Bind mount [Docker] Database 유지하기: 2. Bind mount이전 글 👇 2024.02.06 - [IT/DevOps] - [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공intoky.tistory.com Docker Compose 대부분의 Application들은 Database를 필요로 하고, Ap..

IT/DevOps 2024.02.07

[Docker] Database 유지하기: 2. Bind mount

이전 글 👇 2024.02.06 - [IT/DevOps] - [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공유하기: Docker registry, Docker Hub [Docker] Application 공유하기: Docker registry, Docker Hub 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Doc intoky.tistory.com Bind mou..

IT/DevOps 2024.02.07

[Docker] Container의 filesystem, Database 유지하기: 1. Volume mount

이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공유하기: Docker registry, Docker Hub [Docker] Application 공유하기: Docker registry, Docker Hub 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Docker] Application 업데이트하기 이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an applicat intoky.tistory.com Container의 filesyste..

IT/DevOps 2024.02.06

[Docker] Application 공유하기: Docker registry, Docker Hub

이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Docker] Application 업데이트하기 이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an application Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 intoky.tistory.com Share the application ✅ 큰 그림 ✅Docker Hub에서 새 repository 만들기 repository 이름은 getting-st..

IT/DevOps 2024.02.05

[Docker] Application 업데이트하기

이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an application Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 분리할 수 있게 해줍니다. 따라서 이 Application의 배포가 더 용이해집니다. ✅아주 큰 구조 ✅그 중, Docker intoky.tistory.com Update the application 이미 어떤 App을 containerize한 상황해서, 이 App의 소스코드를 수정해서 다시 containerize하는 방법을 알아보겠습니다. ✅ ..

IT/DevOps 2024.02.05

[Docker] Overview, Application containerize하기

Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 분리할 수 있게 해줍니다. 따라서 이 Application의 배포가 더 용이해집니다. ✅아주 큰 구조 ✅그 중, Docker File & Docker Image & Docker Container의 관계 Docker Container 한 컴퓨터 내에서 여러 서비스를 진행하게 되었을 때, 각 서비스마다 요구하는 프로그램의 버전이 다를 수 있습니다. 따라서, 각 서비스마다 요구하는 특정 버전의 프로그램들끼리만 이 Container에 넣어둔 것입니다. Docker Image 특정 서비스가 요구하는 환경을 기록해두기 위해, linux 컴퓨터 상에서 특정 상태를 캡처하여 박제해놓은..

IT/DevOps 2024.02.04

[Node.js와 Session] Session을 이용한 인증 구현 (생활코딩 강의 기반)

✅ 이 실습을 통해 우리가 만드려는 것은 Session 방식을 이용해 로그인과 회원가입 등 인증 기능이 있는 웹사이트입니다. 사용자가 브라우저를 통해 서버에 접속하면서, 브라우저는 쿠키를 서버로 전송한다. 서버 컴퓨터에는 이러한 쿠키들이 session으로서 저장되고, 사용자에게는 단지 식별자 (= Session ID) 쿠키만이 저장된다. Q. 왜 Cookie가 아니라 Session을 사용하나? A. Cookie를 통한 인증은, 가능은 하지만, 보안 상의 문제가 크다. (클라이언트 쪽에 ID와 PW 쿠키가 있으므로) ✅ 디렉토리 구성과 주요 코드 설명 // 주석은 크게 나뉘어진 단계이고, //// 주석은 해당 코드에 대한 자세한 설명입니다. authFunctions.js module.exports = { ..

IT/웹 2024.02.01

[Node.js와 Cookie] Cookie의 생성, 읽기, 활용 (생활코딩 강의 기반)

요청과 응답으로만 의사소통했던 웹은 쿠키의 등장으로써 이전의 통신 내용을 기억할 수 있게 되었고, 이 덕분에 개인화나 인증 등이 가능해졌습니다. 이 글에서는 쿠키를 생성하는 법, 읽는 법, 그리고 쿠키가 실제로 어떻게 활용되는지를 공부하도록 하겠습니다. ✅ 실습 파일과 코드 설명 // 주석은 크게 나뉘어진 단계이고, //// 주석은 해당 코드에 대한 자세한 설명입니다. var http = require('http'); var cookie = require('cookie'); var count = 0; //// 단지 확인용... 아래의 createServer가 몇회 째 실행되는건지 체크 http.createServer(function(request, response){ count += 1; console...

IT/웹 2024.01.28

[Node.js를 통한 동적 웹사이트 구현 <2>] 사용자도 생성/업데이트/삭제가 가능해졌다..!! with Express (생활코딩 강의 기반)

지난 글 ([Node.js를 통한 동적 웹사이트 구현 ] 중복되는 부분을 template으로! (생활코딩 강의 기반))에서는 동적 웹사이트 구현을 시작해봤었습니다. (아직 사용자의 참여는 불가능) 👇 [Node.js를 통한 동적 웹사이트 구현 ] 중복되는 부분을 template으로! (생활코딩 강의 기반) :: kyagile (tistory.com) ✅ 이 실습을 통해 우리가 만드려는 웹사이트는 이전 글에서 구현한 웹사이트 위에 추가적으로, 서버 운영자가 아닌 일반 사용자도 컨텐츠(가 담긴 웹페이지)의 생성, 업데이트, 삭제가 가능하게끔 합니다. 다만 이전 글에서와 달리 express를 활용합니다. ✅ 디렉토리 구성하기 아래와 같이 디렉토리를 구성하면 됩니다. ✅ main.js, index.js, top..

IT/웹 2024.01.24

[Node.js를 통한 동적 웹사이트 구현 <1>] 중복되는 부분을 template으로! (생활코딩 강의 기반)

지난 글 ([웹서버/웹사이트, 웹클라이언트 실습] with HTML, Disqus, Tawk.to (생활코딩 강의 기반))에서는정적 웹사이트를 구현해봤었습니다. 👇 [웹서버/웹사이트, 웹클라이언트 실습] with HTML, Disqus, Tawk.to (생활코딩 강의 기반) :: kyagile (tistory.com) ✅ 정적 웹사이트의 한계 수동적, 반복적 정적 웹사이트에서는 각 페이지의 구현을 위해서 각각의 html 파일이 필요하였고, 이 방식에서는, 페이지들끼리 겹치고 반복되는 부분이 있더라도, 하나로 묶지 못했습니다. 따라서, 새로 넣을 페이지가 이전 페이지들과 유사하더라도, 여전히 처음부터 끝까지 html 파일을 다시 작성해야 했고, 혹여 어느 부분을 조금이라도 수정하고 싶다면, 모든 html의..

IT/웹 2024.01.19

[웹서버/웹사이트, 웹클라이언트 실습] with HTML, Disqus, Tawk.to (생활코딩 강의 기반)

이 글은 생활코딩의 WEB1 - HTML & Internet 강의 내용을 제 나름의 구조로 재구성한 것이며, 사용하는 에디터는 VSCode입니다. 1. 인터넷의 기본 구조: 서버와 클라이언트 인터넷이라는 것이 동작하기 위해서는, 최소한 서버 1대와 클라이언트 1대가 필요합니다. 서버 컴퓨터에는 웹서버 프로그램 (eg. Apache, Nginx, ...)이, 클라이언트 컴퓨터에는 웹브라우저 프로그램 (eg. Chrome, Edge, Safari, ...)이 설치돼 있어야 합니다. 서버 컴퓨터에는 어떤 주소 (여기서는 info.cern.ch라 하겠습니다.)가 부여되어 있고, 컴퓨터 어딘가에 index.html이라는 파일이 저장돼 있습니다. 이런 상황에서 우리는 "인터넷"을 이용해, 클라이언트 컴퓨터에서도 서..

IT/웹 2024.01.17

[Internet layer (2) - Routing Protocols: IGP, EGP, Link State, Distance Vector, Path Vector] in TCP/IP 4 layer

Routing Protocols ※ Static VS. Dynamic Routing ▶ Static: 관리자가 직접 경로를 지정합니다. ▶ Dynamic: 라우터가 자동으로 라우팅 테이블을 만들어 라우팅합니다. Interior Gateway Protocols (IGP) 한 AS 내에서 라우터들끼리 정보를 교환하는 프로토콜 ✅ Link State - OSPF, ISIS 우선 네트워크 토폴로지 정보를 모든 라우터에게 전달한 다음, 그 후 동시에 라우팅 테이블을 생성합니다. 이로써 모든 라우터는 완벽한 전체 네트워크 토폴로지와 모든 link의 비용을 알게 되며, 이것을 LSD(Link State Database)라 합니다. LSD를 바탕으로 특정 destination을 향한 모든 경로에 대한 지도를 그린 뒤,..

IT/네트워크 2024.01.08

[Internet layer (1) - NAT, ICMP, ARP] in TCP/IP 4 layer

Internet layer의 다양한 프로토콜들을 알아보겠습니다! NAT(Network address translation) 목적 - IP 절약: 하나의 공인 IP주소로 여러 대의 호스트가 인터넷 접속 가능 - 보안성 제고: 외부 공격자는 라우터 내부 네트워크의 사설 IP를 알수 없어, 최종 목적지로의 공격이 어려워짐 동작 원리 (S: Source, D: Destination 입니다.) 1) 호스트 → 게이트웨이 (사진 상 위, 왼쪽) S IP: 호스트의 사설 IP주소 D IP: 서버 IP주소 2) 게이트웨이 → 서버 (사진 상 위, 오른쪽) ▶ NAT table: 호스트의 사설 IP주소, 게이트웨이의 공인 IP주소, 목적지 IP주소 포함됨 PAT의 경우: Source 포트번호, 사설망 포트번호 추가됨 S..

IT/네트워크 2024.01.07

[Transport layer - TCP, UDP] in TCP/IP 4 layer

TCP (Transmission Control Protocol) 신뢰성 흐름 제어 흐름 제어란? 송신자와 수신의 데이터 속도가 다를 수 있기에, 송신자의 데이터 송신 속도를 제어하여, 수신자가 받을 수 있을 만큼의 데이터만 효율적으로 전송함으로써 수신의 Overflow를 방지하는 것입니다. 다음과 같은 방식들로 구현될 수 있습니다. 1. Stop & Wait . 2. Sliding Window Stop & Wait 방식을 거의 병렬적, 독립적으로, 동시에 여러개를 하는 것? 이건 저만의 생각입니다. sliding window란, 수신자가 수신 가능한 크기 (= Window size) 내에서 패킷을 연속으로 전송함으로써 (ACK를 기다리지 않고), Stop & Wait에 비하여 효율을 크게 높인 것입니다...

IT/네트워크 2024.01.04

[Application layer - DNS, DHCP, SMTP, IMAP, POP3, FTP, HTTP] in TCP/IP 4 layer

Application layer의 다양한 프로토콜들을 알아보겠습니다! Name System DNS Domain을 IP address로 전환해줍니다. 사용자가 www.example.com이라는 Domain의 IP address를 DNS에게 물으면, DNS는 이에 대한 답을 해줍니다. 사용자가 www.example.com이라는 Domain에 접속하려 할 때, 다음과 같은 과정이 이루어집니다. (그림의 "recursive"라 표현된 위치는 DNS resolver입니다.) 1. 사용자의 요청은 DNS resolver로 라우팅됨 - DNS resolver는 ISP가 관리함 - 사실, 이렇게 DNS resolver가 요청을 받은 뒤, DNS resolver의 Cache에 "www.example.com"에 대한 IP..

IT/네트워크 2024.01.02

[Hash Function, MDC, MAC, Digital Signature]

해시함수 란? 일반적인 양방향 암호기법 (대칭키, 공개키 암호기법 등)과 달리, 단방향 암호기법이며, key를 사용하지 않는다. - 복호화가 사실상 불가능함을 의미. 입력으로는 임의의 크기가 들어갈 수 있지만, 출력은 크기가 고정되어 있다. 암호학적 관점에서 안전한 해시함수의 성질은 아래와 같다. (H: 해시함수) 1. 역상 저항성: H(x)가 주어졌을 때, x를 찾기 어렵다. 2. 제2 역상 정항성: x가 주어졌을 때, H(y) = H(x)인 y를 찾기 어렵다. 3. 충돌 저항성: H(x) = H(y)인 (x, y) 쌍을 찾기 어렵다. 이러한 암호학적 해시함수의 설계 방식으로는 Merkle-Damgard 구조가 있다. (f: 압축 함수) f_i = f(m_i, f_i-1) (i = 2~n) MDC (M..

IT/암호학 2023.12.31

[ElGamal] in Public-key cryptosystem

수식 입력이 번거로워서 수식 표현이 좀 매끄럽지 못합니다. 특히 주의해서 보실 것: 예를 들어 a의 역원인 경우, a역 이라 표현했습니다. 키생성 public key: (e1, e2, p)이고, private key: d이다. 큰 소수 p 선택 1 ≤ d ≤ (p - 2) 범위에서 임의의 d 선택 (Z_p)*에서 원시근 e1 선택 e2 ≡ e1^a mod p 암/복호화 암호화 임의의 r 선택 c1 ≡ e1^r mod p c2 ≡ (m * e2^r) mod p 최종 암호문은 (c1, c2)이다. 복호화 m ≡ c2 * (c1^a) mod p 취약점 알려진 평문 공격 동일한 r을 이용하면 알려진 평문 공격에 위험해진다. 공격자가 m, c1, c2, c1', c2'을 알고 있을 때, (또한, m, m'은 같은..

IT/암호학 2023.12.27

[RABIN] in Public-key cryptosystem

수식 입력이 번거로워서 수식 표현이 좀 매끄럽지 못합니다. 특히 주의해서 보실 것: 예를 들어 a의 역원인 경우, a역 이라 표현했습니다. 키 생성 public key: n이고, private key: (p, q)이다. 서로다른 두 소수 p, q (4k+ 3 형태)를 선택한 뒤, n을 얻는다: n = p * q 암호화 c ≡ m^2 mod n 복호화 먼저, c1 ≡ c mod p, c2 ≡ c mod q를 계산한다. 이를 이용하여, a1 and a2 ≡ +- c1^(p+1 / 4) mod p, b1 and b2 ≡ +- c2^(q+1 / 4) mod q를 계산한다. 여기서, a1 또는 a2, 그리고 b1 또는 b2 중 하나씩 고르는 경우의 수는 2*2 = 4가지이므로, m = p * (p역 mod q) ..

IT/암호학 2023.12.27

[RSA] in Public-key cryptosystem

수식 입력이 번거로워서 수식 표현이 좀 매끄럽지 못합니다. 특히 주의해서 보실 것: 예를 들어 a의 역원인 경우, a역 이라 표현했습니다. 키 생성 public key: (e, n)이고, private key: d이다. 생성 단계 p, q 선택: p != q, p와 q는 소수 n 계산: n = p * q psi(n) 계산: psi(n) = (p - 1)(q - 1) e 선택: 1 < e < psi(n) - 1이며 psi(n)과 서로소 d 계산: d ≡ e역 mod psi(n) 암/복호화 암호화 c ≡ m^e mod n 복호화 m ≡ c^d mod n 효율적인 복호화 CRT를 활용한다. 즉, c^d mod n을, 아래와 같이 나누어서 하는 것이다. 먼저, m1 ≡ c^d mod p와 m2 ≡ c^d mod..

IT/암호학 2023.12.27

[Pipeline CPU] in RV32I CPU microarchitecture

이 글에 포함된 모든 사진 자료들은 (서태원 지음) 에서 가져왔습니다. Pipeline CPU란 “ pipeline CPU란, single-cycle CPU 구조를 여러 stage로 나누어, 각 부분을 동시에 활용되게끔 하는 것이다. (아래 사진 참고) single-cycle CPU에서는, 하나의 instruction이 완료되고 나서야 그 다음 instruction을 수행한 데 비해, pipeline CPU의 경우, 매 clock cycle의 각 stage에서는 다른 instruction이 실행되고 있다. (아래 사진 참고) “ 전형적인 것은 5-stage pipeline CPU이며, 각 stage는 다음과 같다: IF(Instruction Fetch): 명령어를 읽는 단계 ID(Instruction D..

[Pyinstaller] exe 파일 못 만드는 오류! (yolo ultralytics 관련)

상황 설명은 필요 없고 빠른 해결을 원하신다면 빨간 글자를 따라가주세요! 상황. pyqt를 이용해 인터페이스의 구성과 기능을 정의했으며, 그 기능들 중에는 yolo v8 모델의 predict 메서드를 활용하는 것이 있다. 실제로 실행시킬 main.py는 별개로 작성했으며, 여기서는 위에서 만들어진 인터페이스 py 내의 클래스를 임포트한다. 나는 이 main.py를 exe로 만드려 한다. 우선 새로운 폴더에 프로그램 구동에 필요한 모든 파일 (인터페이스 py 파일, main.py, yolo v8 모델의 pt 파일 정도?) 들을 넣어놓고, 이 폴더 위치에서 터미널을 열어 아래와 같이 실행하였다. pyinstaller -w -F main.py 이를 통해 생성된 작업폴더 > dist > exe 파일을 실행해보았..

IT/DevOps 2023.08.18