Here you can see g-code parser, written in JavaScript to use in microcontroller (like espruino). But you can run it in browser, because it don't use any specific features.
function gcode(str){
//Removes comment, parses command name and args
const [,f,args] = (str.match(/^([GM]\d+) ([^;]+)/) || [,"",""]);
//A1.2 B43 C -> {A: 1.2, B: 42, C: 0}
eval(f+"({"+args.replace(/(\w)([\d\.]*)/g,"$1: $2+0,")+"})");
}
const G1 = console.log;
gcode(prompt("crackme"));
When you pass G1 X3 Y4.53 Z42
to gcode()
, it runs G1({X: 3, Y: 4.53, Z: 42})
. As you can see, it uses eval
, protected by regexp. But despite of this, you can attack this function and cause remote code execution. Your goal is to run alert("pwned")
. This is code golf, so shortest working input wins
alert`pwned`
fine? \$\endgroup\$alert("pwned")
was run]]. \$\endgroup\$