ダウンロードしたファイルは次のようなjavascriptです。
var net = require('net');

flag='fake_flag';

var server = net.createServer(function(socket) {
socket.on('data', (data) => { 
//m = data.toString().replace(/[\n\r]*$/, '');
ok = true;
arr = data.toString().split(' ');
arr = arr.map(Number);
if (arr.length != 5) 
ok = false;
arr1 = arr.slice(0);
arr1.sort();
for (var i=0; i<4; i++)
if (arr1[i+1] == arr1[i] || arr[i] < 0 || arr1[i+1] > 127)
ok = false;
arr2 = []
for (var i=0; i<4; i++)
arr2.push(arr1[i] + arr1[i+1]);
val = 0;
for (var i=0; i<4; i++)
val = val * 0x100 + arr2[i];
if (val != 0x23332333)
ok = false;
if (ok)
socket.write(flag+'\n');
else
socket.write('nope\n');
});
//socket.write('Echo server\r\n');
//socket.pipe(socket);
});

HOST = '0.0.0.0'
PORT = 23333

server.listen(PORT, HOST);
処理の内容は、入力された5つの数値を昇順に並べて、1番目の数値と2番目の数値の和、2番目と3番目の数値の和、3番目と4番目の数値の和、4番目と5番目の数値の和をとり、4つの数値を得ます。その4つの数値を順に0x100を掛けながら加算していきます。その結果を0x23332333と比較して一致すればフラグを得られるというものです。
したがって、和を取った後の4つの数値が0x23(35)、0x33(51)、0x23(35)、0x33(51)であれば良いのですが、入力した数値を昇順に並べ替えて処理していますので、そう単純ではありません。

並べ替えは文字列として処理されるので、次のように数値を入力することで、フラグを得ることができます。
$ nc 47.75.4.252 23333
15 20 31 4 47
*ctf{web_chal_made_by_binary_players_lol}
フラグは、
*ctf{web_chal_made_by_binary_players_lol}