Skip to content

Instantly share code, notes, and snippets.

@elorest
Created November 11, 2020 21:26
Show Gist options
  • Save elorest/46a7d6a0d2a0a35ead7a0438126aa383 to your computer and use it in GitHub Desktop.
Save elorest/46a7d6a0d2a0a35ead7a0438126aa383 to your computer and use it in GitHub Desktop.
require "http"
require "random"
require "openssl/cipher"
require "crypto/subtle"
random = Random.new
key = random.random_bytes(32)
def encrypt(value : Bytes, key)
cipher = OpenSSL::Cipher.new("aes-256-cbc")
cipher.encrypt
cipher.key = key
iv = cipher.random_iv
encrypted_data = IO::Memory.new
encrypted_data.write(cipher.update(value))
encrypted_data.write(cipher.final)
encrypted_data.write(iv)
encrypted_data.to_slice
end
target_socket = "httpsocket.sock"
File.delete("httpsocket.sock") rescue "oh no!"
server = HTTP::Server.new( [HTTP::ErrorHandler.new]) do | context |
# header = Header.new(context.request.headers)
# body = context.request.body.nil? ? "" : context.request.body
# msg = Message.new(context.request)
if body = context.request.body
data = Bytes.new(context.request.headers["Content-Length"].to_i)
context.request.body.not_nil!.read_fully(data)
pp data
# context.response.write data
context.response.write encrypt(data, key)
else
context.response.write "something went wrong!".to_slice
end
# header = msg.legacy_header
# body : String = msg.payload
end
spawn do
socket = UNIXSocket.new target_socket
#request = HTTP::Request.new(method, "/", HTTP::Headers{"X-Unix-Socket" => "/tmp/httpMS.sock"})
request = HTTP::Request.new("POST", "/")
request.body = random.random_bytes(16)
request.to_io(socket)
sleep 2
pp HTTP::Client::Response.from_io(socket).body.to_slice
socket.close
end
server.bind_unix target_socket
server.listen
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment