Skip to content Skip to navigation

Rbox

Category: 
 
Задание:
 
Unhash this:
5ebad7dcbd73584f32ef949486a161a1e9f10e48ade43b03649a2ca680f327c4
 
nc 195.133.87.165 5555
Auth token: rb0xch4ll3ng3
 
Решение:
 
Подключаемся к серверу, выполнив команду "nc 195.133.87.165 5555", и видим приветствие:
 
RX-Box hasher v0.1
------------------
Auth:
 
Вводим токен:
 
rb0xch4ll3ng3
Enter message:
 
Теперь можно ввести любое сообщение, и оно будет прохешировано. Вводим разные короткие сообщения и получаем:
"0" - "3ad2b2fcdb1f39281286e7b4e4995795d8906d709e82583b51ff18c3b4c745a70ad2b2fc"
"1" - "3bd2b2fcdb1f39281286e7b4e4995795d8906d709e82583b51ff18c3b4c745a70ad2b2fc"
"00" - "3ae2b2fcdb1f39281286e7b4e4995795d8906d709e82583b51ff18c3b4c745a70ad2b2fc"
"001"-"3ae283fcdb1f39281286e7b4e4995795d8906d709e82583b51ff18c3b4c745a70ad2b2fc"
 
Видно, что каждый байт исходного текста отображается в один байт (два hex-символа) хеша, то есть восстановить хеш можно простым посимвольным перебором. Еще можно заметить интересный момент: длина возвращаемого хеша - 72 hex-символа, в то же время нам дано лишь 64 символа, значит нужно подобрать лишь первые 32 байта сообщения.
 
Далее просто пишем скрипт, который будет в цикле подключаться к серверу и подбирать хеш посимвольно.
 
Например такой:
 
#!/usr/bin/env python
from socket import create_connection
from time import sleep
import string
 
hash = "5ebad7dcbd73584f32ef949486a161a1e9f10e48ade43b03649a2ca680f327c4"
 
message = ""
end1 = 9
end2 = 2
 
for i in xrange(0,32,1):
    for c in string.printable:
        con = create_connection(('195.133.87.165', 5555))
        con.recv(1024)
        con.recv(1024)
        con.send("rb0xch4ll3ng3\n")
        sleep(0.1)
 
        con.recv(1024)
        con.send(message+c+"\n")
        sleep(0.02)
 
        res = con.recv(1024)
        if res[7:end1] == hash[0:end2]:
            message = message + c
            print message
            end1 = end1 +2
            end2 = end2 +2
            break
 
print ""
print "Message: " + message
print ""
 
Запускаем скрипт и видим, как он постепенно подбирает исходное сообщение. В конце работы печатается результат:
 
Message: The flag is b8641ac83fc85e4e44bc
 
Флаг: b8641ac83fc85e4e44bc
 
Attachments: