+ Reply to Thread
Results 1 to 15 of 15

Thread: Вопрос о параметрах, передаваемых в программу

  1. #1

    Default Вопрос о параметрах, передаваемых в программу

    Здравствуйте уважаемые форумчане. У меня собственно два вопросов:
    1) Что есть argv['A'],argv['B'] ? Сначала я думал, что это как бы асоциативный доступ к первому и второму параметру. Написал тест вот такой
    Code:
    int main(int argc ,char* argv[])
    {
    if(argc>2)
    {
    cout<<argv['A']<<endl;
    cout<<argv['B']<<endl;
    }
    return 0;
    }

    На что мне вывелось не совсем то что я ожидал.

    Как изменить эти параметры ? что нужно передать в параметры к программе?
    2)Если я передаю в параметрах программы строки вида \хХХ я правильно понимаю что они будут интерпретироваться как байты?так как char* argv[]

    Заранее благодарю !
    Last edited by ximera; 02-09-2014 at 21:44.

  2. Пользователь сказал cпасибо:
    ximera (28-08-2014)
  3. #2

    Default Re: Вопрос о параметрах, передаваемых в программу

    Quote Originally Posted by Shizoid View Post
    ... Сначала я думал, что это как бы асоциативный доступ к первому и второму параметру. ...
    Мысль верная. Но зачем получать тогда доступ к параметрам "А" и "В", что фактически дает доступ к 65 и 66-му параметрам (ascii 'A' - 0x41; 'B' - 0x42).
    argv[0] - полный путь к запускаемой программе
    argv[1]..argv[N] - доступ к параметрам командной строки, как С строкам
    Last edited by OKOB; 28-08-2014 at 10:16.

  4. 4 пользователя(ей) сказали cпасибо:
    Dark Koder (28-08-2014) Shizoid (28-08-2014) root (28-08-2014) ximera (28-08-2014)
  5. #3

    Default Re: Вопрос о параметрах, передаваемых в программу

    Уважаемый OKOB большое вам спасибо за ответ, я протестировал получается не к 65 и 66 ,а к 64 и 65 , так как индексация в массиве c 0 . И у меня так и не получается решить второй вопрос как же передать в программу парметром байты. Пробовал "\x00","\00","\0",\x00,\00,\0 .Странно что не работает \0 так как это же Escape последовательность в линукс терминале нуль байта.

  6. Пользователь сказал cпасибо:
    ximera (28-08-2014)
  7. #4

    Default Re: Вопрос о параметрах, передаваемых в программу

    Получаешь параметр в виде строки и паришь его в значение.
    Code:
    unsigned char param1;
    sscanf(argv[1], "%02X", &param1);

  8. 2 пользователя(ей) сказали cпасибо:
    Dark Koder (29-08-2014) ximera (28-08-2014)
  9. #5

    Default Re: Вопрос о параметрах, передаваемых в программу

    Я понимаю, но у меня нет возможности вносить изменения в исполняемый файл. Я просто таск пытаюсь решить, и не вьеду, как правильно передать программе массив байтов

  10. #6

    Default Re: Вопрос о параметрах, передаваемых в программу

    PWN??
    Нужно смотреть как они в программе парсятся.

    На linux если принимается через поток ввода (например через getchar();):
    python -c 'print "\x00\x01\x02"' | ./task

    или через файл для множественного использования
    python -c 'print "\x00\x01\x02"' > /tmp/param_fail
    cat /tmp/param_fail | ./task

  11. 2 пользователя(ей) сказали cпасибо:
    Dark Koder (29-08-2014) ximera (28-08-2014)
  12. #7

    Default Re: Вопрос о параметрах, передаваемых в программу

    Quote Originally Posted by OKOB View Post
    PWN??
    Ага он самый.
    Я так пытался сделать , только через echo -e
    Code:
    echo -e "\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x20\x0a\x0d \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00" > command

    Затем
    Code:
    cat command | ./1

    Но получается что параметров нет

  13. Пользователь сказал cпасибо:
    ximera (29-08-2014)
  14. #8

    Default Re: Вопрос о параметрах, передаваемых в программу

    Quote Originally Posted by Shizoid View Post
    Но получается что параметров нет
    Ну в таком виде они в параметры не попадут. Это перенаправление на стандартный поток ввода, который может быть получен через getchar(), gets(), scanf(), fread() и т.д.

    Сомневаюсь что там действительно необходим ввод через параметры командной строки NUL байтов которые играют роль признака конца строки. Вы пытаетесь их использовать для помещения payload в необходимое место, хотя обычно для этого используют символы "А", "В" или 0x90 перед шелкодом.

    Попробуйте

    Code:
    python -c 'import subprocess; subprocess.call(["./1", "A"*65+"\x20\x0a\x0d"+"B"*33])'

  15. Пользователь сказал cпасибо:
    ximera (29-08-2014)
  16. #9
    ximera's Avatar

    Default Re: Вопрос о параметрах, передаваемых в программу

    Quote Originally Posted by Shizoid View Post
    Я так пытался сделать , только через echo -e
    Можно попробовать еще так:

    Code:
    echo -ne  


    Quote Originally Posted by OKOB View Post
    Сомневаюсь что там действительно необходим ввод через параметры командной строки NUL байтов которые играют роль признака конца строки. Вы пытаетесь их использовать для помещения payload в необходимое место, хотя обычно для этого используют символы "А", "В" или 0x90 перед шелкодом.
    Может действительно попробовать инные символы?

    А вообще советую глянуть записи трансляций geohot'a на twitch, Я там парочку фишек поймал пока смотрел.
    Чтобы избегать ошибок, надо набираться опыта; чтобы набираться опыта, надо делать ошибки. © Лоренс Питер

    Неизбежное прими достойно. © Сенека Луций Анней

    Господи... храни сумасшедших. © Сумасшедший Фрэнки

  17. #10

    Default Re: Вопрос о параметрах, передаваемых в программу

    Пробовал другие символы. Моя последняя идея заключалась в экранировании:
    0х20 - пробел - \<Здесь пробел>
    0х0А - перенос строки - \n
    0x0D - возврат каретки -\r
    0х00 - нуль байт - \0
    И передать такой вход :
    Code:
    ./1 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A \0 \ \n\r A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

    Опять не сработало.
    Ниже оставлю часть кода которую я пытаюсь понять . Может быть я вобще не в том напровлении иду


    P.S Через Python пробывал , не помогло.

  18. #11
    ximera's Avatar

    Default Re: Вопрос о параметрах, передаваемых в программу

    Параметры считаются включая имя программы, то есть надо передать на вход 99 параметров. Но даже так оно не отрабатывает, тогда Я скопировал код, и немного подкоректировал его таким образом, для того чтобы понимать картину происходящего:

    Code:

    printf("Welcome to pwnable.kr\n");
    printf("Let's see if you know how to give input to program\n");
    printf("Just give me correct inputs then you will get the flag :)\n");

    printf("argc = %d", argc);

    // argv
    if (argc != 100)
    return 0;
    else
    printf("1\n");

    if (strcmp(argv['A'],"\x00"))
    return 0;
    else
    printf("2\n");

    if (strcmp(argv['B'],"\x20\x0a\x0d"))
    return 0;
    else
    printf("3\n");

    printf("Stage 1 clear!\n");


    Запустив его с такими параметрами:

    Code:
    ./a.out $(python -c 'print "a "*99')


    Получил вот такой вывод:

    Code:
    Welcome to pwnable.kr                                                                                                 
    Let's see if you know how to give input to program
    Just give me correct inputs then you will get the flag :)
    argc = 1001


    Хотя если запускать с 98 или 100 символами получаем нормальную калькуляцию, 99 и 101 в argc.

    Внимание вопрос к знатокам, как так получается то, что передав 99 параметров мы получаем значение argc равным 1001?

    UPD:

    Все решилось, надо было добавить перенос строки:

    Code:
    printf("argc = %d\n", argc);
    Last edited by ximera; 29-08-2014 at 20:26.
    Чтобы избегать ошибок, надо набираться опыта; чтобы набираться опыта, надо делать ошибки. © Лоренс Питер

    Неизбежное прими достойно. © Сенека Луций Анней

    Господи... храни сумасшедших. © Сумасшедший Фрэнки

  19. #12

    Default Re: Вопрос о параметрах, передаваемых в программу

    Просто слешами шелл не экранирует. Будет передавать просто строку \0 \n и т.д.
    Code:

    ~/ $ python -c 'import sys; print [(a,a.encode("hex")) for a in sys.argv]' asdf `python -c 'for i in xrange(256): print chr(i)'`
    [('-c', '2d63'), ('asdf', '6***6466'), ('', ''), ('\x01', '01'), ('\x02', '02'), ('\x03', '03'), ('\x04', '04'), ('\x05', '05'), ('\x06', '06'), ('\x07', '07'), ('\x08', '08'), ('\x0b', '0b'), ('\x0c', '0c'), ('\r', '0d'), ('\x0e', '0e'), ('\x0f', '0f'), ('\x10', '10'), ('\x11', '11'), ('\x12', '12'), ('\x13', '13'), ('\x14', '14'), ('\x15', '15'), ('\x16', '16'), ('\x17', '17'), ('\x18', '18'), ('\x19', '19'), ('\x1a', '1a'), ('\x1b', '1b'), ('\x1c', '1c'), ('\x1d', '1d'), ('\x1e', '1e'), ('\x1f', '1f'), ('!', '21'), ('"', '22'), ('#', '23'), ('$', '24'), ('%', '25'), ('&', '26'), ("'", '27'), ('(', '28'), (')', '29'), ('*', '2a'), ('+', '2b'), (',', '2c'), ('-', '2d'), ('.', '2e'), ('/', '2f'), ('0', '30'), ('1', '31'), ('2', '32'), ('3', '33'), ('4', '34'), ('5', '35'), ('6', '36'), ('7', '37'), ('8', '38'), ('9', '39'), (':', '3a'), (';', '3b'), ('<', '3c'), ('=', '3d'), ('>', '3e'), ('?', '3f'), ('@', '40'), ('A', '41'), ('B', '42'), ('C', '43'), ('D', '44'), ('E', '45'), ('F', '46'), ('G', '47'), ('H', '48'), ('I', '49'), ('J', '4a'), ('K', '4b'), ('L', '4c'), ('M', '4d'), ('N', '4e'), ('O', '4f'), ('P', '50'), ('Q', '51'), ('R', '52'), ('S', '53'), ('T', '54'), ('U', '55'), ('V', '56'), ('W', '57'), ('X', '58'), ('Y', '59'), ('Z', '5a'), ('[', '5b'), ('\\', '5c'), (']', '5d'), ('^', '5e'), ('_', '5f'), ('`', '60'), ('a', '61'), ('b', '62'), ('c', '63'), ('d', '64'), ('e', '65'), ('f', '66'), ('g', '67'), ('h', '68'), ('i', '69'), ('j', '6a'), ('k', '6b'), ('l', '6c'), ('m', '6d'), ('n', '6e'), ('o', '6f'), ('p', '70'), ('q', '71'), ('r', '72'), ('s', '73'), ('t', '74'), ('u', '75'), ('v', '76'), ('w', '77'), ('x', '78'), ('y', '79'), ('z', '7a'), ('{', '7b'), ('|', '7c'), ('}', '7d'), ('~', '7e'), ('\x7f', '7f'), ('\x80', '80'), ('\x81', '81'), ('\x82', '82'), ('\x83', '83'), ('\x84', '84'), ('\x85', '85'), ('\x86', '86'), ('\x87', '87'), ('\x88', '88'), ('\x89', '89'), ('\x8a', '8a'), ('\x8b', '8b'), ('\x8c', '8c'), ('\x8d', '8d'), ('\x8e', '8e'), ('\x8f', '8f'), ('\x90', '90'), ('\x91', '91'), ('\x92', '92'), ('\x93', '93'), ('\x94', '94'), ('\x95', '95'), ('\x96', '96'), ('\x97', '97'), ('\x98', '98'), ('\x99', '99'), ('\x9a', '9a'), ('\x9b', '9b'), ('\x9c', '9c'), ('\x9d', '9d'), ('\x9e', '9e'), ('\x9f', '9f'), ('\xa0', 'a0'), ('\xa1', 'a1'), ('\xa2', 'a2'), ('\xa3', 'a3'), ('\xa4', 'a4'), ('\xa5', 'a5'), ('\xa6', 'a6'), ('\xa7', 'a7'), ('\xa8', 'a8'), ('\xa9', 'a9'), ('\xaa', 'aa'), ('\xab', 'ab'), ('\xac', 'ac'), ('\xad', 'ad'), ('\xae', 'ae'), ('\xaf', 'af'), ('\xb0', 'b0'), ('\xb1', 'b1'), ('\xb2', 'b2'), ('\xb3', 'b3'), ('\xb4', 'b4'), ('\xb5', 'b5'), ('\xb6', 'b6'), ('\xb7', 'b7'), ('\xb8', 'b8'), ('\xb9', 'b9'), ('\xba', 'ba'), ('\xbb', 'bb'), ('\xbc', 'bc'), ('\xbd', 'bd'), ('\xbe', 'be'), ('\xbf', 'bf'), ('\xc0', 'c0'), ('\xc1', 'c1'), ('\xc2', 'c2'), ('\xc3', 'c3'), ('\xc4', 'c4'), ('\xc5', 'c5'), ('\xc6', 'c6'), ('\xc7', 'c7'), ('\xc8', 'c8'), ('\xc9', 'c9'), ('\xca', 'ca'), ('\xcb', 'cb'), ('\xcc', 'cc'), ('\xcd', 'cd'), ('\xce', 'ce'), ('\xcf', 'cf'), ('\xd0', 'd0'), ('\xd1', 'd1'), ('\xd2', 'd2'), ('\xd3', 'd3'), ('\xd4', 'd4'), ('\xd5', 'd5'), ('\xd6', 'd6'), ('\xd7', 'd7'), ('\xd8', 'd8'), ('\xd9', 'd9'), ('\xda', 'da'), ('\xdb', 'db'), ('\xdc', 'dc'), ('\xdd', 'dd'), ('\xde', 'de'), ('\xdf', 'df'), ('\xe0', 'e0'), ('\xe1', 'e1'), ('\xe2', 'e2'), ('\xe3', 'e3'), ('\xe4', 'e4'), ('\xe5', 'e5'), ('\xe6', 'e6'), ('\xe7', 'e7'), ('\xe8', 'e8'), ('\xe9', 'e9'), ('\xea', 'ea'), ('\xeb', 'eb'), ('\xec', 'ec'), ('\xed', 'ed'), ('\xee', 'ee'), ('\xef', 'ef'), ('\xf0', 'f0'), ('\xf1', 'f1'), ('\xf2', 'f2'), ('\xf3', 'f3'), ('\xf4', 'f4'), ('\xf5', 'f5'), ('\xf6', 'f6'), ('\xf7', 'f7'), ('\xf8', 'f8'), ('\xf9', 'f9'), ('\xfa', 'fa'), ('\xfb', 'fb'), ('\xfc', 'fc'), ('\xfd', 'fd'), ('\xfe', 'fe'), ('\xff', 'ff')]
    Last edited by ximera; 29-08-2014 at 20:09. Reason: Юзай тег HCODE

  20. #13

    Default Re: Вопрос о параметрах, передаваемых в программу

    собрал кодес под виндой (xpwn.exe).
    и написал скрипт
    Code:
    import subprocess

    comline = ["xpwn.exe"]
    for i in range(99):
    comline.append("")
    comline[ord('B')] = "\x20\x0a\x0d"
    print comline
    subprocess.call(comline)

    получил на выходе
    Code:
    ['xpwn.exe', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ' \n\r', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
    ...


    Stage 1 clear!
    Last edited by ximera; 29-08-2014 at 23:50.

  21. 3 пользователя(ей) сказали cпасибо:
    Dark Koder (30-08-2014) Shizoid (30-08-2014) ximera (29-08-2014)
  22. #14
    ximera's Avatar

    Default Re: Вопрос о параметрах, передаваемых в программу

    Спасибо конечно, но это несерьезно. Давай постить направления для поиска, а не ответы.
    Чтобы избегать ошибок, надо набираться опыта; чтобы набираться опыта, надо делать ошибки. © Лоренс Питер

    Неизбежное прими достойно. © Сенека Луций Анней

    Господи... храни сумасшедших. © Сумасшедший Фрэнки

  23. #15

    Default Re: Вопрос о параметрах, передаваемых в программу

    Спасибо большое OKOB'у за решение проблемы, но для самых одарённых можно обьяснить почему Питон может так сделать , а Linux терминал нет, почему слэш не экранируют. Или всё это потому-что stdin , только строки принимает . Хотя subprocess использует же execve()
    Code:
    int execve(const char *filename, char *const argv [], char *const envp[]); 

    Или я не прав?

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:28
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org