Rating:
## Description
java SecureRandom is supposed to be, well, secure, right? nc challenge.rgbsec.xyz 7425
## Included files
Main.java
## Writeup
Browsing through the source code, the general idea of the program is that it seeds SecureRandom with a randomly determined time interval, presents you the first five numbers it generates, then it generates the 5 numbers you have to guess, and you get 20 tries to guess it. Since it's only 5 numbers that can only be 1-5 there are only 3125 possbilities. With 20 tries it doesn't seem too crazy to just generate your own random possibilities and automate the guessing. Here is my solution that does that written in Go.
    package main
    
    import (
    	"strings"
    	"fmt"
    	"net"
    	"bufio"
    	"strconv"
    	"math/rand"
    	"time"
    )
    
    //Seed doesn't really matter that much
    var r = rand.New(rand.NewSource(time.Now().UnixNano()))
    
    //Generates guesses
    func getRandString() string {
    	ret := ""
    
    	for i := 0; i < 5; i++ {
    		ret += strconv.Itoa(r.Intn(5)+1) + " "
    	}
    
    	ret += "\n"
    
    	return ret
    }
    
    func main() {
    	//Just keep running it until correctly guessed
    	for {
    		//Establish connection
    		serv := "167.172.123.213:7425"
    		conn, err := net.Dial("tcp", serv)
    		if err != nil {
    			fmt.Println(err)
    			return
    		}
    		reader := bufio.NewReader(conn)
    	
    		//Take in the first few messages from the server
    		message, _ := reader.ReadString('\n')
    		fmt.Print(message)
    		message, _ = reader.ReadString('\n')
    		fmt.Print(message)
    		message, _ = reader.ReadString('\n')
    		fmt.Print(message)
    		message, _ = reader.ReadString('\n')
    		fmt.Print(message)
    		message, _ = reader.ReadString('\n')
    		fmt.Print(message)
    		
    		//Start the 20 guesses, extra print is just because I like to see it
    		fmt.Fprintf(conn, "20\n")
    		fmt.Print("20\n")
    		
    		//Go through the 20 guesses
    		for i:=0; i < 20; i++ {
    			message, _ = reader.ReadString('\n')
    			fmt.Print(message)
    			randStr := getRandString()
    			fmt.Print(randStr)
    			fmt.Fprintf(conn, randStr)
    			message, _ = reader.ReadString('\n')
    			fmt.Print(message)
    			//until flag is delivered
    			if strings.Contains(message, "flag") {
    				message, _ = reader.ReadString('\n')
    				fmt.Print(message)
    				return
    			}
    		}
    	}
    	return
    }