July 2, 2026
OffSec PG: Amaterasu Walkthrough

By Emre Aslan
4 min read
Merhaba değerli okuyucular,
Bu yazımda Offensive Security'nin lab/practice ortamı olan Proving Grounds üzerinde bulunan Amaterasu makinesinin çözümünü ele alacağım.
KEŞİF (recon)
İlk olarak laboratuvar panelinden makineyi başlatıyorum ve hedef makinenin ip adresini öğreniyorum.
192.168.231.249 IP adresli Amaterasu makinesine karşı tüm portları dahil ederek bir nmap taraması başlatıyorum.
nmap çıktısında 4 adet port açık gözüküyor.
Bunlar 21 (FTP), 25022, 33414 ve 40080 port numaraları. İlgili portlara daha detaylı bir nmap taraması başlatıyorum. Bu taramada servis ve versiyon keşfi, enum ve basic nmap scriptleri de dahil.
Detaylı nmap çıktısında:
- 21 numaralı portta anonymous girişin aktif edildiği bir vsftpd 3.0.3 FTP servisi,
- 25022 numaralı portta OpenSSH 8.6 SSH servisi,
- 33414 numaralı portta Python (Flask) Werkzeug httpd 2.2.3 HTTP servisi,
- 40080 numaralı portta Apache httpd 2.4.53 HTTP servisi
olduğunu görüyorum.
FTP servisine anonymous giriş yapsamda dizin listelemede başarılı olamıyorum. Tüm servislere karşı versiyon bilgilerini kullanarak exploit/vulnerability araştırması yaptığımda kayda değer bir sonuca ulaşamıyorum.
Hedefimi HTTP servislerine karşı çeviriyorum.
Her 2 HTTP servisinede dizin/dosya taraması fuzzing işlemi başlatıyorum.
Burada dikkatimi /info ve /help uçnoktaları çekiyor ve bu adreslere gidiyorum.
/info uç noktası buranın bir Rest API olduğunu ve /help uç noktasından api komutlarına ulaşabileceğimi belirtiyor.
Burada 4 adet komut var:
- /info -> burayı daha önce ziyaret ettik.
- /help -> şuan bulunduğumuz ve komutların listelendiği sayfa.
- /file-list?dir -> dosyaların listelendiği sayfa.
- /file-upload -> dosya yükleyebileceğimiz sayfa.
Tabiki dikkatimi son 2 komut çekiyor. Biri ile dizin belirterek dosyaları listeleyebiliyor iken diğeri ile dosya yükleyebiliyorum.
Bir test dosyası oluşturup yüklemeyi deniyorum ve başarılı bir şekilde yüklüyorum.
Diğer komutla kontrol ettiğimde gerçekten de tmp dizinine yazabildiğimi konfirme ediyorum.
Dizin listeleme komutuyla /home dizinine baktığımda alfredo isimli kullanıcının varlığını öğreniyorum.
İÇERİYE ERİŞİM (initial access)
SSH servisinin açık olduğunu hatırlayarak kendi oluşturacağım id_rsa.pub dosyasını yüklemeyi planlıyorum.
ssh-keygen -t rsa -b 4096 -f id_rsa -N ""
komutu ile id_rsa private ve id_rsa public dosyalarını oluşturuyorum.
Dosyayı alfredo'nun .ssh dizinine yüklemeyi denediğimde dosya uzantısı kısıtlamasına takılıyorum.
İlgili dosyayı .txt olarak kopyalayıp tekrar yüklemeyi deniyorum.
Kontrol ettiğimde yüklendiğini görüyorum.
Artık id_rsa kullanarak başarılı bir şekilde alfredo kullanıcısı ile hedef makineye giriş yapabiliyorum.
/home/alfredo dizini altında local.txt dosyası ile ilk user flag'ına ulaşıyorum.
YETKİ YÜKSELTME (privesc)
Artık yetki yükseltmenin root haklarına ulaşmanın vakti geldi.
İlk olarak basitçe sudo -l vb. kontrolleri sağlıyorum ama bir sonuç alamıyorum. LinPeas'ı hedef makineye yüklemeyi deniyorum.
LinPeas.sh betiğini yerel web sunucu ayağa kaldırarak çekmeye çalıştığımda başarısız oluyorum.
Eski usul .txt hale getirip yüklüyorum.
Betiği çalıştırıp kısa bir süre sonuçları bekliyorum.
Bir çok exploit/zafiyet çıkıyor. Fakat burada dikkatimi çeken her dakika root hakları ile execute edilen /usr/local/bin/backup-flask.sh dosyası oluyor.
Dosya içeriğini okuduğumda PATH restapi klasörüne set ediliyor ve o klasörü tar.gz olarak sıkıştırdığını görüyorum.
PATH Hijacking
Fakat burada önemli bir konu var.
tar czv /tmp/flask.tar.gz * olarak çağrılır iken en başta export PATH edilen kısım restapi klasörünün içine işaret ediyor.
Yani tar, /usr/bin/tar vb. path'lerden önce /home/alfredo/restapi içerisine bakacak.
Eğer bu klasörün içine bir tar dosyası oluşturur isem tar çağrılırken ilk benim oluşturduğum tar'ı çağıracak.
Bana /bin/bash'i root suid bit'ini kullanarak açacak bir tar içeriği yazıyorum ve 1 dakika sonunda kontrol ediyorum.
/bin/bash -p ile çalıştırdığımda euid yani effective uid'nin root olarak açıldığını görüyorum.
/root dizini altında proof.txt dosyasında son flag'ı ele geçiriyorum.
Son.