Как получить доступ администратора с помощью этого кода? - PullRequest
0 голосов
/ 28 февраля 2019

Я участвую в конкурсе и не могу решить эту задачу.Цель состоит в том, чтобы войти с различными учетными записями, перечисленными в словаре секретов, не зная пин-коды.Изменение кода не допускается.Например, вы можете войти с гостем, используя ввод:

anything
0

, а с помощью пользователя:

user
-1

Я не могу понять, как войти с администратором.

#!/usr/bin/python3
# Change the pin codes here before using this software:
secrets = {
    "guest": 123456,
    "user": 123456,
    "admin": 123456
    }

def authenticate():
  selected_user = input("Enter your username: ")

  if selected_user.lower() == "admin":
    print("Administrator access is disabled on this interface!")
    return None

  real_user = "guest"
  real_pin = 0

  for (user, pin) in secrets.items():
    if user.upper() == selected_user.upper():
      real_user = user
      real_pin = pin

  try:
    pin_as_string = input("Enter your PIN code: ")
    selected_pin = int(pin_as_string)
  except:
    print("Some error occured while reading PIN code, please try again!")
    return None

  if not pin_as_string.isdigit():
    print("Warning: the PIN contains a non-digit character!")

  elif selected_pin != real_pin:
    print("Incorrect PIN code!")
    return None

  return real_user

user = authenticate()
if user is not None:
  print("Successful login as", user)

1 Ответ

0 голосов
/ 28 февраля 2019

Вы хотите, чтобы символ отображался на букву "ADMIN" в верхнем регистре.Это легко спросить у Python:

lst = []
for i in range(0xffff):
    try:
        c = chr(i)
        if c.upper() in "ADMIN": print(hex(i), c, c.lower())
    except Exception as e:       # don't break if any exception
        print(i, "->", e)

Вы получаете

0x41 A a
0x44 D d
0x49 I i
0x4d M m
0x4e N n
0x61 a a
0x64 d d
0x69 i i
0x6d m m
0x6e n n
0x131 ı ı

Это интересное значение является последним: U + 0131, которое является МАЛЕНЬКОЕ ПИСЬМО МАЛЕНЬКОГО БУКВЫ I в соответствии с модулем unicodedata.

В Microsoft Windows этот символ существует в кодовой странице 850: print(chr(0x131).encode('cp850')) дает b'\xd5'.Так что последовательность Alt Num 2 Num 1 Num 3 позволит ввести его в консоли (hex(213) is '0xd5').И +1 или -1 как пароль сделают свое дело!С моей собственной консоли:

Enter your username: admın
Enter your PIN code: +1
Warning: the PIN contains a non-digit character!
Successful login as admin

Не уверен для других систем, но Unicode input в Википедии может помочь.

...