nixp.ru v3.0

20 октября 2017,
пятница,
15:38:32 MSK

DevOps с компанией «Флант»
anonymous написал 14 июля 2005 года в 17:57 (334 просмотра) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Не знал куда эту тему запостить …. по идее к программированию относится.

Ногами сильно прошу не пинать за такой вопрос.

Часто бывает что встречаешь в исходнике на СИ типа такое объявление:

char blabla[] = {

«\x73\x32\x76\x32\x90\…..»

и т.д.

т.е. я как бы знаю что это команды ассемблера. Но как их получить ? И как расшифровать такую строку? т.е. обратно в ассемблерный код.

В принципе я вроде знаю один метод получения такой строки. Пишем на асме потом компилим и дебужим.

К примеру nasm a.out …. А потом записывает адреса справа на лево.

Если не так то поправьте.

Если кто знает где об этом можно почитать, буду оч признателен.

myst

бррр… нах оно тебе? Я бы GDB воспользовался, в любом случае…

anonymous

как это сделать с gdb ?

myst

Имя массива ты знаешь. Выведи дамп с этого адреса.

Uncle Theodore

Что-то я как-то сомневаюсь, что это «команды ассемблера». Нафига кому-то включать в сяшный исходник опкоды? Какой-нибудь mov и jmp еще куда ни шло, но опкоды? Это чтобы ни самому прочитать, ни людям показать?

Я бы сказал, что это картинка какая-нибудь, bitmap или pixmap. Соответственно, дизассемблировать ее несколько бессмыссленно будет. Я неправ?

Good Luck,

UT

anonymous

посмотри исходник любого сплойта. Почти в каждом используется shellcode в виде такой строки.

rgo

берёшь эту строку, записываешь её в двоичном виде в файл. И потом:

$ objdump --disassemble-all --target=binary --architecture=i386 file.bin

rgo
Uncle Theodore
Что-то я как-то сомневаюсь, что это «команды ассемблера». Нафига кому-то включать в сяшный исходник опкоды? Какой-нибудь mov и jmp еще куда ни шло, но опкоды? Это чтобы ни самому прочитать, ни людям показать?

Я бы сказал, что это картинка какая-нибудь, bitmap или pixmap. Соответственно, дизассемблировать ее несколько бессмыссленно будет. Я неправ?

Good Luck,

UT

Идея эксплоита, примерно такая: если надо выполнить кусок вражеского кода от имени root, то можно попросить suid программу скопировать этот код себе в стек, например, из stdin, или передавая его в качестве агрумента. Главное правильно написать шеллкод, подсунуть его в правильном месте, и добиться правильного сбоя root’овского процесса.

А шеллкод, может быть, с привязкой к конкретному адресу (в смысле не Position independent code)…

А эксплоит, может быть, на bash написан…

В общем эксплоит это программа, а шеллкод — это патч для другой программы (runtime патченной программы с правами root), в большинстве (во всех?) случаев для стека.

Steck

Вы чего какой это ASM. Это шеел код Вот гляньте кто хотите ;o)

P.S Вреда прога не делает

#include
int main(int argc, char **argv)
{
        unsigned char str[]=
                "\x63\x6C\x65\x61\x72";
        unsigned char shell_code[]=
                "\033[1;37m\n\x28\x5C\x5F\x5F"
                "\x5F\x2F\x29\n\x28\x3D\033[1"
                ";36m\x27\033[1;35m\x3B\033[1"
                ";31m\033[1;36m\x27\033[1;37m"
                "\x3D\x29\n\x28\x22\x29\x5F\x28"
                "\x22\x29\n\033[1;31m\x40\033["
                "1;32m\x7D\x2D\x27\x2D\x2C\x2D"
                "\n\033[1;33m\x53\x68\x6f\x77 "
                "\x4D\x65 \x59\x6f\x75\x72 \x53"
                "\x4D\x49\x4C\x45 \x3B\x6f\x29\n"
                "\t\t\x7E\x53\x74\x65\x63\x6B\x7E\n";
        system(str);
        fprintf(stderr,shell_code);
        return 0;
}
anonymous

вот что я сделал:

; shell

char cliphcode[] =

«\x90\x90\xeb\x1f\xb8\xb6\x00\x00»

«\x00\x5b\x31\xc9\x89\xca\xcd\x80»

«\xb8\x0f\x00\x00\x00\xb9\xed\x0d»

«\x00\x00\xcd\x80\x89\xd0\x89\xd3»

«\x40\xcd\x80\xe8\xdc\xff\xff\xff»;

записал в файл ggg такое:

0000b6b81feb9090

80cdca89c9315b00

0dedb90000000fb8

d389d08980cd0000

ffffffdce880cd40

т.е. адреса справа налево.

потом сделал как сказал rgo

objdump --disassemble-all --target=binary --architecture=i386 ggg

и получил дамп

ggg: file format binary

Disassembly of section .data:

00000000 <.data>:

0: 30 30 xor %dh,(%eax)

2: 30 30 xor %dh,(%eax)

4: 62 36 bound %esi,(%esi)

6: 62 38 bound %edi,(%eax)

8: 31 66 65 xor %esp,0×65(%esi)

b: 62 39 bound %edi,(%ecx)

d: 30 39 xor %bh,(%ecx)

f: 30 0a xor %cl,(%edx)

11: 38 30 cmp %dh,(%eax)

13: 63 64 63 61 arpl %sp,0×61(%ebx,2)

17: 38 39 cmp %bh,(%ecx)

19: 63 39 arpl %di,(%ecx)

1b: 33 31 xor (%ecx),%esi

1d: 35 62 30 30 0a xor $0xa303062,%eax

22: 30 64 65 64 xor %ah,0×64(%ebp,2)

26: 62 39 bound %edi,(%ecx)

28: 30 30 xor %dh,(%eax)

2a: 30 30 xor %dh,(%eax)

2c: 30 30 xor %dh,(%eax)

2e: 30 66 62 xor %ah,0×62(%esi)

31: 38 0a cmp %cl,(%edx)

33: 64 33 38 xor %fs:(%eax),%edi

36: 39 64 30 38 cmp %esp,0×38(%eax,%esi,1)

3a: 39 38 cmp %edi,(%eax)

3c: 30 63 64 xor %ah,0×64(%ebx)

3f: 30 30 xor %dh,(%eax)

41: 30 30 xor %dh,(%eax)

43: 0a 66 66 or 0×66(%esi),%ah

46: 66 data16

47: 66 data16

…………………………….

это понятно когда shellcode как в моем примере. А если он на целую страницу? Это где-то день займет на переписывание. В этом случае наверно надо делать как сказал myst. Т.е. при помощи gdb. Хотя я ламо в gdb (2 раза юзал)…. знаю токо run breakpoint и next со степом ))

Вообщем, как этот дамп вывести в gdb ?

myst


$ info gdb

Тут уж ты не теряйся и читай, читай, читай…