Взлом кода: Разгадка суточного мини хакатона

Bellamy Black
HOPR Russian
Published in
5 min readApr 11, 2023

--

(Оригинал статьи от 27.03.2023) Это небольшой разбор того, как решить мини хакатон, который проводился на прошлой неделе. Для некоторых из вас это был первый код, который вы когда-либо написали, поэтому для тех, кто не справился с задачей, здесь приведено краткое руководство о том, что вам нужно было сделать, чтобы решить задачу.

Задача

В рамках хакатона вам предлагалось снять ровно “1 mHOPR” с узла, который раскрыл свои учетные данные: “API URL” И “API KEY”.

API KEY, который был “ раскрыт”, на самом деле был ключом, созданным с помощью новой функции API, основанной на возможностях, для генерации токена, который позволил бы вам получить доступ только к конечной точке “accountWithdraw” узла на уровне API.

Концептуальное решение

Для связи с узлом HOPR или с другим устройством в целом, вам нужны две вещи:

  • Конечная точка для отправки ваших команд/запросов.
  • Способ структурировать команды, чтобы устройство понимало их (“актуальный API”).

Итак, чтобы решить эту задачу, вам нужно найти эти две части информации в документах HOPR.

Что вам нужно найти

Вам была предоставлена информация, необходимая для использования API “accountWithdraw”, поэтому первым шагом было найти его в документации HOPR:
https://docs.hoprnet.org/developers/rest-api.

Первые две вещи, которые вам нужно было найти:

1.Суффикс конечной точки — “/api/v2/account/withdraw”.
2. Ключ API добавляется в качестве параметра заголовка

Это, в сочетании с утечкой учетных данных, позволяет получить примерно следующую информацию.

В целом, информация, которую вы ищете, гораздо более интуитивно понятна, если вы раньше работали с подобной логикой, поэтому для таких событий мы даём советы менее опытным участникам в Telegram.

Далее необходимо найти, что включить в запрос. Здесь вы видите три параметра, все они являются необходимыми.

  • Валюта: может быть “HOPR” или “NATIVE” с точным написанием. Мы пытаемся вывести токены Hopr, поэтому нужно установить значение: “HOPR”.
  • Сумма: число, исчисляемое в наименьшей единице данной валюты. Токены HOPR имеют 18 знаков после запятой, поэтому 1 токен HOPR/mHOPR будет отображаться как “10000000000000000”.
  • Получатель: это адрес кошелька, на который вы хотите вывести средства.

Есть пример того, как форматировать параметры в содержимом запроса. Запрос состоит из полезной нагрузки и заголовка, поэтому, используя форматирование и всю найденную вами информацию. Вы должны прийти к выводу, что ваш запрос будет выглядеть примерно так:

API_URL = “http://142.93.5.175:3001/api/v2/account/withdraw"

headers = {
‘x-auth-token’: “PZjS7imRpmoPNziYF7–2kCGvG-UfaG1XsdiKEMApGV4”
}

payload = {

“amount”: “1000000000000000000”,
“currency”: “HOPR”,
“recipient”: “YOUR_WALLET_ADDRESS”

}

Это вся информация, которую вы должны были найти, чтобы сделать запрос к открытому узлу. Теперь вам нужно выбрать метод для выполнения запроса “POST”.

Как сделать запрос

Здесь приведено несколько примеров того, как сделать такой запрос, но вы можете использовать любой язык программирования или API.

Примечание:

  • Я добавил ключ/значение заголовка: ‘Content-Type’: ‘application/json’ исключительно для примера.
  • Адрес кошелька не добавлен, а срок действия токена безопасности, полученного во время хакатона истек, поэтому для использования этих методов вам потребуется заменить учетные данные на действующие.

Использование Curl

Вы можете отправить запрос через терминал с помощью curl, как показано ниже.

curl -X POST http://142.93.5.175:3001/api/v2/account/withdraw \
-H "Content-Type: application/json" \
-H "x-auth-token: PZjS7imRpmoPNziYF7-2kCGvG-UfaG1XsdiKEMApGV4" \
-d '{"amount": "1000000000000000000", "currency": "HOPR", "recipient": "YOUR_WALLET_ADDRESS"}'

Использование Postman

Вы можете отправить запрос с помощью API, например Postman, в браузере/на рабочем столе. С помощью Postman вам нужно будет создать новый запрос “POST” к необходимой конечной точке и добавить значения в заголовок и тело запроса, как показано ниже.

Использование Python

В python вы можете аналогично изменить формат запроса, используя библиотеки json/requests.

import requests
import json

api_key = 'FBg4ns - 2RHeNsB754tx5uM8v9lVXLSnN7IiSEVl09I'
api_url = "http://142.93.5.175:3001/api/v2/account/withdraw"

payload = json.dumps({
"amount": "1000000000000000000",
"currency": "HOPR",
"recipient": "0x5E14F9ba0F2aa3D3A11cF2823d0E45F0636a8baf"
})

headers = {
'x-auth-token': api_key,
'Content-Type': 'application/json'
}

response = requests.request("POST", api_url, headers=headers, data=payload)

Использование JavaScript (Node.js)

Чтобы выполнить запрос с помощью JavaScript и Node.js, необходимо установить пакет node-fetch:

npm install node-fetch

Затем создайте новый файл JavaScript (например, withdraw.js) и добавьте следующий код:

const fetch = require(‘node-fetch’);
const API_URL = 'http://142.93.5.175:3001/api/v2/account/withdraw';
const headers = {
'Content-Type': 'application/json',
'x-auth-token': 'PZjS7imRpmoPNziYF7–2kCGvG-UfaG1XsdiKEMApGV4',
};

const payload = {
amount: '1000000000000000000',
currency: 'HOPR',
recipient: 'YOUR_WALLET_ADDRESS',
};

fetch(API_URL, {
method: 'POST',
headers: headers,
body: JSON.stringify(payload),
})

.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error('Error:', error));

Сохраните файл и запустите скрипт с помощью Node.js:

node withdraw.js

В результате будет выполнен запрос и выведен результат в консоль.

Полезные навыки

Независимо от метода, ключевым моментом является то, как концептуально взаимодействовать с узлом HOPR. Если вы понимаете основы логики запроса/ответа, вы можете создать любое приложение с HOPR, используя любой язык.

От простых скриптов до браузеров, игр или сложных сервисов, возможности конфиденциальности, которые предлагает HOPR, находятся на уровне передачи сообщений, поэтому являются дополнительными для любого приложения, которое вы разрабатываете. Если вы новичок в сообществе, начните с запуска узла HOPR или изучите первый разработанный на HOPR сервис: RPCh.

Логика запроса/ответа

Логика запроса/ответа является основополагающей в вычислительной технике и не представляет собой ничего нового, но она также является основой некоторых из самых больших проблем конфиденциальности в Интернете.

Просто взгляните на проблему этого хакатона. Для выполнения запроса к открытому узлу требовалось передать несколько параметров: токен, сумму и адрес получателя.

Теперь представьте себе аналогичный сценарий для всего, что вы делаете в Интернете: открываете картинку, нажимаете на кнопку, рассматриваете товары. Каждое из этих мельчайших действий требует взаимодействия между устройствами (запросы/ответы).

Проблема возникает, когда все эти мелкие детали и действия отмечаются временем и привязываются к вашей личности (IP-адрес), и кто-то может сидеть и видеть практически все, что вы делаете в Интернете, и как именно вы проводите свое время. Именно так плохо каждый раз, когда вы используете свой криптокошелек, поскольку вы раскрываете каждый свой запрос и свой IP-адрес провайдеру RPC. Это тот же самый тип централизованной обработки данных, из-за которого Web 2.0 так страдает от сбора данных.

И это именно та проблема, которую решает RPCh.

Sebastian Bürgel
Основатель HOPR

--

--