One_gadgets znajdują się w bibliotece libc i zapewniają prosty sposób uzyskania powłoki poprzez przeskoczenie do pojedynczego gadżetu w celu wykonania execve(„/bin/sh”, NULL, NULL). Te magiczne gadżety możemy znaleźć na dwa sposoby: ręcznie za pomocą ciągów znaków i objdump lub za pomocą narzędzia one_gadget.
Ręczne użycie ciągów i objdump
Najpierw użyjmy ciągów znaków, aby uzyskać adres przesunięcia /bin/sh w docelowej bibliotece libc:
Następnie możemy użyć objdump do wyszukania odniesień do adresu ciągu /bin/sh:
Jedynym ograniczeniem jest to, że w momencie wykonania r12 i r13 muszą być równe NULL. W ten sposób rejestry rdi, rsi i rdx będą zawierać odpowiednio wartości /bin/sh, NULL, NULL.