LFI2RCE via phpinfo()
Bu zafiyeti sömürmek için gerekenler: Bir LFI zafiyeti, phpinfo() fonksiyonunun görüntülendiği bir sayfa, "file_uploads = on" ve sunucunun "/tmp" dizinine yazabilmesi.
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
HTB Öğretici: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Exploit'i düzeltmeniz gerekiyor (=> yerine => değiştirin). Bunu yapmak için:
Exploitin başında payload'u (örneğin bir php-rev-shell için) değiştirmeniz gerekmektedir, REQ1'i (bu phpinfo sayfasına işaret etmeli ve padding dahil edilmelidir, yani: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), ve LFIREQ'yi (bu LFI zafiyetine işaret etmelidir, yani: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Null karakteri sömürülürken çift "%" kontrol edin)
Teori
Eğer PHP'de yüklemelere izin veriliyorsa ve bir dosya yüklemeye çalışıyorsanız, bu dosya sunucu isteği işlemeyi bitirene kadar bir geçici dizinde depolanır, ardından bu geçici dosya silinir.
Ardından, web sunucusunda bir LFI zafiyeti bulduysanız, oluşturulan geçici dosyanın adını tahmin etmeye çalışabilir ve dosya silinmeden önce geçici dosyaya erişerek bir RCE'yi sömürebilirsiniz.
Windows'ta dosyalar genellikle C:\Windows\temp\php dizininde depolanır.
Linux'ta dosyanın adı genellikle rastgele ve /tmp dizininde bulunur. Ad rastgele olduğu için, geçici dosyanın adını bir yerden çıkarmak gerekmektedir ve phpconfig() fonksiyonunun içeriğindeki $_FILES değişkeninin değerini okuyarak bunu yapabilirsiniz.
phpinfo()
PHP, bir 4096B tampon kullanır ve tampon dolu olduğunda, istemciye gönderilir. Ardından istemci, büyük başlıklar kullanarak birçok büyük istek gönderebilir (php ters shell yüklemek için), geçici dosyanın adının döndürüldüğü phpinfo()'nun ilk kısmının gelmesini bekleyebilir ve LFI zafiyetini sömürerek php sunucusu dosyayı silmeden önce geçici dosyaya erişmeye çalışabilir.
Uzunluğu 6 ise adı tahmin etmek için Python betiği
Last updated