php修改文件访问目录为 .htaccess_借github上韩国师傅的一个源码实例再次理解.htaccess的功效...
今天翻了翻GitHub,很巧發現一個韓國師傅的實例;也是關于.htaccess的,就繼續理解了一波;稍微修改了幾行代碼來理解一下;先來發出源碼;
我們簡單的審計;很明顯,列出了禁止的后綴;但是很明顯,這里沒有禁用.htaccess;這里昨天的那片博客也已經講的很明白,.htaccess是一個神器,我們可以篡改相關目錄的php配置,導致解析出現我們遇期的效果;繼續審計代碼;首先一個if語句就ban掉了純后綴的文件。例如(.htaccess);然后服務器創建臨時文件;$name取得我們的原始文件名字;然后再以‘.’為分界點打斷為數組,(這里我剛開始將其錯看成了implode,怎么都說不通,太無語了);打斷為數組之后刪除最后一個元素;
這里要注意一下,雖然刪除了最有一個元素,但是這里有個小坑,要看仔細,$ext是記錄了被刪除的內容,不是刪除后的數組;這里本地復現這段代碼;我們直接傳入文件名;
同過復現我們可以看到,這里確實是的,$ext記錄的是我們刪除的后綴,而并不是我們刪除后的數組;通過上面的實驗效果我們可以看到數組第一個元素已經為空了所以反觀代碼下的empty($parts[0])也是達成的,但是刪除就沒有效果了這里判斷元素數目是否為空;這里有個騷操作;因為我們看到之前的explode是按照以'.'為分割符來打斷的;這里經過刪除以后按理說是沒有了,我們測試如下;看到這里元素數目確實為0;這樣的話,我們是過不了if (count($parts) === 0)這個waf的;但是我們反觀一下,如果傳入..htaccess呢?那么就會打斷為3個元素,刪除前后兩個還有中間的空元素,只要有元素存在,那么count就不為0;就可以繞過去;這里測試如下;對比兩張圖會理解的更清楚;
接著我們看到waf;
這個waf我們早已經可以繞過了;因為并沒有出現敏感的字符;
再來看到又一個waf;
這個waf僅僅是判斷了imagetype(讀取第一個字節并且檢查簽名)這里我們抓包修改利用宏定義就可以;但是在修改的時候還需要滿足我們.htaccess的語法;這個waf和后面的waf相結合,就很惡心人;這里難點是在后面的那個waf;要圖片滿足為1337*1337
$image_size變量中存儲了我們服務器創建的臨時文件的大小;這里我翻了一下php的官方文檔;確定了一下;有個xbm文件;這也是一種圖片文件,我們本地測試,改為.xbm看看效果,發現可以成功顯示;(圖片內容就是phpinfo)
那么我們就可用宏定義在這里偽造為xbm文件了;下面就放出有效的xbm文件頭;
define 4c11f3876d494218ff327e3ca6ac824f_width xxxx(大小);這里我們可以在文件中加入文件頭,這樣php解析的時候就會認為是.xbm然后這里主要是我們可以自定義大小;所以這里按照題目要求,定義為1337;
#define 4c11f3876d494218ff327e3ca6ac824f_width 1337#define 4c11f3876d494218ff327e3ca6ac824f_height 1337這里加上#的原因不用多說,看過我上篇博客的都知道,不知道的師傅,可以去翻翻;這樣就偽造成了有效的.xbm文件去通過檢查,這里上傳.htaccess文件;
照常理來說這個題沒有難度,只要寫入將jpg當作php來解析就好,然后直接抓包修改就ok;但是這里我結合之前發的文章提供一種新的思路;深究用戶利用.htaccess的原理篡改配置導致的安全問題
自創;本地實測成功;
我先來個秒殺的.htaccess方法,直接在先來定義一個報錯的文件在/images目錄之下;名為shell.php因為是內容,這個題目的唯一缺點就是沒有對文件內容中php進行檢查,所以這里我們自定義一個報錯文件shell.php(并不是上傳shell.php);寫入如下的一句php_value include_path "110",這里的包含目錄是不存在的,所以就會寫入我們的報錯日志中;也就會在/images下創建一個shell.php文件;實測發現成功;
上傳.htaccess然后觸發報錯;創建文件。這里的shell.php不是我們的木馬文件,這里我們需要再傳一個文件.htaccess;
寫入
這個.htaccess文件會覆蓋之前的那個.htaccess文件,這里我們的images目錄之下已經有一個shell.php的文件了,但是里面是我們自定義包含目錄的報錯信息并不是木馬;真正的木馬在我們的.htaccess中;這里直接上傳..htaccess(為了繞過之前的waf);這里直接傳入,我們發現已經成功;因為.htaccess文件我們是沒有權限訪問的是forbidden;所以我們這里借用shell.php作為跳板;訪問呢shell.php觸發shell;
測試發現成功;(~~沒想到這種思路竟然可以成功;原創思路)
這里;如果結合之前的那個題;對文件內容中<?做了一個過濾 ,那么可否用這樣的方法過去呢,我本地測試了一下,傳入utf7編碼;這里我是依然將shell包含在了.htaccess中,并沒有將其寫入報錯日志,所以這里實測的結果如下;傳入的.htaccess如下;
這里我們訪問一下shell.php看看還能不能繼續作為跳板進行包含;這里發現如下的結果,
所以得出結論,.htaccess中修改的配置不能對其自身造成影響,比如這道題,.htaccess就不可以對自身的進行識別utf7編碼進而解碼包含;那么如果這么過濾;那么我們怎么辦呢;老套路,和昨天發的一樣,自定義報錯日志,加入報錯級別確保完全寫入shell,然后<?繞過用utf7編碼即可 ;然后再傳.htaccess進行自定義目錄包含,然后檢測是否有unicode,然后自定義解碼規則;老套路了。不過昨天那道題是我們將文件轉移出html目錄,這個題是無所謂;自定義在哪里都可以,這不在過多演示了;有興趣的師傅可以去看看深究用戶利用.htaccess的原理篡改配置導致的安全問題
這里再解釋一下作者的做法;他的做法,是利用AddType 來自定義了拓展名;從而導致asp文件可以被當作php文件來解析;這里我的解法要復雜一點,但是可以利于理解.htaccess.
聲明:作者初衷用于分享與普及網絡知識,若讀者因此作出任何危害網絡安全行為后果自負,與合天智匯及原作者無關。
相關實驗:
DoraBox之文件上傳?
https://www.hetianlab.com/expc.do?ec=ECIDfaf3-05da-4d49-9e11-72953b14f22c
(通過DoraBox靶場系列闖關練習,了解文件上傳漏洞的基礎知識及如何進行繞過上傳惡意文件。)
歡迎投稿至郵箱:edu@heetian.com
有才能的你快來投稿吧!
投稿細則都在里面了,點擊查看哦
重金懸賞 | 合天原創投稿漲稿費啦!
點擊這里提升自己總結
以上是生活随笔為你收集整理的php修改文件访问目录为 .htaccess_借github上韩国师傅的一个源码实例再次理解.htaccess的功效...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: inrange函数 python_为什么
- 下一篇: rsa python实现_RSA算法py