upload-labs_pass21_CTF逻辑老饶了
pass21-源碼分析和提示
提示:
源碼:
這一關(guān)對(duì)于學(xué)習(xí)知識(shí)來(lái)說(shuō),已經(jīng)意義不大了,但是出題人故意把這一關(guān)設(shè)計(jì)的彎彎繞繞。
代碼解析:
首先檢查MIME類(lèi)型。
規(guī)定了白名單:‘image/jpeg’,‘image/png’,‘image/gif’
然后檢查文件名,這個(gè)也是可以抓包修改的,因?yàn)槭菑腜OST請(qǐng)求中修改文件名的。
注意這里有一句三目運(yùn)算符:
$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];如果保存名稱(chēng)是空的,那就保存名稱(chēng)直接賦值成文件的名字。
然后判斷保存名稱(chēng)是不是數(shù)組:(這一步貌似很奇怪,所以說(shuō)這一關(guān)是為了出題而出題)
如果不是數(shù)組,就分割。
然后是下面這一句:
是從數(shù)組中拿到最后一項(xiàng)。
然后:
$allow_suffix = array('jpg','png','gif');又做了一次白名單 的判斷。—》所以save_path中的最后一項(xiàng)(save_path是一個(gè)數(shù)組)也確定了,是白名單的其中一個(gè)。
然后是else:
先看這一句:
reset($file)和end($file)兩者相反,reset($file)拿的是數(shù)組的第0個(gè)元素。
$file[count($file) - 1]是數(shù)組 的最后一項(xiàng),所以$file_name是數(shù)組第一個(gè)元素.數(shù)組最后一個(gè)元素
說(shuō)白了,$file_name是數(shù)組第一個(gè)元素(文件名)+數(shù)組最后一個(gè)元素(擴(kuò)展名)
然后最后再注意一下PHP的move_uploaded_file函數(shù)的特性,在pass20的那一關(guān)已經(jīng)碰到過(guò)了。不了解的可以去看一下pass20
pass21-思路
首先準(zhǔn)備上傳shell.php(一句話木馬)
然后先抓包:
修改:
上傳成功了:
pass21-連接webshell
21關(guān)也過(guò)了
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的upload-labs_pass21_CTF逻辑老饶了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: upload-labs_pass20-m
- 下一篇: burp过期了,换一个