Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
exploit-writing-for-oswe — 익스플로잇 스크립트 작성 팁 (더 빠르게!) | Kitploit
도구/GitHubGitHub/rizemon/exploit-writing-for-oswe
Scripting & AutomationWeb Application ExploitationWeb SecurityPenetration TestingLearning & EducationCurated ResourcesPayload Development
GitHubrizemon/exploit-writing-for-oswe

exploit-writing-for-oswe

익스플로잇 스크립트 작성 팁 (더 빠르게!)

저장소 보기
591112162년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

OSWE를 위한 익스플로잇 작성

배경

무엇인가

이 저장소에는 OSWE 랩 및 자격증 시험에서 익스플로잇 스크립트를 작성하는 데 유용한 스니펫과 팁 목록이 포함되어 있습니다.

여기 있는 일부 예제는 특정 코딩 관행에 어긋날 수 있지만, 우리의 최종 목표는 익스플로잇 스크립트를 빠르고 정확하게 작성하는 것입니다.

requests 라이브러리 사용에 익숙하지 않거나 Python이 처음이라면 코드 스니펫 섹션에서 시작하는 것이 좋습니다. 그렇지 않다면 재사용 가능한 코드 섹션이나 팁 섹션으로 건너뛰어도 됩니다.

왜 필요한가

  • 자격증에 대한 write-up, 리뷰, 노트는 많지만, 익스플로잇 작성 과정에 특별히 초점을 맞춘 자료는 거의 없습니다.
  • 익스플로잇 스크립트 작성은 특히 Python이 처음이거나 코드를 통해 웹 애플리케이션과 상호작용한 경험이 거의 없는 사람에게는 부담스러울 수 있습니다.
  • 취약점 식별과 시험 보고서 작성에 드는 시간은 크게 달라질 수 있지만, 익스플로잇 스크립트 개발에 드는 시간은 잘 숙달하면 최소화하고 일정하게 유지할 수 있습니다.

목차

  • OSWE를 위한 익스플로잇 작성
    • 배경
      • 무엇인가
      • 왜 필요한가
    • 목차
    • 코드 스니펫
      • 시작 템플릿
      • 유용한 import
      • requests 라이브러리 사용하기
        • 가장 간단한 HTTP 요청 보내기
        • 다양한 HTTP 메서드 지정하기
        • HTTP 응답 읽기
        • URL에 쿼리 문자열로 데이터 보내기 (params 인자 사용)
        • 바디에 쿼리 문자열로 데이터 보내기 (data 인자 사용)
        • 바디에 JSON으로 데이터 보내기 (json 인자 사용)
        • 바디에 파일 보내기 (files 인자 사용)
        • HTTP 헤더 설정하기 (headers 인자 사용)
        • HTTP 쿠키 설정하기 (cookies 인자 사용)
        • 3XX 리다이렉트 따라가기 비활성화 (allow_redirects 인자 사용)
        • 검증되지 않은 HTTPS 서버와 통신하기 (verify 인자 사용)
        • HTTP 프록시를 통해 요청 보내기 (proxies 인자 사용)
        • Session 생성하기
        • 영구 쿠키 설정하기
        • 영구 헤더 설정하기
      • 문제 해결
        • Wireshark를 사용해 HTTP 요청 필터링하기
        • HTTP 요청 내용 출력하기
        • Burp Suite로 HTTP 요청을 프록시하여 검사하기
      • 재사용 가능한 코드
        • HTTP를 통한 파일 제공
        • HTTP 쿠키 탈취
        • SQL 인젝션 속도 높이기
    • 팁
      • 모든 HTTP 요청 후 assert로 sanity check 수행하기
      • 각 단계 후 의미 있는 메시지 출력하기
      • 각 익스플로잇 단계를 별도의 함수로 분리하기
      • 각 함수 호출에 명시적으로 전달할 필요가 없도록 전역 Session 객체 생성하기
      • 전역 BASE_URL 문자열을 생성하고 이로부터 필요한 URL 구성하기
      • proxies 인자를 사용하지 않고 모든 HTTP 요청이 Burp Suite를 통과하도록 하려면, 실행 시 HTTP_PROXY / HTTPS_PROXY 환경 변수를 설정하세요
      • 페이로드를 안전하게 전송하기 위해 인코딩/디코딩 방식 적용하기
      • 페이로드 문자열에 작은따옴표(')와 큰따옴표(")가 모두 포함된 경우 """를 사용하여 생성하기
      • 멀티스레딩을 사용해 SQL 인젝션 속도 높이기
      • 인증 기능용 익스플로잇 개발 시 인증된 사용자의 쿠키를 하드코딩하기
      • 페이로드에 중괄호({})가 너무 많이 포함된 경우 f-strings(f"")이나 str.format 사용 피하기

코드 스니펫

시작 템플릿

import requests

def main():
    print("Hello World!")

if __name__ == __main__:
    main()

유용한 import

# For sending HTTP requests
import requests

# For Base64 encoding/decoding
from base64 import b64encode, b64decode, urlsafe_b64encode, urlsafe_b64decode

# For getting current time or for calculating time delays
from time import time

# For regular expressions
import re

# For running shell commands
import subprocess

# For multithreading
from concurrent.futures import ThreadPoolExecutor

# For running a HTTP server in the background
import threading
from http.server import HTTPServer, BaseHTTPRequestHandler

# For parsing HTTP cookies
from http import cookies

# For getting command-line arguments
import sys

requests 라이브러리 사용하기

가장 간단한 HTTP 요청 보내기

resp_obj = requests.get("https://github.com")

다양한 HTTP 메서드 지정하기

# GET method
requests.get("https://github.com")

# POST method
requests.post("https://github.com")

# PUT method
requests.put("https://github.com")

# PATCH method
requests.patch("https://github.com")

# DELETE method
requests.delete("https://github.com")

HTTP 응답 읽기

resp_obj = requests.get("https://github.com")

# HTTP status code (e.g 404, 500, 301)
resp_obj.status_code

# HTTP response headers (e.g Location, Content-Disposition)
resp_obj.headers["Location"]

# Body as bytes
resp_obj.content

# Body as a string
resp_obj.text

# Body as a dictionary (if body is a JSON)
resp_obj.json()

URL에 쿼리 문자열로 데이터 보내기 (params 인자 사용)

params = {
    "foo": "bar"
}

requests.get("https://github.com", params=params)

바디에 쿼리 문자열로 데이터 보내기 (data 인자 사용)

data = {
    "foo": "bar"
}

requests.post("https://github.com", data=data)

바디에 JSON으로 데이터 보내기 (json 인자 사용)

data = {
    "foo": "bar"
}

requests.post("https://github.com", json=data)

바디에 파일 보내기 (files 인자 사용)

files = {
    #                (FILE_NAME, FILE_CONTENTS, FILE_MIMETYPE)
    "uploaded_file": ("phpinfo.php", b"<?php phpinfo() ?>", "application/x-httpd-php")
}

requests.post("https://github.com", files=files)

HTTP 헤더 설정하기 (headers 인자 사용)

headers = {
    "X-Forwarded-For": "127.0.0.1"
}

requests.get("https://github.com", headers=headers)

HTTP 쿠키 설정하기 (cookies 인자 사용)

cookies = {
    "PHPSESSID": "fakesession"
}

requests.get("https://github.com", cookies=cookies)

3XX 리다이렉트 따라가기 비활성화 (allow_redirects 인자 사용)

requests.post("https://github.com/login", allow_redirects=False)

검증되지 않은 HTTPS 서버와 통신하기 (verify 인자 사용)

# Supresses InsecureRequestWarning messages
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
도구 다운로드