| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- fork-bomb
- backjoon
- Systemhacking
- cloud
- SISS
- c
- 백준
- Reversing
- bWAPP
- AWS
- mount
- cgroup
- Dreamhack
- python
- Linux
- beebox
- pwnable
- CodeEngn
- System
- htmlinjection
- basicrce3
- docker
- wireshark
- Reflected
- 자료구조
- EC2
- acc
- 와이어샤크
- 유석종교수님
- datastructure
- Today
- Total
목록2022/08 (16)
Ctrl + Shift + ESC
서론 버그(bug) : 실수로 발생한 프로그램의 결함 디버거(Debugger) : 버그를 없애기 위해 사용하는 도구 프로그램을 어셈블리 코드 단위로 실행하면서, 실행결과를 사용자에게 보여준다. 자신이 추상적으로 생각한 아이디어의 결과를 직관적으로 보여주기 때문에, 개발자는 디버거를 사용하여 자신이 작성한 코드의 문제점을 더욱 명확하게 찾을 수 있다. gdb gdb(GNU debugger) : 리눅스의 대표적인 디버거 오픈 소스로 개발되어 무료로 설치할 수 있으며 다양한 플러그인들이 개발되어 있다. Ubuntu 18.04에는 기본적으로 설치되어 있다. Github 링크 : https://github.com/scwuaptx/Pwngdb GitHub - scwuaptx/Pwngdb: gdb for pwn gd..
Opcode: 스택 스택 : 함수별로 자신의 지역변수 또는 연산과정에서 부차적으로 생겨나는 임시 값들을 저장하는 영역 push val : val을 스택 최상단에 쌓음 rsp -= 8 [rsp] = val pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 rsp += 8 reg = [rsp-8] Opcode: 프로시저 프로시저(Procedure) : 특정 기능을 수행하는 코드 조각 프로시저 사용 : 반복 연산 대체 → 전체 코드의 크기↓ , 기능별로 코드 조각에 이름 → 가독성 ↑ 호출(Call) : 프로시저를 부르는 행위 반환(Return) : 프로시저에서 돌아오는 것 프로시저를 실행하고 나서 원래의 실행 흐름으로 돌아와야 하므로 call 다음의 명령어 주소(return address, 반환..
x64 어셈블리 언어 어셈블리 언어 : 컴퓨터의 기계어와 치환되는 언어 동사에 해당하는 명령어(Operation Code, Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성된다. 명령 코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add, sub 논리 연산(Logical) and, or, xor, not 비교(Comparison) cmp, test 분기(Branch) jmp, je, jg 스택(Stack) push, pop 프로시져(Procedure) call, ret, leave 시스템 콜(System call) syscall 피연산자 상수(Immediate Value), 레지스터(Register), 메모리(Memory)가..
메모리 오염 취약점 : 공격자가 메모리를 악의적으로 조작해, 조작된 메모리 값에 의해 CPU가 잘못된 동작을 하는 상황을 유발하는 취약점 세그먼트 세그먼트(segment) : 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 크게 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트로 구분된다. 운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 적절한 권한을 부여할 수 있다. 권한은 읽기, 쓰기, 실행이 존재하며, CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있다. 코드 세그먼트 코드 세그먼트(Code Segment) : 실행 가능한 기계 코드가 위치하는 영역, 텍스트 세그먼트(Text Segment)라고도 불린다. 읽기 권한과 실행 권한이 부여된다. int m..
Background : Computer Architecture 컴퓨터 구조(Computer Architecture) 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법 컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. 컴퓨터의 기능 구조에 대한 설계 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조가 있다. 폰 노이만 구조 폰 노이만 구조 : 연산과 제어를 위해 중앙처리장치(CPU)를, 저장을 위해 기억장치(memory)를 사용하고 장치간에 데이터나 제어 신호를 교환..
가상 머신이란? 가상 머신 : 컴퓨터를 에뮬레이팅 한 것 가상 머신을 작동 시키는 컴퓨터를 호스트(Host)라고 부르며, 가상 머신 안에서 작동하는 컴퓨터를 게스트(Guest)라고 부른다. 가상 머신을 이용하면 호스트는 게스트에게 독립된 실행환경을 제공할 수 있다. 그 위에서 게스트는 윈도우, 리눅스, 맥 등의 운영체제를 구동할 수도 있고, 원하는 특정 프로그램만 실행할 수도 있다. 대표적인 가상화 소프트웨어로는 VMware, VirtualBox, Parallels, QEMU 등이 있다. 윈도우 환경 구축 VMware Workstation Player는 윈도우에서 무료로 사용 가능한 가상화 소프트웨어이다. VMware 설치 링크 : https://www.vmware.com/products/workstat..
문제 풀이 처음 볼 수 있는 화면이다. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' users = { 'guest': 'guest', 'admin': FLAG } @app.route('/') def index(): username = request.cookies.get('username', None) if username: return render_template('index.html', text=f'H..
문제 풀이 지정된 사이트에 들어가면 해당 화면을 볼 수 있다. login으로 들어간 모습이다. 이 곳을 통해 sql injection을 하면 될 것 같다. #!/usr/bin/python3 from flask import Flask, request, render_template, g import sqlite3 import os import binascii app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlit..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
난이도 : low Quest. Change Secret 페이지에서 XSS 공격 후 SQL Injection(Login From/users) 페이지에서 확인할 수 있습니다. 다음 화면을 출력해보세요. (bee/bug) 내 아이디를 로그아웃 한 뒤에 bee/bug로 다시 로그인했다. 해당 페이지의 동작을 알아보기 위해 siss를 입력했다. 출력된 것을 확인하기 위해 SQL Injection(Login From/users)로 이동해 보았다. your secret: 뒤에 내가 입력한 내용이 출력되는 것을 확인할 수 있었다. 따라서 를 입력하면 경고창을 띄울 수 있을 것이다. 예상한 대로 success 경고창을 띄울 수 있었다. Quest. secret을 사용자의 쿠키 정보로 바꿔봅시다. secret에 를 입..
난이도 : low Quest. 다음 화면과 같이 경고창을 띄워봅시다. 텍스트란에 글을 적고 submit 버튼을 누르면 글이 작성되는 구조이다. 여기에 를 작성해 보았다. 그랬더니 success 경고창을 띄울 수 있었다. Quest. 사용자의 쿠키 값을 경고창에 띄워봅시다. 사용자의 쿠키 값을 경고창을 통해 띄울 수 있었다. Quest. (게시판에 등록된 내용을 삭제하지 않았다면) XSS 공격을 시도할 때마다 경고창이 여러 개가 뜨는 것을 확인했습니다. 왜 그럴까요? 이유를 작성해주세요. 사용자의 쿠키 값을 경고창을 통해 띄울 때 그 앞에서 했던 success도 함께 실행되었다. 그 이유를 알아보기 위해 소스 코드를 살펴보았다. 테이블을 살펴보니 뒤에 가 먼저 읽혀서 success 경고창이 뜨고, ..