Network Attacks
Desc
Beberapa challenge CryptoHack bersifat interaktif, jadi kita harus berkomunikasi langsung dengan server challenge melalui jaringan. Pola ini sering dipakai untuk simulasi service rentan, oracle, atau skenario man-in-the-middle.
Untuk menjaga format data tetap konsisten, server CryptoHack biasanya mengirim dan menerima objek JSON. Di Python, komunikasi socket seperti ini bisa dipermudah dengan pwntools, sedangkan parsing datanya memakai library bawaan json.
Pada challenge ini, kita connect ke socket.cryptohack.org port 11112, lalu mengirim JSON dengan key buy dan value flag.
Script contoh awalnya mengirim {"buy": "clothes"}. Kita hanya perlu mengganti value tersebut menjadi flag.
Connect at socket.cryptohack.org 11112
Attachment
#!/usr/bin/env python3
from pwn import * # pip install pwntools
import json
HOST = "socket.cryptohack.org"
PORT = 11112
r = remote(HOST, PORT)
def json_recv():
line = r.readline()
return json.loads(line.decode())
def json_send(hsh):
request = json.dumps(hsh).encode()
r.sendline(request)
print(r.readline())
print(r.readline())
print(r.readline())
print(r.readline())
request = {
"buy": "clothes"
}
json_send(request)
response = json_recv()
print(response)Solution
Download script contoh, ubah request JSON, lalu jalankan.
wget https://cryptohack.org/static/challenges/pwntools_example_72a60ff13df200692898bb14a316ee0b.py -O pwntools_example.py
nano pwntools_example.py
# Ubah request dictionary menjadi {"buy": "flag"}, lalu simpan.
python3 pwntools_example.pyBagian penting script adalah remote(HOST, PORT) untuk membuka koneksi TCP ke server, json.dumps() untuk mengubah dictionary Python menjadi string JSON, dan json.loads() untuk mengubah response JSON dari server kembali menjadi dictionary. Setelah request menjadi {"buy": "flag"}, server mengirim flag sebagai response.
Summary
Challenge ini memperkenalkan komunikasi network berbasis JSON. Library yang dipakai adalah pwntools untuk koneksi socket dan json untuk encode/decode data JSON.
Flag
crypto{sh0pp1ng_f0r_fl4g5}