Jump to content
php.lv forumi

Null Byte injection


007007

Recommended Posts

Par NullByte darbību ārzemju resursos atradu tikai diezgan ierobežotu informāciju.. Vai varat padalīties ar info, kad tas darbojas, kad nē utt? Būtībā cik saprotu vissāpīgākā vieta ir iespēja iespaidot include(); funkciju, ja tajā ievieto GET datus, ko gan es nekad tāpat nedarītu, bet piemēra pēc. Piemēram, šis kods:

<?php
if($_GET['file_to_inc']){
include($_GET['file_to_inc'].'.php');
}
else{
echo 'File to include is not specified yet.';
}
?>

 

Ievadot browserī: "http://localhost/first/index.php?file_to_inc=firstfile.txt%00"

,

tam vajadzētu atvērt manu eksistējošo firstfile.txt , jo NullBytam būt jālikvidē php kodā pievienotais .php paplašinājums. Tomēr tā nenotiek un saņemu lejāk esošo erroru. Tajā .php itkā it dzēsies, bet fails neievietpjas.. Kādēļ tas nestrādā?

"Warning: include() [function.include]: Failed opening 'firstfile.txt' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\first\index.php on line 3"

Edited by 007007
Link to comment
Share on other sites

Vai šis izdod tādu pašu rezultātu?

 

include $_GET['file_to_inc'] . '.php';

 

Edit: Nupat pamēģināju, strādā gan tā, gan tā. Droši vien nevar atrast failu, skaties, vai tas ir novietots tajos ceļos, kas minēti kļūdas ziņojumā.

Edited by Mr.Key
Link to comment
Share on other sites

nu bet duh, paskaties savu kodu nedaudz cītīgāk:

 

include($_GET['file_to_inc'])   .    '.php';

 

Saproti, kas tur notiek? Tu iekļauj failu no $_GET, un veic include() funkcijas atgrieztās vērtības konkatenāciju ar '.php'.

 

Tāpēc vienmēr vajadzētu operatoriem likt priekšā/pakaļā atstarpes, lai neveidojas šādas muļķīgas kļūdas.

 

Likt $_GET iekš include arī supermuļķīgi. Izmantojam whitelist principu šādos gadījumos (ja vien tas nav dinamisks gadījums. Tad attiecīgi vajadzētu validēt/filtrēt šo vērtību)

Edited by briedis
Link to comment
Share on other sites

nu bet duh, paskaties savu kodu nedaudz cītīgāk:

 

include($_GET['file_to_inc'])   .    '.php';

 

Saproti, kas tur notiek? Tu iekļauj failu no $_GET, un veic include() funkcijas atgrieztās vērtības konkatenāciju ar '.php'.

Ne gluži. "Because include is a special language construct, parentheses are not needed around its argument. Take care when comparing return value. " (http://lv.php.net/manual/en/function.include.php) Tātad, tiek izpildīts include ar iekavu vērtību, kas savienota ar tekstu '.php'.

Tāpēc vienmēr vajadzētu operatoriem likt priekšā/pakaļā atstarpes, lai neveidojas šādas muļķīgas kļūdas.

Pievienojos

 

p.s. Ko tik jaunu neizdodas uzzināt katru dienu...

Link to comment
Share on other sites

nu bet duh, paskaties savu kodu nedaudz cītīgāk:

 

include($_GET['file_to_inc'])   .    '.php';

 

Saproti, kas tur notiek? Tu iekļauj failu no $_GET, un veic include() funkcijas atgrieztās vērtības konkatenāciju ar '.php'.

 

Tāpēc vienmēr vajadzētu operatoriem likt priekšā/pakaļā atstarpes, lai neveidojas šādas muļķīgas kļūdas.

 

Likt $_GET iekš include arī supermuļķīgi. Izmantojam whitelist principu šādos gadījumos (ja vien tas nav dinamisks gadījums. Tad attiecīgi vajadzētu validēt/filtrēt šo vērtību)

Ne gluži. "Because include is a special language construct, parentheses are not needed around its argument. Take care when comparing return value. " (http://lv.php.net/ma...ion.include.php) Tātad, tiek izpildīts include ar iekavu vērtību, kas savienota ar tekstu '.php'.

 

Pievienojos

 

p.s. Ko tik jaunu neizdodas uzzināt katru dienu...

 

 

 

Atvainojos jums abiem par tāda veida '.php' konkatenāciju. Bet problēma nepazūd, ja to labo, un faili ir vietās. Patiesībā include funkcija parasti dod divus errorus -viens par to, ka fails neeksistē, un otrs tālāk izrietošs, ka failu nevarēja iekļaut. Lūk, kā man te ir:

 

1. veids. browserī ievadu (bez NullByte): "http://localhost/fil...to_inc=file.txt"

Warning: include(file.txt.php): failed to open stream: No such file or directory in C:\xampp\htdocs\files\index.php on line 6

Warning: include(): Failed opening 'file.txt.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\files\index.php on line 6

 

 

2.veids. browserī ievadu(ar NullByte): "http://localhost/fil...inc=file.txt%00"

Warning: include(): Failed opening 'file.txt' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\files\index.php on line 6

 

 

Kā redzams,pirmajā veidā include funkcija saņem "file.txt.php" un pirmais errors saka, ka tāds fails neeksistē (tā arī ir). Otrajā veidā, pateicoties nulbytam, include funckija saņem jau vairs tikai "file.txt" un vairs nav errora par to, ka fails neeksistē (jo tas eksistē), bet saglabājas errors, ka to nevar atvērt. Kāpēc tā notiek?

Link to comment
Share on other sites

Nē nu interesanti. Bet es pamēģināju, man viss notikās kā vajag, respektīvi, ar null byte URLī include sekmīgi nostrādāja. Tas gan uz Win.

 

Briedis, null byte nekur nepazūd, bet triks ir tāds, ka C (??? neesmu drošs) funkcijas izmanto viņu, lai noteiktu, ka tās ir string beigas, PHP saprot, ka tas ir strings ar 9 simboliem, bet C funkcija ielādē stringu buferī, lasa līdz null baitam.. :)

Edited by Mr.Key
Link to comment
Share on other sites

Briedis, null byte nekur nepazūd, bet triks ir tāds, ka C (??? neesmu drošs) funkcijas izmanto viņu, lai noteiktu, ka tās ir string beigas, PHP saprot, ka tas ir strings ar 9 simboliem, bet C funkcija ielādē stringu buferī, lasa līdz null baitam.. :)

 

Jā, par C ievainojamību esmu dzirdējis, bet tieši PHP sakarā gan nē...

Ja paskatās php.net, tad tur arī īpaši nekas par šo nav teikts(http://php.net/manual/en/security.filesystem.nullbytes.php), tik vien kā, ka var rasties problēmas failu sistēmas gadījumā, bet kurš tad ar veselu saprātu liek nepārbaudītus lietotāja datus iekš include vai require...

Link to comment
Share on other sites

Jā, tā ir Sī valoda.. Cik zinu, php kompilators rakstīts tajā, un null byts apzīmē līnijas beigu, jo tur string datus ievada kā array, kur katrs elements ir viena rakstzīme no string..

 

Un jā, šīs ir mācības.. Lai saprastu kā no tā izsargāties, jāsaprot, kas nedarbosies.. Bet nesanāk man to savu skriptu uzlauzt tā kā gribētos. Ja nu tas ko dod, tad lietoju php 5.4.4. caur XAMP lokālā servera instalāciju uz Win7

Es būtu baigi pateicīgs ja kāds iedotu jau gatavu tādu, uz kuru tas null byts darbojas tā kā es gribu. Lai var izpētīt..

Edited by 007007
Link to comment
Share on other sites

Jā, par C ievainojamību esmu dzirdējis, bet tieši PHP sakarā gan nē...

Ja paskatās php.net, tad tur arī īpaši nekas par šo nav teikts(http://php.net/manua...m.nullbytes.php), tik vien kā, ka var rasties problēmas failu sistēmas gadījumā, bet kurš tad ar veselu saprātu liek nepārbaudītus lietotāja datus iekš include vai require...

Ir, ir ievainojamība.. Kā jau minēju php kompilators rakstīts C. tāpēc ja problēmas C, tad problēmas arī php. I-netā var atrast funkcijas, kuras php nav drošas pret šo. include vistrakākā. Un protams ka es lietošu white-listus, bet šeit vienkārši čakarēju to, kas lācītim vēderā..

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...