diff --git a/README.md b/README.md index 95f70f7..3c5de6a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # PentestGPT -**We're testing PentestGPT on HackTheBox**. You may follow [this link](https://www.hackthebox.com/home/users/profile/1489431). More details will be released soon. -**We include a video of using PentestGPT for OSCP-like machine: [HTB-Jarvis](https://youtu.be/lAjLIj1JT3c)**. This is the first part only, and I'll complete the rest when I have time. +- [Update on 29/04/2023] I will release an official support for OpenAI API soon (hopefully in the next two days). The current update is for testing only. +- **We're testing PentestGPT on HackTheBox**. You may follow [this link](https://www.hackthebox.com/home/users/profile/1489431). More details will be released soon. +- **We include a video of using PentestGPT for OSCP-like machine: [HTB-Jarvis](https://youtu.be/lAjLIj1JT3c)**. This is the first part only, and I'll complete the rest when I have time. ## Common Questions - **Q**: What is PentestGPT? diff --git a/config/chatgpt_config_sample.py b/config/chatgpt_config_sample.py index 98b564b..a25c07a 100644 --- a/config/chatgpt_config_sample.py +++ b/config/chatgpt_config_sample.py @@ -4,10 +4,12 @@ import dataclasses @dataclasses.dataclass class ChatGPTConfig: model: str = "text-davinci-002-render-sha" + # set up the openai key + openai_key = "" # set the user-agent below - userAgent: str = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + userAgent: str = "" # set cookie below - cookie: str = "intercom-device-id-dgkjq2bp=0b79bf97-190f-4146-90b1-8e5ee76889a9; intercom-id-dgkjq2bp=73b81fc6-1a89-4778-8602-938e95bb1c8f; _ga=GA1.1.251554109.1679673782; __Host-next-auth.csrf-token=7023b86a1bc0bdd723cf71521ee831acaaab9d94a02438bcdca02ea769612c5f|18083d4a7b0eceabb2c424a905ec175934924e2bd45d006a89e1604164a48604; cf_clearance=qBZGclv8Ht5cS8iEmM2jYyPcvnrVfTRmSUtan_IRuDA-1682061686-0-1-71f1ba7f.fc4b5d0b.26f0e59f-160; _cfuvid=3BzxJtaXO435Z8NO48K1kTTp3JHuMZfIQvWhfiSYEJM-1682330678178-0-604800000; _ga_9YTZJE58M9=GS1.1.1682353256.12.0.1682353256.0.0.0; __Secure-next-auth.callback-url=https://chat.openai.com; cf_clearance=PtqZvXvt6o6wVp9tkSKwlMMfBdV4Hh96bvDhFUG9MHw-1682478660-0-1-5d5e3502.f55df012.897d5f13-160; _puid=user-nwflAg2thlSVHzpBgwGFRgqE:1682478662-c0c9bQESRGcnNH76HwNPLLMranslUH4wSzMGzAxX9AQ=; __cf_bm=MB6FL5JtFTbxNe.AmHN1g023sQ1BNJU04xXCXQKw8uA-1682478662-0-AT/9xWRnD4EkdaRLyogIvEZA1Aqs7uGTSExNXBPLq3uKqbtCVX1jTqR9RQ0FnlnxxRSSNUBo3R3vFdD89ReKsd+Z/95dxMmp4kN3gp5ttaMnuP7uxVkGolGwyYsTmfE5CQDfzR6t1g0GQHT7fnoAL04=; intercom-session-dgkjq2bp=ejAzREZWNUtYdzkwa3ZBanh3UXV0UHZNTk1IMXphZEh3NmhNR3FKU2NkQXFsQk1BRWpmMHExc2w5Qm9DK0krWi0tWlVLOXNGU0NEK3d1WXlzZzdZNnJjZz09--677b92a337fa6e349cdd910984b24829326dff8f; __Secure-next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..nOcSsVlZHqMrkLHm.fZe57E1-UPMVMATxdKlh9JZiYVye9InomOu3H2HyleCH78Zc-X44TiTn1xZnrkYJoKhTXvLPVqFIoV4xx1KEWow0Iv3g9IDZSJRiIFiU_0bhzl7hAKZsrA7Ke8dmXSx0SkY--5sCRanyEDKzhDvl2zuyn9X1uDh9Q3j9DfaSKkptDkiwAiqJBuAx1i3DnFKUH8k1KQKhBKI9zNPj12-ryjkkPixTyDmzEJ4h6_vP14BOzi83Z-yuoGxbi1VBUXV2xkFw64dIc113SB_0Yus1KCP2Z5uEMpUsUMtSC0KwFYGxBmtjLR2gb4oVr32f-VYoSyVjK8HDq4rmFun0uNYnQVnkX7qkBtruufuivxtLh6jqMVydfP0UTrSZAG-fJYwLzZF2yM2Y_8qH7KwHpnyqPzc9PQRuOzYeIe_xIEt9lAi-nfvd79G4T4tzAS9dUjdAlYQ_YrII_g_df2zK30soSGZ7mm5di5CXgFnKOsbnjGJ7etaD9iShsJ8Mq2FMiquYnioUk3V3HfJJooqCdXjOy8dNpUKaazroXyBm2KDZnxP7iZLLETk82mvPPlEl6WfPZoMjMpBMkQffLSnOtN8kzJYO-NcdIBkV7_pBFZdmRjAa_gGudsKjkt4xbr9bGJgccTWoKxWnawxeLWIFpZrxNtibGeA5NyPG8XRiZGqbg5U07Xt25BLc1iIdraItmm94-sW2IFcVDXAxMkSnSNxo2fLsaMwopBeroo-l4baPUXviuO-Ux5xVNTmRe2q-rp5MXNr5GcF79t5oN6ULv9GAxYSqIYQ0biV-G_sdC6PNWErxokfApxAa3oAsaqwxSvNx5mo6tnzH6OPoz5eSyMxhYfkflThLwssJSJ9WT3k3kYxDfeO4t7HEIxP4crkpfkLOJ8FL7gnZTxFSyQQB3FFMgCjqp5xsIhGCNQ_VbgBjJf2QzbudfU075dXWOzzti1WL_BjBY9zDttlEO5VMMZqy--GvGOkscRw_eSgOOXdcVgWW-fpGeIUx-RKfyVF2crwzYNCJrsjyZw6Y0oxskimWE9ZGimGAw8jLTFa1iB0CR2LH7XKTlH5OjUE9lQiJToc0bD0FmflDBkeOamb6N_S0_tZDYbj4JoWm1vGcdb1NAZ8ov1CGqBOTg6Ko8U_So7jLZtcAgAm8wAjp9i3H1xHSivT8lxUyQkTEzNWojZ3uFKRy7n3_X3l9kjuZ7tvI_lkqAuzvZ2l7V5nrda1kNld1kkiTB8GTwkqx9HENcG87DPV1PvZksEZ7wrcR4VsAeQmT6usr4g5nUBo9B0WQShih2aSKyBv9n1PpSZDTqpYGtfU6Tm0fa-jwSbY4u670SBHkgEuAOUbpOUKFnVrLpuI0kCUNrpH3fKEsxrPRkDwMegq93YwqjK0RQ9Hkoy63NQ6U5IlN6jHrqwPN-iTSrfeTnT29PN2WHAj1r6DrmQSfszfKfI6h-OBUQpFsI4GzeKsbrwJlwAVaUYTeFKfw17OcIQE4YXU00floaJCyGSvcbDUkKDiRNdgjNoDT8mooY9dKMtz1ikyPj40CwIYhee2V_h1wrKJA0XTtS4gFrhJveU4nYPnxgdxYM9DpM-L8wfzJLf7wfbZr4-M4FwuGq8ADspmKpWpRSkqO99MLwPDLCUd6R3TrvutkUe0vA8dXvUJA5fjFY6X0TTyF27lhERuuqA7NIleE3tqxsi9FBdamAZy_PI8Ewq8jisblpzFgZBT6UVDrX1PCKLsZexG1rMIRSxjBOainVG3ffxRSuEULMwjGrmEu4s6YCl6BxqlRerz1gbpwbvFK9wGUEgUfm3nEMjw_fkbB92sG1rTJPv17axlaK7qoFh3XYER6e5K0PwKzvZHjn4D4tw2iZFGcQ2tmti-GWly3liWtCw0aMy9gwkXqGp-K4Z7ipZsT8qksKkJ0bAjkAcVcBrWE2dMPjmaBF0SD9r0Y2fiqquj9BtzeztpMoxqpHZZQCWQs3C04x5HVGO3mybacTwQ6AQYOKIGuldnAQ56Z5W51JAXEMnKEZh5UbIyWk1QAcRXc0Bj-XyzAG1-9_3yiNJ7gmrV1mS1bgmO5bCKiuFFI9D786CDt5EBfGcD_owJI6ILal6RkvJ8DAaIL0yC2tDlQCKYghc3c6jdDaT6eJRaNpT7QcVi5IglOkCf0CMz89MDyRf7_zBs3IFt0SZhAfBFQwsJxi1Oe1QzCLV5mnH6JykayiPIhQqcmZ2sL7eRTnzwSZWOqdRUWFKwg1LYLM4JWRan9N5Jx6BskhA17dpNbrUYM6GRje3r52gTsATWYvCWekJI-i6r_Kfp7P43kleuFKv64vDqBeKxchTYr6xNZASfyK1kT-REc3VUT55k_PdewX9Mck3eNrAv-y53qkbBjhzBGIzuxdQQLUd-2O3AE9GqTCdvXuLrJJfVLR4lwHkwV_BgN_fnqg9o7wxuE-RbF6DhgLaqb6BOr0LEFHNV9k1I6mAIYC_z2HEJmGUyciNKDrrNygZQycu4rqNXkZAGzhxl1NrxhCjV8w0HqNWh6D0a4m2QuVhfsy8Jnr1fV8VXkEZcCbvVtJo9kk34Jw5gG1Z-3zeR6N0tsCl64WHgCbkuAyo6PGvwc0z2PNMye9-AH6mPk._JUkFlxcUEhxcGxW2i3aPg" + cookie: str = "" # the following three variables are deprecated # _puid: str = "user-nwflAg2thlSVHzpBgwGFRgqE:1682153664-6LVyqTDXqHm2QjPWNpXFzDkMFxxv%2Bj%2F0XrgE%2FhdBjeI%3D" diff --git a/utils/chatgpt.py b/utils/chatgpt.py index 4c9f37d..cdc5688 100644 --- a/utils/chatgpt.py +++ b/utils/chatgpt.py @@ -6,6 +6,7 @@ import re import time from typing import Any, Dict, List, Tuple from uuid import uuid1 +import openai import loguru import requests @@ -56,6 +57,29 @@ class Conversation: return self.conversation_id == other.conversation_id +def chatgpt_completion(history: List) -> str: + response = openai.ChatCompletion.create( + model="gpt-3.5-turbo", + messages=history, + ) + return response["choices"][0]["message"]["content"] + + +class ChatGPTAPI: + def __init__(self, config: ChatGPTConfig): + self.config = config + openai.api_key = chatgpt_config.openai_key + + def send_message(self, message): + history = [{"role": "user", "content": message}] + response = chatgpt_completion(history) + return response + + def extract_code_fragments(self, text): + code_fragments = re.findall(r"```(.*?)```", text, re.DOTALL) + return code_fragments + + class ChatGPT: def __init__(self, config: ChatGPTConfig): self.config = config