Неплохой пример того, как особенности отдельно взятого парсера и окружения приложения могут способствовать успешной атаке на него.
Вчера в одном из чатов всплыла задачка по %subj%. Речь шла о возможности эксплуатации уязвимости к RCE через инъекцию с фильтрацией приложением всех пробельных символов в векторе атаки. Оказалось, что это вполне возможно. У команды echo весьма своеобразный парсер, благодаря которому её аргумент может быть отделён от неё самой не только пробелом. Тупой фаззинг по всем валидным символам от 0 до 0xffff в UTF-8 шаблона `echo{chr}test` даёт следующие варианты, допустимые в качестве возможных разделителей в echo:
0020, ' '
0028, '('
002B, '+'
002C, ','
002E, '.'
002F, '/'
003A, ':'
003B, ';'
003D, '='
005B, '['
005C, '\'
005D, ']'
00A0, ' '
1680, '?'
180E, '?'
2000, ' '
2001, ' '
2002, ' '
2003, ' '
2004, ' '
2005, ' '
2006, ' '
2007, ' '
2008, ' '
2009, ' '
200A, ' '
2028, '?'
2029, '?'
202F, ' '
205F, '?'
3000, '?'
Т.е., к примеру, `echo=calc.exe` выведет на экран `calc.exe` без знака равенства. А всё, что может быть выведено с помощью echo, может быть выполнено с помощью CMD: `echo=calc.exe|cmd`. Остаётся вопрос, что делать с командами, парсеры аргументов которых не позволяют подобные трюки, например ping? И тут тоже нашлось решение: пробел можно брать из переменной окружения, в значении которой он присутствует на всех системах (по крайней мере, в конфигурации по умолчанию). Одной из таких переменных является PROGRAMFILES, содержащая пробел в 10 символе своего значения, а следовательно, получаем: `echo=ping%PROGRAMFILES:~10,-5%8.8.8.8|cmd`
Voila

... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Voila 
Зачем же так сложно?
по сути все родные команды cmd.exe прекрасно работают без пробелов. Так что вопрос именно к консольным утилитам, а не командам cmd.
Соответственно тому, кто придумал фильтровать по пробелу надо оторвать руки. Командами оболочки можно много что сделать нехорошего
Здравствуйте, DOOM, Вы писали:
DOO>Зачем же так сложно?
DOO>Image: 5ac76-clip-7kb.png
Речь ведь о полноценном RCE.
DOO>по сути все родные команды cmd.exe прекрасно работают без пробелов.
Точно не все. С set такое не прокатывает, например.
DOO>Соответственно тому, кто придумал фильтровать по пробелу надо оторвать руки. Командами оболочки можно много что сделать нехорошего
Только на командах, изобразить полноценное RCE без пробелов у меня не получилось
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Точно не все. С set такое не прокатывает, например.
нашел 2 неполных решения

Первое:
set/A"MYVAR=1"
тут минус, что через /A можно присвоить только число и выражение в правой части тоже должно быть числом.
Второе:
set/P"MYVAR=1"<text.txt
в переменную MYVAR будет записано содержимое файла text.txt.
Пример:
D:\temp\bomb>set/P"VAR1="<examp.txt
D:\temp\bomb>echo %VAR1%
this is text
D:\temp\bomb>type examp.txt
this is text
D:\temp\bomb>
KV>Только на командах, изобразить полноценное RCE без пробелов у меня не получилось 
Значит надо еще пытаться!