Skip to content

Instantly share code, notes, and snippets.

@SiD3W4y
Created March 2, 2017 18:28
Show Gist options
  • Save SiD3W4y/fb2b14955d5c58d26bc2ff3fd36f711f to your computer and use it in GitHub Desktop.
Save SiD3W4y/fb2b14955d5c58d26bc2ff3fd36f711f to your computer and use it in GitHub Desktop.
extern crate crypto;
extern crate rand;
use std::thread;
use std::io::{Read,Write,BufRead,BufReader,BufWriter};
use std::net::{TcpListener, TcpStream};
use rand::Rng;
use crypto::md5::Md5;
use crypto::digest::Digest;
static charset: &'static str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
static flag: &'static str = "CTF{I_4M_N0T_A_P4Nd4_tH0ugH}";
fn random_string() -> (String,String) {
let mut sh = Md5::new();
let size = rand::thread_rng().gen_range(32,64);
let mut output: Vec<char>= Vec::new();
for i in 0..size {
let rnd_index = rand::thread_rng().gen_range(0,charset.len());
output.push(charset.chars().nth(rnd_index).unwrap());
}
let result: String = output.into_iter().collect();
sh.input_str(&result);
(result,sh.result_str())
}
fn handle_client(mut stream: TcpStream){
let mut answer = String::new();
let mut counter = 10000;
let mut input = BufReader::new(&stream);
let mut output = BufWriter::new(&stream);
loop {
let (sample,target) = random_string();
write!(output,"{}\n",sample);
output.flush();
input.read_line(&mut answer).unwrap();
answer = answer.replace("\n","");
if answer == target {
counter -= 1;
if counter == 0 {
write!(output,"{}\n",flag);
return
}
}else{
return
}
answer = String::new();
}
}
fn main() {
println!("Starting server on port -> 22222");
let server_socket = TcpListener::bind("127.0.0.1:22222").unwrap();
for stream in server_socket.incoming() {
match stream {
Ok(stream) => {
thread::spawn(move || {
handle_client(stream);
});
},
Err(e) => {}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment