Banking Issue
Description
Author: JW
You're at the bank with your girlfriend, she's upset She's going off about your empty bank balance 'Cause she doesn't get your money like I do
Unfortunately, you only have $16 left in your bank account. Feeling too poor to even sing along to Taylor Swift in the car (after all, the radio needs power, which costs money), you wonder, if only there was a way for me to pull off a bank heist and get a hundred thousand dollars…
Analysis
#!/usr/local/bin/python
import os
balances = [10, 20, 50, 16, 29, 52, 100000]
PERMS_ADMIN = { "MAX_INDEX": len(balances) - 1 }
PERMS_AGENT = { "MAX_INDEX": len(balances) - 2 }
def main():
perms = PERMS_AGENT
wallet = 0
idx = int(input("Which account would you like to withdraw from? "))
if idx > perms["MAX_INDEX"]:
print("Unauthorized")
return
wallet += balances[idx]
balances[idx] = 0
print(f"You now have ${wallet} in your wallet.\n")
if wallet >= 100000:
print("Thanks for storing a lot of $$ at our bank.")
print("You qualify for free wealth management services.")
print(f"To access this service, please email {os.getenv('FLAG')}@bxmctf.bank.\n")
print("Thank you for banking with BxMCTF Bank.")
if __name__ == "__main__":
main()
The program is simple, there's possible balances we can access and permissions. Program grants us PERMS_AGENT
meaning we cannot make a withdraw of $100'000
, or can we?
Index is only checked for positive numbers, but python supports negative indexing (going backwards). What will happen if we withdraw for -1
index?
Solution
└─$ nc <SERVER_IP> <SERVER_PORT>
Which account would you like to withdraw from? -1 # <-- Input
You now have $100000 in your wallet.
Thanks for storing a lot of $$ at our bank.
You qualify for free wealth management services.
To access this service, please email ctf{REDACTED}@bxmctf.bank.
Thank you for banking with BxMCTF Bank.
Last updated