![]() |
ELF x86 - Format string bug basic 1
Environment configuration : PIEPosition Independent Executable https://forum.antichat.xyz/attachmen...64ec8daf36.png RelRORead Only relocations https://forum.antichat.xyz/attachmen...64ec8daf36.png NXNon-Executable Stack https://forum.antichat.xyz/attachmen...64ec8daf36.png Heap execNon-Executable Heap https://forum.antichat.xyz/attachmen...64ec8daf36.png ASLRAddress Space Layout Randomization https://forum.antichat.xyz/attachmen...64ec8daf36.png SFSource Fortification https://forum.antichat.xyz/attachmen...64ec8daf36.png SRCSource code access https://forum.antichat.xyz/attachmen...2ea6401095.png Source code : C: Код:
#include Этот бинарь без харденинг защит, поэтому тут все просто. Уязвимость тут находится в printf(argv[1]); Так как не были указаны форматы вывода. Эта уязвимость форматной строки. Поэтому у нас есть примитивы как чтения из стека так и запись в память. Тут нам нужен примитив чтения, потому, как флаг находится в файле .passwd. И мы сможем прочитать от туда данные используя спецификатор формата %x Суть эксплуатации этой уязвимости заключаться в том, чтобы считать значения со стека. В стеке находится буфер, а в буфере содержимое файла .passwd Выведем 128 байт из стека 32 * 4 = 128 Код: Код:
./ch5 $(python -c 'print "%08x."*32')Код: Код:
FF|FF|FF|FFСкопируем полученные байты в блокнот. Данный нам ELF бинарник 32 битный. Архитектура x86 Поэтому все полученные байты выданные нам из стека находятся в перевернутом виде - Little Endian. Например Код: Код:
Если -> 00000020 тогда -> 20|00|00|00decode_bytes.py Python: Код:
bytesПосле запуска на выходе мы получим такие данные и флаг |
От куда взято число 128 байт?
От куда берется спецификатор формата %x? |
Цитата:
2) это фишка которая используется для атак на форматные строки. |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
| Время: 10:23 |