Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Capricorn
#1

Простой эксплоит переполнения буфера не работает( - C++

11.03.2013, 10:29. Просмотров 1404. Ответов 8
Метки нет (Все метки)

Здравствуйте, есть простая программа использующая уязвимость переполнения буфера, по сути должна просто закрываться при выполнении и не выводить ошибок, но этого не происходит. "\xd8\x69\x83\x7c" - адрес call esp определен с помощью OllyDbg и равен 0x7c8369d8, адрес функции ExitProcess также узнал с помощью OllyDbg и он равен 0х7c81cb12. Скажите какие могут причины того что код не выполняется как надо? Код приведен ниже.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// vuln_exe.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <stdio.h>
 
void show_array(int arrlen, char array[])
{
    char buffer[32];
    int i;
 
    for (i = 0; i < arrlen; i++) buffer[i] = array[i];
    printf(buffer);
}
 
int main()
{
    char mystr[] = "111112222233333444445555566666777778"
                   "\xd8\x69\x83\x7c"
                   "\xff\x15\x12\xcb\x81\x7c";
    show_array(47, mystr);
    return 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 10:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Простой эксплоит переполнения буфера не работает( (C++):

Ошибка переполнения буфера - C++
При первом запуске програма работает, после второго появляеться ошибка переполнения буфера. В чем дело?#include &lt;iostream&gt; #include...

Избавиться от переполнения буфера (asm) - C++
Всем привет, на вашем форуме первый раз) Имея базовые знания по C++ и Assembler решил сварганить такую штуку: // test.cpp: определяет...

Отлов исключения переполнения буфера - C++
Вот код #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;exception&gt; using namespace std; ...

Динамическое обнаружение ошибки переполнения буфера - C++
Дипломное задание написать программу, которая на вход берет .exe и после обработки показывает возможно ли в данном .exe использование...

Не работает cin.getline при считывании строки большей буфера - C++
Доброго всем времени суток!:) Проблема состоит в том, что если ввести 4 и более символов cin.getline(boofer, 3); перестаёт работать. Как я...

Не работает простой цикл - C++
Необходимо для решения олимпиады написать программу. Вроде написал, а цикл внутри цикла отказывается работать. Если вместо внутреннего...

8
SEGNET
65 / 65 / 9
Регистрация: 28.12.2012
Сообщений: 495
12.04.2013, 23:54 #2
Тоже интересует данный сабжект.
0
Миниатюры
Простой эксплоит переполнения буфера не работает(  
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 756
13.04.2013, 04:08 #3
что характерно проблема существует и linux, но мой linux оказался более разговорчивым )

в режиме Clang пишет -

Disallowed system call: SYS_socketcall

компилятор gcc 4.6.2 - прога падает с текстом
stderr:
*** stack smashing detected ***: program terminated

компилятор gcc 4.7.3 - прога вообще не падает, всё отлично отрабатывает
Exit status: 0

других нет)
но нашёл я ответ на ваш вопрос )

здесь в разделах 0x08 и 0x09 расписывается происходящее в этой программе
http://big-daddy.fr/repository/Docum...curity/431.pdf

а вообще лучше всё это с нуля читать ) очень позновательный приём
0
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
13.04.2013, 04:21 #4
Capricorn а какая ось?
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 756
13.04.2013, 04:36 #5
Цитата Сообщение от ssXXss Посмотреть сообщение
Capricorn а какая ось?
а там без разницы ось - происходит переполнение буфера и всё тут, так вот программа написанна, почему вас не смущает когда обычные...

штуки подобного плана
C++
1
2
3
4
5
6
7
#include <stdio.h> 
#include <string.h> 
int main(int argc, char* argv[]) { 
 char y[32]; 
 strcpy(y, argv[1]); 
 return (0); 
}
переполняют буфер и грохаются?

единственное отличие в винде (они пишут про Win32) дальше в kernel32.dll (то что у них указан адрес 0x7c8369d8) можно впарить любой код на исполнение, а как бы в linux туда уже ничего не встроишь, а просто грохнешь программу....

тут история такая же

здесь
C++
1
char buffer[32];
выделяется буфер на 32 элемента
а здесь в него же пишется
C++
1
for (i = 0; i < arrlen; i++) buffer[i] = array[i];
обратите внимание arrlen = 47 аргументов

это должно грохнуться на любой операционке, и в WinXP грохается, но при этом когда переходит обращение к ядру - ядро винды вынимает из стека твой адрес на твой код и исполняет, считая что это адрес какой-то системной функции (это я грубо описал, более детально в этой статье)

в любом случае вне зависимости от операционок - этот код грохнется, что тут такого то?
0
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
13.04.2013, 04:57 #6
разница просто огромная, хотя бы в способе обработки исключительных ситуаций, также существует защита от выполнения кода в стеке, ну куча других фич.

http://msdn.microsoft.com/en-us/library/ms680657%28v=VS.85%29.aspx
http://www.xakep.ru/magazine/xa/134/060/1.asp

Добавлено через 7 минут
+ к этому начиная с висты подгружаемые dll не имеют постоянных адресов загрузки , а обращение к ядру windows происходит через системные сервисы, и то что было актуально для хр для более поздних ос уже не применимо, конечно есть исключения но к данному случаю они не имеют ни какого отношения.
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 756
13.04.2013, 05:05 #7
Цитата Сообщение от ssXXss Посмотреть сообщение
разница просто огромная, хотя бы в способе обработки исключительных ситуаций, также существует защита от выполнения кода в стеке, ну куча других фич.

http://msdn.microsoft.com/en-us/library/ms680657%28v=VS.85%29.aspx
http://www.xakep.ru/magazine/xa/134/060/1.asp
да это тут причём...

автор пишет
по сути должна просто закрываться при выполнении и не выводить ошибок, но этого не происходит.
она ни в какой нормальной среде не должна не выдавать ошибок, потому что пишет в память buffer[32] больше того, что там есть

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

Добавлено через 6 минут
да, исключительно для WinXP SP2 (начало 0x09 параграфа)

Since we are using a Windows XP SP2 (Intel x86) system, it is
necessary that we write our shellcode
0
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
13.04.2013, 05:11 #8
под рукой нет хр , но предположу что(если использовалась visual studio ) проект был собран с дефолтными настройками т.е. выставлена проверка безопасности, использование с++ исключений, включена оптимизация и др. настройки и студия сама дописывает то что считает нужным.
2
SEGNET
65 / 65 / 9
Регистрация: 28.12.2012
Сообщений: 495
13.04.2013, 09:02 #9
Для интереса попробовал реализовать на асм, то есть просто запихал в стек значения адресов и программа выполнилась. По всей видимости это как то связано с безопасностью о чем упоминает ssXXss
0
13.04.2013, 09:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2013, 09:02
Привет! Вот еще темы с ответами:

Почему такой простой алгоритм работает неправильно? - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int i,j,x,n,max,a; int main() { clrscr(); x=0;

Простой калькулятор: Не работает код, как это исправить? - C++
Здравствуйте! Вот имеется такой код, взят отсюда, https://code-live.ru/post/cpp-variables-and-datatypes/#more и он как бы получается не...

WTF не работает простой код на Visual studio 2008(баг?) - C++
Взял код из википедии. ...

Заблокировано защитой от переполнения буфера - Windows XP
Здарова народ, не знаю в какую тему это написать, поэт написал сюда При запуске Windows media Player, Exel или некоторых других прог...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru