Эквивалент Bash 'printf' для командной строки?

Я хочу передать некоторый ввод String в небольшую программу C в командной строке Windows. В bash я мог использовать

$ printf "AAAAA\x86\x08\x04\xed" | ./program

По сути, мне нужно что-то, чтобы избежать этих шестнадцатеричных чисел в командной строке.

Есть ли эквивалентная или похожая команда для printf в командной строке / powershell?

Спасибо


person Calum Murray    schedule 13.03.2011    source источник
comment
Почему этот помеченный эксплойт ...?   -  person Lekensteyn    schedule 13.03.2011
comment
@Lekensteyn: посмотрите на экранированные байты. Легко представить, что это может быть какой-то код.   -  person 0xC0000022L    schedule 13.03.2011
comment
Поскольку он использует уязвимость переполнения буфера, мне это нужно. И люди, регулярно их эксплуатирующие, могут знать ответ ...   -  person Calum Murray    schedule 13.03.2011


Ответы (2)


В PowerShell вы бы сделали это так:

"AAAAA{0}{1}{2}{3}" -f 0x86,0x08,0x04,0xed | ./program
person Keith Hill    schedule 13.03.2011
comment
\x08 действительно был бы escape-символом 8 в bash, поэтому последний пример верен. - person Joey; 13.03.2011
comment
Да, думаю, второй пример - это то, что я искал. Спасибо, Кейт и Джоуи! - person Calum Murray; 13.03.2011

Недавно я сам задавал себе тот же вопрос и решил, что для тех, кто разрабатывает эксплойты для Windows, стоит установить cygwin :)

В противном случае можно было бы создать небольшую программу на C, имитирующую функциональность printf:

#include <string.h>

int main(int argc, char *argv[])
{
    int i;
    char tmp[3];

    tmp[2] = '\0';

    if (argc > 1) {
        for (i = 2; i < strlen(argv[1]); i += 4) {
            strncpy(tmp, argv[1]+i, 2);
            printf("%c", (char)strtol(tmp, NULL, 16));
        }
    }
    else {
        printf("USAGE: printf.exe SHELLCODE\n");
        return 1;
    }

    return 0;
}

Программа обрабатывает только строки «\ xAB \ xCD», но при необходимости ее не составит труда расширить для обработки строк «AAAAA \ xAB \ xCD».

person golem    schedule 15.11.2015