Podejmuję kurs bezpieczeństwa, który wymaga od nas wykonania atrybutu ciąg znaków na maszynie wirtualnej unix. Luka w zabezpieczeniach to ciąg formatujący wykorzystujący argument wiersza poleceń.Jak zapisać wartość w adresie w ataku z ciągiem formatowym
Moje pytanie brzmi: jak mogę zapisać wartość w adresie w postaci ciągu znaków (np. Wpisać adres kodu powłoki do adresu zwrotnego funkcji)?
Na przykład próbuję zapisać wartość 987654 w lokalizacji adresu powrotu 0xaabbccdd. Próbowałem niektórych ciągów takich jak "AAAA_%10$x"
, a to może prowadzić program do drukowania AAAA_41414141
.
Następnie zastępuję litery moim adresem i próbuję je zastąpić.
\xdd\xcc\xbb\xaa_%10$x_%54321x_%n"
Ale to nie działa. Widzę artykuł mówi, że powinienem użyć mniejszej liczby w %54321x
, ponieważ istnieje kilka znaków, które już napisałem, ale nie wiem, ile znaków napisałem przed %54321x
, albo.
uwaga: Środowisko ma starą wersję gcc, więc nie trzeba martwić się, że wartość jest zbyt duża. Jakieś sugestie? Dzięki.
'sprintf' zapisując do bufora znaków na stosie może być również użyty do szkodliwego uszkodzenia ... –
@Oli: tak, ale to nie jest atak na ciąg formatowy, którego przypisanie OP wydaje się być o ... –
A podany przez użytkownika ciąg znaków może zostać użyty do uszkodzenia. –