Tool: gdb # 디버거란 🐛 - 프로그램을 개발할 때는 일반적으로 코드의 논리구조를 신중하게 설계하고, 코드를 작성해나감 - 개발 초기에 아무리 신중하게 설계해도, 코드의 규모가 커지다 보면 실수가 발생하기 마련 - 컴퓨터과학에서는 이렇게 실수로 발생한 프로그램의 결함을 버그(bug)라고 함 - 이미 완성된 코드에서 버그를 찾는 것은 어려움 따라서 어려움을 해소하고자 디버거(Debugger)라는 도구가 개발 됨 - 디버거는 문자 그대로 버그를 없애기 위해 사용하는 도구 - 프로그램을 어셈블리 코드 단위로 실행하면서, 실행결과를 사용자에게 보여줌 - 자신이 추상적으로 생각한 아이디어의 결과를 직관적으로 보여주기 때문에, 개발자는 디버거를 사용하여 자신이 작성한 코드의 문제점을 더욱 명확하게 찾을 수 ..
01. APM 설치 - 수업 시간에서 사용할 환경: CentOS7(Server, Client) 1) Apache(httpd) # yum -y install httpd* 2) PHP # yum -y install php # yum -y install php-mysql # yum -y install php* --skip-broken 3) Mariadb(MySQL) # yum -y install mariadb-server* 4) 실습을 위해 방화벽 중지 # systemctl stop firewalld 5) 웹서버 재시작하기 - 패키지와 데몬명이 다른 경우가 많음 + 프로토콜 같은 경우도 하지만 동일하게 일치되는 서비스들도 있음 # systemctl restart httpd 6) 데이터베이스 서버 재시작 # s..
# 보안 취약점과 해킹 * 보안: 기밀성, 무결성, 가용성을 보장하는 행위 * 정보 보안의 3요소 기밀성(Confidentiality) ex) 암호학 무결성(Integrity) ex) 해시 가용성(Availability) 언제든지 실행 가능 - 보안 취약점: 정보 자산이 갖고 있는 허점으로 정보 보안의 3요소 중 최소 한 가지 이상에 영향을 미치는 취약점 해커: 취약점을 가지고 공격을 함 우리: 취약점을 방어해야 함 # 해킹의 기초 단계 ① 정보수집: 정찰 / 스캐닝 및 취약점 분석 ex) 축구로 따지자면 상대편을 탐색하는 것 ② 침투 및 시스템 장악: 침투(gainning access) ③ 공격 전이 권한 상승 ex) 관리자 권한 획득 백도어 관리 흔적 지우기 # HTTP에 대한 이해 1. 서버가 준비..
x86 Assembly🤖: Essential Part(2) # 서론 - 운영체제의 핵심 자료구조인 스택, C언어의 함수에 대응되는 프로시저, 그리고 시스템 해킹의 관점에서 매우 중요한 시스템콜과 관련된 어셈블리를 배움 스택: push, pop 프로시저: call, leave, ret 시스템콜: syscall # x86-64 어셈블리 명령어 1. Opcode: 스택 🧱 - x64 아키텍처에서는 다음의 명령어로 스택을 조작할 수 있음 push val // val을 스택 최상단에 쌓음 스택은 확장 될 때 기존 주소보다 낮은 주소로 확장되기 때문에 아래로 자람 pop reg // 스택 최상단의 값을 꺼내서 reg에 대입 2. Opcode: 프로시저 📜 - 프로시저(Procedure): 특정 기능을 수행하는 코드..
x86 Assembly🤖: Essential Part(1) # 서론 - 컴퓨터 속에는 복잡한 논리적 인과관계가 존재하고, 여러 개체가 상호작용하며, 그 세계에서 통용되는 기계어(Machine Code)가 있음 - 해커가 하는 일은 그 거대한 세계의 허점을 공격하여 시스템을 장악하는 것 - 시스템 해커: 컴퓨터의 언어로 작성된 소프트웨어에서 취약점을 발견해야 함 - David Wheeler: EDSAC을 개발하면서 어셈블리 언어(Assembly Language)와 어셈블러(Assembler)라는 것을 고안 - 어셈블러(Assembler): 일종의 통역사, 개발자들이 어셈블리어로 코드를 작성하면 컴퓨터가 이해할 수 있는 기계어로 코드를 치환 > 어셈블리어가 기계어보다는 인간이 이해하기 쉬웠으므로, 개발자들은..
Background: Linux Memory Layout # 서론 - 컴퓨터는 크게 CPU와 메모리로 구성되어 있음 - CPU는 실행할 명령어와 명령어 처리에 필요한 데이터를 메모리에서 읽고, Instruction Set Architecture(ISA)에 따라 이를 처리함. 그리고 연산의 결과를 다시 메모리에 적재 > 이는 CPU의 동작과 메모리 사이에 밀접한 연관이 있음을 의미 - 만약 공격자가 메모리를 악의적으로 조작할 수 있다면 조작된 메모리 값에 의해 CPU도 잘못된 동작을 할 수 있음 - 이것을 메모리가 오염되었다고 표현하며, 이를 유발하는 취약점을 메모리 오염(Memory Corruption) 취약점이라고 부름 - 시스템 해킹에 다양한 기법들이 있지만, 많은 공격 기법이 Memory Corru..
Background: Computer Architecture # 서론 - 컴퓨터는 각자 다른 기능을 수행하는 여러 부품들의 도움으로 작동 - CPU: 컴퓨터 작동에 핵심이 되는 연산을 처리하고, 저장 장치는 데이터를 저장 - 이외에도 GPU는 그래픽 데이터를, 랜카드는 네트워크 통신을, 사운드 카드는 소리 데이터를 처리하는 것에 특화되어 있음 - 각 부품들은 특징이 뚜렷하여 컴퓨터에서 고유의 기능을 수행함 - 서로 다른 부품들이 모여서 '컴퓨터'라는 하나의 기계로서 작동할 수 있는 것은 컴퓨터에 대한 기본 설계가 존재하기 때문 > 설계에 맞춰서 여러 하드웨어가 개발되고, 이들을 조립해서 컴퓨터가 완성됨 > 컴퓨터 과학에서는 이러한 설계를 '컴퓨터 구조(Computer Architecture)'라고 부름 ..
Background: Non-Relational DBMS # 들어가며 - 서론 - RDBMS: 스키마를 정의하고 해당 규격에 맞는 데이터를 2차원 테이블 형태로 저장 > 복잡할 뿐만 아니라, 저장해야 하는 데이터가 많아지면 용량의 한계에 다다를 수 있다는 단점이 있음 > 이를 해결하기 위해 등장한 것이 비관계형 데이터베이스 Non-relational DBMS(NRDBMS, NoSQL) - 관계형 데이터베이스에서 발생할 수 있는 문제점으로 SQL Injection이 있었음 > 공격자는 이를 통해 데이터베이스의 정보를 알아내거나 임의의 결과를 반환해 인증을 우회하는 등의 행위가 가능함 > NoSQL 또한 이용자의 입력값을 통해 동적으로 쿼리를 생성해 데이터를 저장하기 때문에 이와 같은 문제점이 발생할 수 있..
simple_sqli 로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다 * [Dreamhack] Exercise: SQL Injection * [Dreamhack] Exercise: Blind SQL Injection # 배경 지식 - 본 문제에서는 SQLite를 이용해 데이터베이스를 관리하고 있음 - SQLite: 기존에 알려진 MySQL, MSSQL, Oracle 등과 유사한 형태의 데이터베이스 관리 시스템 - SQLite는 데이터 관리를 위한 일부 필수 기능만을 지원하기 때문에 기존 관리 시스템에 비해 비교적 경량화된 데이터 베이스 관리 시스템으로 널리 알려져 있음 - SQLite는 많은 양의 컴퓨팅 리소스를 제공하..
ServerSide: SQL Injection # 들어가며 - 서론 - DBMS에서 관리하는 데이터베이스에는 회원 계정, 비밀글과 같이 민감한 정보가 포함되어 있을 수 있음 - 공격자는 데이터베이스 파일 탈취, SQL Injection 공격 등으로 해당 정보를 확보하고 악용하여 금전적인 이익을 얻을 수 있음 - 따라서 임의 정보 소유자 이외의 이용자에게 해당 정보가 노출되지 않도록 해야 함 - SQL Injection: DBMS에서 사용하는 쿼리를 임의로 조작해 데이터베이스의 정보를 획득하는 기법 - Injection: 주입이라는 의미를 가진 영단어로, 인젝션 공격은 이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석되어 발생하는 취약점을 의미 드림이가 공장에 생산을 요청하는 그..