본문 바로가기
프로그래밍/해킹

웹 해킹 퀴즈 모음

by 만디기 2024. 8. 30.

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