You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+57-54Lines changed: 57 additions & 54 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,7 @@
1
-
**NEITHER THE IPA-LAB NOR HACKINGBUDDYGPT ARE INVOLVED IN ANY CRYPTO COIN! ALL INFORMATION TO THE CONTRARY IS BEING USED TO SCAM YOU! THE TWITTER ACCOUNT THAT CURRENTLY EXISTS IS JUST TRYING TO GET YOUR MONEY, DO NOT FALL FOR IT!**
*Helping Ethical Hackers use LLMs in 50 Lines of Code or less..*
7
4
8
-
[Read the Docs](https://docs.hackingbuddy.ai) | [Join us on discord!](https://discord.gg/vr4PhSM8yN)
9
-
10
5
HackingBuddyGPT helps security researchers use LLMs to discover new attack vectors and save the world (or earn bug bounties) in 50 lines of code or less. In the long run, we hope to make the world a safer place by empowering security professionals to get more hacking done by using AI. The more testing they can do, the safer all of us will get.
11
6
12
7
**🆕 New Feature**: hackingBuddyGPT now supports both SSH connections to remote targets and local shell execution for easier testing and development!
@@ -45,11 +40,7 @@ hackingBuddyGPT is described in [Getting pwn'd by AI: Penetration Testing with L
45
40
}
46
41
~~~
47
42
48
-
## Getting help
49
-
50
-
If you need help or want to chat about using AI for security or education, please join our [discord server where we talk about all things AI + Offensive Security](https://discord.gg/vr4PhSM8yN)!
51
-
52
-
### Main Contributors
43
+
## Main Contributors
53
44
54
45
The project originally started with [Andreas](https://github.com/andreashappe) asking himself a simple question during a rainy weekend: *Can LLMs be used to hack systems?* Initial results were promising (or disturbing, depends whom you ask) and led to the creation of our motley group of academics and professional pen-testers at TU Wien's [IPA-Lab](https://ipa-lab.github.io/).
55
46
@@ -159,24 +150,28 @@ To run it, continue with the next section:
159
150
160
151
We try to keep our python dependencies as light as possible. This should allow for easier experimentation. To run the main priv-escalation program (which is called `wintermute`) together with an OpenAI-based model you need:
161
152
162
-
1. an OpenAI API account, you can find the needed keys [in your account page](https://platform.openai.com/account/api-keys)
153
+
1.**Python 3.13 or newer.** The project builds with the [uv](https://docs.astral.sh/uv/) build backend, and we recommend using `uv` to manage the environment (a plain `python -m venv` + `pip` still works too).
154
+
2. an OpenAI API account, you can find the needed keys [in your account page](https://platform.openai.com/account/api-keys)
163
155
- please note that executing this script will call OpenAI and thus charges will occur to your account. Please keep track of those.
164
-
2. a target environment to test against. You have two options:
156
+
3. a target environment to test against. You have two options:
165
157
-**Local Shell**: Use your local system (useful for testing and development)
166
158
-**SSH Target**: A remote machine accessible over SSH. You can use a deliberately vulnerable machine such as [Lin.Security.1](https://www.vulnhub.com/entry/) or a security benchmark such as our [linux priv-esc benchmark](https://github.com/ipa-lab/benchmark-privesc-linux).
167
159
168
-
To get everything up and running, clone the repo, download requirements, setup API keys and credentials, and start `wintermute.py`:
160
+
To get everything up and running, clone the repo, install the package, setup API keys and credentials, and start `wintermute`:
--log.log_dir='logs' directory for the per-run JSONL log files (default from builtin)
213
207
--log.tag='' Tag for your current run (default from builtin)
214
-
--max_turns='30' (default from .env file, alternatives: 10 from builtin)
215
-
--llm.api_key=<secret> OpenAI API Key (default from .env file)
216
-
--llm.model OpenAI model name
217
-
--llm.context_size='100000' Maximum context size for the model, only used internally for things like trimming to the context size (default from .env file)
218
-
--llm.api_url='https://api.openai.com' URL of the OpenAI API (default from builtin)
219
-
--llm.api_path='/v1/chat/completions' Path to the OpenAI API (default from builtin)
220
-
--llm.api_timeout=240 Timeout for the API request (default from builtin)
221
-
--llm.api_backoff=60 Backoff timein seconds when running into rate-limits (default from builtin)
222
-
--llm.api_retries=3 Number of retries when running into rate-limits (default from builtin)
223
-
--system='linux' (default from builtin)
224
-
--enable_explanation=False (default from builtin)
225
-
--enable_update_state=False (default from builtin)
208
+
--limits.max_rounds=100 Maximum number of rounds (0 is no limit) (default from builtin)
209
+
--limits.max_tokens=0 Maximum number of tokens (input+output+thinking, 0 is no limit) (default from builtin)
210
+
--limits.max_cost=10.0 Maximum cost in dollars (0 is no limit) (default from builtin)
211
+
--limits.max_duration=0 Maximum duration of the run in seconds (0 is no limit) (default from builtin)
212
+
--max_turns=10 (default from builtin)
213
+
--llm.api_key API key for the upstream
214
+
--llm.model model name in litellm format, e.g. 'gpt-4o' or 'openrouter/anthropic/claude-3.5-sonnet'
215
+
--llm.context_size maximum context size of the model (used for prompt trimming)
216
+
--llm.api_base='https://openrouter.ai/api' base URL of the API (default from builtin)
217
+
--llm.api_timeout=60 timeout fora single requestin seconds (default from builtin)
218
+
--llm.api_retries=3 number of retries when running into rate-limits (default from builtin)
219
+
--llm.provider='' OpenRouter provider routing, only useful when using OpenRouter, otherwise leave empty (default from builtin)
220
+
--llm.proxy='' Proxy URL for the API calls (default from builtin)
221
+
--llm.proxy_insecure=False Disable TLS certificate verification for the proxy (only for intercepting proxies like Burp/mitmproxy) (default from builtin)
226
222
--disable_history=False (default from builtin)
227
-
--hint='' (default from builtin)
223
+
--enable_compressed_history=False (default from builtin)
228
224
--conn.host
229
-
--conn.hostname
230
225
--conn.username
231
226
--conn.password
232
-
--conn.keyfilename
233
-
--conn.port='2222' (default from .env file, alternatives: 22 from builtin)
227
+
--conn.hostname='' (default from builtin)
228
+
--conn.keyfilename='' (default from builtin)
229
+
--conn.port=22 (default from builtin)
230
+
--conn.banner='' (default from builtin)
231
+
--hints='' (default from builtin)
232
+
--enable_update_state=False (default from builtin)
233
+
--enable_explanation=False (default from builtin)
234
+
--enable_structured_guidance=False (default from builtin)
235
+
--enable_cot=False (default from builtin)
236
+
--rag_path='' (default from builtin)
234
237
```
235
238
236
239
### Connection Options: Local Shell vs SSH
@@ -249,7 +252,7 @@ Use your local system for testing and development. This is useful for quick expe
249
252
2. Once you have the tmux shell running, use hackingBuddyGPT to interact with it:
0 commit comments