|
5 | 5 | import logging |
6 | 6 | from os import path |
7 | 7 | from getpass import getpass |
| 8 | +from bs4 import BeautifulSoup |
8 | 9 | from requests.utils import CaseInsensitiveDict |
9 | 10 | from requests.sessions import urljoin, urlparse, Session |
10 | 11 | from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter |
11 | 12 |
|
12 | | -__version__ = "0.2.0" |
| 13 | +__version__ = "0.2.1" |
13 | 14 |
|
14 | 15 |
|
15 | 16 | class BadUserNameOrPasswordException(Exception): |
@@ -122,7 +123,8 @@ def version(self): |
122 | 123 |
|
123 | 124 | def __get_nonce(self): |
124 | 125 | res = self.session.get(urljoin(self.url, "/login")) |
125 | | - return re.search('<input type="hidden" name="nonce" value="(.*?)">', res.text).group(1) |
| 126 | + html = BeautifulSoup(res.text, 'html.parser') |
| 127 | + return html.find("input", {'type': 'hidden', 'name': 'nonce'}).get("value") |
126 | 128 |
|
127 | 129 | def login(self, username, password): |
128 | 130 | next_url = '/challenges' |
@@ -181,7 +183,7 @@ def iter_challenges(self): |
181 | 183 |
|
182 | 184 |
|
183 | 185 | def get_credentials(username=None, password=None): |
184 | | - username = username or os.environ.get('CTF_USERNAME', input('User: ')) |
| 186 | + username = username or os.environ.get('CTF_USERNAME', input('User/Email: ')) |
185 | 187 | password = password or os.environ.get('CTF_PASSWORD', getpass('Password: ', stream=False)) |
186 | 188 |
|
187 | 189 | return username, password |
@@ -222,7 +224,6 @@ def main(args=None): |
222 | 224 |
|
223 | 225 | ctf = CTFs.get(sys_args['ctf_platform'])(sys_args['url']) |
224 | 226 | if not sys_args['no_login'] or not os.environ.get('CTF_NO_LOGIN'): |
225 | | - print(get_credentials(sys_args['username'], sys_args['password'])) |
226 | 227 | if not ctf.login(*get_credentials(sys_args['username'], sys_args['password'])): |
227 | 228 | raise BadUserNameOrPasswordException() |
228 | 229 |
|
|
0 commit comments