Quiz: Web
- 태그와 속성 등을 통해 웹 문서의 뼈대를 작성하는 언어 : HTML
- URI는 Uniform Resource Identifier의 약자로 웹 리소스의 식별에 사용된다.
- 프론트엔드는 웹 리소스로 구성된다.
- 브라우저는 이용자의 요청을 해석하여 웹 서버에 HTTP 형식으로 전달한다.
- Javascript로 작성된 웹 리소스는 클라이언트에서 실행된다.
- 다양한 웹 리소스들의 스타일을 지정하는 것 : CSS
- 작성된 웹 리소스 중 프론트엔드의 동작을 구현하는 것 : Javascript
Quiz: HTTP/HTTPS
- 기본 HTTP 포트 번호 : 80
- 기본 HTTPS 포트 번호 : 443
- 서버에 추가 정보를 전달하는 데이터 부분으로, 이용자가 입력한 데이터를 전달하기 위함보다는 이용자와 서버가 상호작용하기 위한 정보를 담기 위해 사용되는 것 : HTTP Header
Quiz: Cookie & Session
- 서버에 요청을 보내는 역할을 하는 것 : 클라이언트
- 통신이 끝난 후 상태 정보를 저장하지 않는 특성을 가리키는 용어 : Stateless
- 세션이 인증 정보를 저장하는 곳 : 서버
Quiz: Same Origin Policy
- SOP의 제한을 완화하여 다른 Origin의 웹 리소스를 가져오는 방식 : CORS
- CORS 헤더 방식에서 HTTP 메소드 중 OPTIONS를 통해 수신측 웹 리소스의 접근 관련 질의를 하는 과정 : CORS preflight
- SOP의 동일 출처 기준을 판단하는 URI의 요소 : Host / Schema / Port
- SOP는 Cross Origin로부터 온 데이터를 브라우저가 읽지 못하게 하는 정책이다.
Quiz: XSS
- Stored XSS : 공격 스크립트가 서버 내에 존재하는 데이터베이스 또는 파일 등의 형태로 저장되어 있다가 이용자가 저장된 공격 스크립트를 조회하는 순간 발생하는 형태의 XSS이다.
- XSS 취약점이 발생하는 곳 : 클라이언트 / 서버
- 이용자의 요청에 악성 스크립트가 포함되는 XSS : Reflected XSS
Quiz: CSRF
- 브라우저는 CSRF 취약점을 방지하기 위한 보안 메커니즘을 제공한다.
- 서버에서 이용자를 식별하기 위해 쿠키를 사용하고 있어야 CSRF 취약점으로 공격할 수 있다.
- CSRF 공격이 불가능할 때 XSS 공격도 불가능하다(X) : https://blog.naver.com/jarid2292/222611284091
- 서버에서 HTTP의 GET 메소드가 아닌 POST 메소드로 데이터를 받으면 CSRF에 안전하다(X) : POST 방식으로도 CSRF 가능
Quiz: SQL Injection
- SELECT * FROM accounts WHERE user_id='admin' and user_pw='(A)'
=> '+(select user_pw from accounts where user_id='admin')+' : user_pw를 알아내는 쿼리를 넣는다.
=> ' or 1=1-- 1 : user_pw 조건문을 무력화하고(-- : 주석) or (true) 인 조건문을 대신 넣어 조건문 전체를 True로 만든다.
- 일반적인 상황에서 SQL Injection으로 할 수 있는 것 : 임의 계정 삭제하기 / 데이터베이스 정보 알아내기 / 임의 계정으로 로그인하기 등
Quiz: NoSQL Injection
- MongoDB는 데이터의 자료형으로 오브젝트와 배열을 사용할 수 있다.
Quiz: Command Injection
@app.route('/ping')
def ping():
ip = request.args.get('ip')
return os.system(f'ping -c 3 "{ip}"')
- "; cat /fl*; " 명령으로 /flag 파일을 읽을 수 있다.
- `` : 명령어 치환
- $() : 명령어 치환, `` 와 다르게 중복 사용 가능
- && : 명령어 연속 실행
- || : 명령어 연속 실행
- ; : 명령어 구분자
- | : 파이프, 앞 명령어의 결과가 뒷 명령어의 입력으로 들어감.
- 커맨드 인젝션(Command Injection) : 인젝션의 종류 중 하나. 시스템 명령어에 대한 인젝션을 의미함. 취약점이 발생하는 원인은 단순하지만, 매우 치명적인 공격으로 이어질 수 있음. 개발자는 이용자의 입력을 반드시 검사해야 하며, 되도록 system 함수의 사용을 자제해야 함.
Quiz: File Vulnerability
@app.route("/download")
def download():
filename = request.args.get("filename")
content = open("/data/uploads/" + filename, "rb").read()
return content
- 현재 실행중인 프로세스의 메모리 정보는 /proc/self/maps 파일에 있음.
- ../../../proc/self/maps, ../../proc/self/maps 등으로 현재 실행중인 프로세스의 메모리 정보 열람 가능함.
(어디까지 가야 root인지를 모르는 경우, ../ 를 여러 번 사용하여 root까지 올린다. 찍어 보는 거지 뭐.)
- 악성 파일 업로드를 통해 할 수 있는 행위 : Cookie Hijacking, Remote Code Execution, Cross Site Scripting, Cross Site Request Forgery...
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
(A) (B)
</FilesMatch>
- php 확장자를 가진 파일이 정상적으로 php 스크립트 엔진에 실행되게 하려면? : SetHandler, application/x-httpd-php
- 파일 다운로드 취약점(File Download Vulnerability) : 웹 서비스를 통해 서버의 파일 시스템에 존재하는 파일을 내려 받는 과정에서 발생하는 보안 취약점이며, 이용자가 다운로드할 파일의 이름을 임의로 정할 수 있을 때 발생한다.
Quiz: SSRF
- 구분 문자(Delimiter) : 일반 텍스트 또는 데이터 스트림에서 별도의 독립적 영역 사이의 경계를 지정하는 데 사용하는 하나의 문자 혹은 문자들의 배열. URL 에서 구분 문자는 “/”(Path identifier), “?” (Query identifier) 등 이 있으며 구분 문자에 따라 URL의 해석이 달라질 수 있음.
- 마이크로서비스 : 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식
- Server Side Request Forgery : 웹 서비스의 요청을 변조하는 취약점으로, 브라우저가 변조된 요청을 보내는 CSRF와는 다르게 웹 서비스의 권한으로 변조된 요청을 보낼 수 있음
Quiz: SQL Features
- union : MySQL 쿼리에서 다수의 select 구문의 결과를 집합하는 절
- 서브 쿼리 : MySQL 쿼리에서 한 쿼리 내에 또 다른 쿼리를 사용하는 문법
Quiz: SQL DML
- WHERE : SELECT, UPDATE, DELETE DML 구문에서 조건을 정의할 때 사용되는 문법
- SELECT : 데이터를 조회할 때 사용되는 DML 구문
- 올바른 INSERT DML 구문 : insert into users (id, pw) values ('admin', 'admin');
Quiz: DBMS Fingerprinting
- sqlite_version() : SQLite DBMS에서 버전 정보를 조회
> select @@version; # select version();
+-------------------------+
| @@version |
+-------------------------+
| 5.7.29-0ubuntu0.16.04.1 |
+-------------------------+
1 row in set (0.00 sec)
- 해당 버전 정보는 MySQL의 DBMS 버전 정보 반환 결과이다.
Quiz: System Table Fingerprinting
- sys.databases : MSSQL에서 데이터베이스 목록을 가져올 때 사용하는 시스템 테이블
- information_schema 데이터베이스를 갖고있는 DBMS : MySQL
- SQLite의 시스템 테이블 : sqlite_master
Quiz: DBMS Misconfiguration
- secure_file_priv : mysql 쿼리 내에서 접근할 수 있는 파일 경로에 대한 정보를 갖고 있는 설정
- MSSQL에서 OS 명령어를 실행하기 위한 기능 : xp_cmdshell
- mysql에서 인자로 전달된 파일을 읽고 출력하는 함수 : load_file
Quiz: MongoDB DBMS
- MongoDB에서 지원하지 않는 연산자 : $from
- MongoDB의 특징 :
ㄴ _id 필드가 기본키 (Primary Key) 역할을 한다.
ㄴ JSON 형식으로 쿼리문을 작성할 수 있다.
ㄴ 스키마 (Schema)가 존재하지 않아 각 테이블 (또는 Collection)에 특별한 정의를 하지 않아도 된다.
- MongoDB 내에 존재하지 않는 함수 : if
Quiz: Command Injection for Windows
- 윈도우에서 환경 변수를 나타내는 방법 : %PATH%
- 같은 용도의 리눅스 명령어와 윈도우 명령어가 올바르지 않게 짝지어진 것 : cd - chdir
- 윈도우 디펜더를 우회하기 위해 무작위 값을 생성할 때 사용하는 함수 : Get-Random
Quiz: File Vulnerabilities for Linux
- 리눅스에서 임시 디렉토리로 사용할 수 있는 경로 : /tmp, /var/tmp, /dev/shm...
- 프로세스 및 시스템 정보를 제공하는 가상 파일시스템이 위치하는 경로 : /proc
- 웹 문서 및 기타 웹 서버에서 사용되는 파일을 저장하는 경로 : /var/www
- 사용자 및 그룹 정보를 저장하는 파일 : /etc/passwd, /etc/group
- 사용자 로그온 시 실행되는 셸 명령을 지정하는 경로 : ~/.bashrc
Quiz: File Vulnerabilities for Windows
- 현재 사용자의 시작 프로그램 목록이 저장되는 경로 : %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
- IIS 서비스에서 웹 문서 및 기타 웹 서버에서 사용하는 파일을 저장하는 경로 : C:\inetpub
- 운영 체제 및 서비스에서 사용하는 임시 디렉토리 : C:\Windows\Temp
Quiz: XSS Filtering Bypass
- 블랙리스트 기반 필터링이 근본적인 해결책이 될 수 없는 이유?
ㄴ 개발자가 인지하지 못하는 키워드가 존재할 수 있기 때문에
ㄴ HTML 표준과 브라우저의 기능은 나날이 변화하고 추가되기 때문에
- 안전하다고 알려진 마크업만 허용하는 필터링 방식 : 화이트리스트 필터링
- instanceof 연산자를 override 할 수 있는 symbol : Symbol.hasInstance
- JS에서 객체의 특정 속성에 접근할 때 속성 이름을 동적으로 계산하는 기능 : Computed member access
Quiz: Content-Security-Policy
- 페이지 내에 삽입된 프레임 컨텐츠에 대한 출처를 제어하는 지시문 : child-src
default-src: none;
script-src: https://*.dreamhack.io;
img-src: https://static.dreamhack.io;
- script-src 에 따라서, https://sample-code.dreamhack.io 에 있는 자바스크립트 코드를 불러올 수 있겠군!
- object-src는 따로 지정되지 않았으니 default-src를 따라서 none 이겠군!
Quiz: CSP bypass
- 지시문이 없을 경우 'default-src'를 참조하는 지시문 : script-src / img-src / object-src
- script nonce
ㄴ unsafe-inline 와 nonce는 동시에 사용하지 않는 것이 권장된다.
ㄴ nonce가 캐싱될 경우, nonce가 업데이트되지 않을 수 있다.
ㄴ script tag 의 nonce 속성 값이 CSP header 에서 정의한 nonce 값과 같아야 한다.
Quiz: CSRF Token 오용
- 길이가 짧은 CSRF Token을 사용하면 안되는 이유 : 무차별 대입 공격 (Brute-force attack)으로 Token을 획득할 수 있음
- CSRF Token 을 생성하기 위한 수단으로 적절한 것 : CSPRNG(Cryptographically-secure pseudorandom number generator)
Quiz: CORS Bypass
function test(event) {
if (event.origin.includes('dreamhack.io')) {
var myFunc = event.data['callback'];
eval(myFunc);
}
}
window.addEventListener('message', test);
- dreamhack.io.attacker.com 을 쓰는 공격자가 이를 악의적으로 사용할 수 있겠군!
- data의 callback으로 넘어온 문자열을 그대로 실행해 주기 때문에 DOM-based XSS 가 발생할 수 있겠군!
- CORS : Cross-Origin Resource Sharing
Quiz: Client Side Template Injection
- Client Side Template Injection이 발생할 때 이를 임의 자바스크립트 코드 실행으로 연계하는 것 : 생성자
- Client Side Template Injection에 대한 설명
ㄴ 프레임워크마다 템플릿 구조가 다를 수 있기 때문에, 각 프레임워크에 대한 이해가 어느 정도 필요하다.
ㄴ 템플릿 내부에 사용자의 입력이 그대로 들어가지 않도록 해야 한다.
Quiz: CSS Injection
- 다른 웹사이트로 요청을 보낼 수 있는 속성 : background / url / font-face src / ...
- attr이라는 특성값을 가지고 있으며, 접두사로 value가 값에 포함되어 있는 표현을 가리키는 구문 : [attr^=value]
Quiz: Relative Path Overwrite
- Relative Path Overwrite에 대한 설명
ㄴ 서버와 브라우저가 상대 경로를 해석하는 과정에서 발생하는 차이점을 이용한 공격이다.
ㄴ CSS에서 import하는 페이지의 내용을 조작시킬 수 있다면 공격자가 의도한 자바스크립트, 스타일시트 코드를 로드시킬 수 있다.
ㄴ RPO 취약점으로 로드하는 자바스크립트 코드의 앞 부분을 공격자가 조작할 수 있다면, XSS 공격으로의 연계가 가능하다.
<script src="/app/main.js"></script> <!-- (1) -->
<script src="app/main.js"></script> <!-- (2) -->
- (1)은 최상위 경로부터 시작하여 탐색하고 로드하는 반면, (2)는 현재 경로에서 시작하여 탐색하고 로드한다.
Quiz: Document Object Model Vulnerability
- DOM Clobbering에 대한 설명
ㄴ 만약 HTML 마크업이 사용자나 제삼자로부터 제공된다면 문제가 발생할 수 있다.
ㄴ id, name 등 HTML에서 이용되는 식별자 속성을 이용해 자바스크립트에서 접근 가능한 DOM 객체들의 속성 및 메소드 등을 변조하는 기법이다.
ㄴ id, name 등 식별자 attribute를 제거할 수 있는 DOMPurify와 같은 라이브러리를 사용하는 것이 권장된다.
- DOM-based XSS에 대한 설명
ㄴ 서버에서 클라이언트에게 전달하는 response를 검열하는 것 만으로는 이를 완전히 막을 수 없다.
ㄴ 사용자가 입력할 수 있는 input에 대한 sanitization을 실행하는 것으로 DOM-based XSS를 방지할 수 있다.
Quiz: XS-Search
- SOP 우회가 가능한 태그 혹은 JS 함수 : <script>, <img>, <style>, ...
- Cross-Site Search (XS-Search)와 유사한 로직의 공격 기법 : Blind SQL Injection
'프로그래밍 > 해킹' 카테고리의 다른 글
리버싱 퀴즈 모음 (0) | 2024.08.31 |
---|---|
시스템 해킹 퀴즈 모음 (0) | 2024.08.30 |
Format String Bug (0) | 2024.08.18 |
PLT / GOT / libc database (0) | 2024.08.15 |
Ghidra 사용법 (0) | 2024.08.03 |