memcpy() integer bufer overflow FreeBSD 7

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 1:56:45

Как Вам такая штука?

Код: Выделить всё

#define BUF_SIZE 1024

  int main (int argc, char* argv[])

   {

   int ouch;
   char buf[BUF_SIZE];
   ouch = atoi(argv[1]);

       if (ouch < BUF_SIZE ) {

         memcpy (buf, argv[2], ouch);

         }

         else
         printf("wow data!!!\n");

          }




Вобщем-то всё просто:

Код: Выделить всё

[root@zingel ~/calloc]# gcc -o calloc calloc.c
calloc.c: In function 'main':
calloc.c:15: warning: incompatible implicit declaration of built-in function 'memcpy'
calloc.c:20: warning: incompatible implicit declaration of built-in function 'printf'
[root@zingel ~/calloc]# ls
calloc          calloc.c        calloc.c~
[root@zingel ~/calloc]# ./calloc
Segmentation fault: 11
[root@zingel ~/calloc]# sysctl -w kern.coredump=1
kern.coredump: 0 -> 1
[root@zingel ~/calloc]# ./calloc
Segmentation fault: 11 (core dumped)
[root@zingel ~/calloc]# gdb -c calloc.core
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".
Core was generated by `calloc'.
Program terminated with signal 11, Segmentation fault.
#0  0x28137b87 in ?? ()
(gdb) i r
eax            0x281627a0       672540576
ecx            0xbfbfeca0       -1077941088
edx            0xbfbfeca0       -1077941088
ebx            0x281637f8       672544760
esp            0xbfbfe810       0xbfbfe810
ebp            0xbfbfe838       0xbfbfe838
esi            0x0      0
edi            0x100    256
eip            0x28137b87       0x28137b87
eflags         0x10282  66178
cs             0x33     51
ss             0x3b     59
ds             0x3b     59
es             0x3b     59
fs             0x3b     59
gs             0x3b     59

Код: Выделить всё

[root@zingel ~/calloc]# uname -a
FreeBSD zingel.dubki.ru 7.0-RELEASE-p2 FreeBSD 7.0-RELEASE-p2 #3: Tue Jul  8 17:48:53 EEST 2008     beastie@zingel.dubki.ru:/usr/obj/usr/src/sys/BEASTIE  i386
[root@zingel ~/calloc]# date
Thu Jul 10 01:46:10 EEST 2008
Последний раз редактировалось zingel 2008-07-10 2:09:36, всего редактировалось 1 раз.
Z301171463546 - можно пожертвовать мне денег

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: memcpy() unteger bufer overflow FreeBSD 7

Непрочитанное сообщение paradox » 2008-07-10 2:07:09

как насчет линуха ?

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: memcpy() unteger bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 2:09:07

пока не смотрел, на на чем...

вот... http://www.freebsd.org/cgi/query-pr.cgi?pr=125455
Z301171463546 - можно пожертвовать мне денег

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение paradox » 2008-07-10 2:14:56

на самом деле
оно как бы и так и как бы и не так
это код такой

а что по твоему оно должно было сделать? )
если не кору

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 2:16:22

ну вообще да, но ведь так не должно быть? или я что-то упустил...
Z301171463546 - можно пожертвовать мне денег

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение paradox » 2008-07-10 2:17:14

другими словами

попробуй получить рутовый шел
под обычным пользователем
токо файл компилируй от пользователя а не от рута

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение paradox » 2008-07-10 2:19:21

любой овер флов
это то когда нарушение серьюрности
тоесть
обычный ламмер заходит на свой аккаунт
компилирует екслоит с оверфлов
и получает рута

если докажешь в PR и покажешь
что обычный юзер получит рута без проблем
значит серьезная проблема!!!

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 2:37:25

да это всё понятно.... =) просто колбасень получится длиннющая, а не сплойт....
Z301171463546 - можно пожертвовать мне денег

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение paradox » 2008-07-10 2:42:34

вот тот баг с шеллем
там трабла
почему то они списали на платформу
но можно попросить тех у кого amd64
и думаю будет так же
я давал знакомым под i386
так же падает
csh

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 2:48:31

Да везде там баг, на всех платформах...
но можно попросить тех у кого amd64
и думаю будет так же
пусть тогда туда отпишут
Z301171463546 - можно пожертвовать мне денег

max_dark
проходил мимо
Сообщения: 1
Зарегистрирован: 2008-07-10 3:04:48

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение max_dark » 2008-07-10 4:13:28

Откуда код? самописный?
Это проблема не memcpy, а програмиста, написавшего этот код: программа вызываерся БЕЗ ПАРАМЕТРОВ а значит argv[1] argv[2] НЕ ОПРЕДЕЛЕНЫ => обращение к ним и вызывает сброс коры
Сорс:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUF_SIZE 1024

int main (int argc, char* argv[]) {
	int ouch;
	char buf[BUF_SIZE];
	ouch = atoi(argv[1]);
	if (ouch < BUF_SIZE ) {
		memcpy (buf, argv[2], ouch);
	}
	else {
		printf("wow data!!!\n");
	}
	return 0;
}
Тестим:

Код: Выделить всё

[max@notebook z]$ uname -a
FreeBSD notebook 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Jul  6 22:51:22 MSD 2008     root@notebook:/usr/obj/usr/src/sys/NOTEBOOK  i386
[max@notebook z]$ gcc -g memz.c -o memz
[max@notebook z]$ ./memz 1000 no_core
[max@notebook z]$ ls -l
total 10
-rwxr-xr-x  1 max  max   6,0K 10 июл 04:53 memz*
-rw-r--r--  1 max  max   284B 10 июл 04:38 memz.c
[max@notebook z]$ ./memz
Segmentation fault: 11 (core dumped)
[max@notebook z]$ ls -l
total 330
-rwxr-xr-x  1 max  max   6,0K 10 июл 04:53 memz*
-rw-r--r--  1 max  max   284B 10 июл 04:38 memz.c
-rw-------  1 max  max   300K 10 июл 04:54 memz.core
[max@notebook z]$
При запуска отладчика gdb -tui memz видно что прога падает на 10-й строке, те

Код: Выделить всё

09	char buf[BUF_SIZE];
10	ouch = atoi(argv[1]); // Segmentation fault: 11 (core dumped)
11	if (ouch < BUF_SIZE ) {
В общем проблема в отутствии проверки кол-ва аргументов :)
Для сравнения:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUF_SIZE 1024

int main (int argc, char* argv[]) {
	int ouch;
	char buf[BUF_SIZE];
	if (argc<3) {
		puts("ГЫЫЫЫЫ");
		return -1;
	}
	ouch = atoi(argv[1]);
	if (ouch < BUF_SIZE ) {
		memcpy (buf, argv[2], ouch);
	}
	else {
		printf("wow data!!!\n");
	}
	return 0;
}

Код: Выделить всё

[max@notebook z2]$ gcc -g memz.c -o memz
[max@notebook z2]$ ls -l
total 10
-rwxr-xr-x  1 max  max   6,1K 10 июл 05:10 memz*
-rw-r--r--  1 max  max   333B 10 июл 05:09 memz.c
[max@notebook z2]$ ./memz
ГЫЫЫЫЫ
[max@notebook z2]$ ./memz 999 no_fail
[max@notebook z2]$ ./memz 9999 no_fail_forever
wow data!!!
[max@notebook z2]$

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 4:19:12

Код: Выделить всё

(gdb) r
Starting program: /root/calloc/sploit
(no debugging symbols found)...(no debugging symbols found)...
Program received signal SIGSEGV, Segmentation fault.
0x28137b87 in strtol () from /lib/libc.so.7

Код: Выделить всё

(gdb) i r
eax            0x281627a0       672540576
ecx            0xbfbfec70       -1077941136
edx            0xbfbfec70       -1077941136
ebx            0x281637f8       672544760
esp            0xbfbfe7e0       0xbfbfe7e0
ebp            0xbfbfe808       0xbfbfe808
esi            0x0      0
edi            0x100    256
eip            0x28137b87       0x28137b87
eflags         0x10282  66178
cs             0x33     51
ss             0x3b     59
ds             0x3b     59
es             0x3b     59
fs             0x3b     59
gs             0x1b     27
:oops:
Z301171463546 - можно пожертвовать мне денег

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение paradox » 2008-07-10 4:25:21

ищите оверфлов в атои ))

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 4:26:50

+1 :=)

шерше ля фам...
Z301171463546 - можно пожертвовать мне денег

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение paradox » 2008-07-10 4:32:39

пиши в PR
шо мол 3 дня программирования на C
дают о себе знать
мол
сорри фо террибл проблем

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: memcpy() integer bufer overflow FreeBSD 7

Непрочитанное сообщение zingel » 2008-07-10 4:46:09

если случилась такая дрянь как SIGSEGV, это уже проблема, другое дело, что это никак не может повредить в этом случае.

UPD:

всётаки есть там маленький оверфлов, зря ты мне сказал отписать откат, а то они уже в [libc] переместили, обратно отписывать уже как-то неудобно :smile: ну да сами разбирутся
Z301171463546 - можно пожертвовать мне денег