做題
小白的起始第一步,打開網頁先F12看下原始碼,以后無論什么網頁,沒頭緒就F12
這里有個注釋說要看source.php,html檔案里面注釋符號是用如上方式使前端不顯示該資訊,初階web題一般采用這種方式進行提示,那我們就訪問一下source.php
直接是原始碼,那就審計就完事了,這里剛剛入門的小白一定要注意,遇到不懂的函式一定要百度,這可不是高考英語完形填空,你看背景關系就能明白的,多積累以后自然有用,這里is開頭的函式就是字面意思,意思就是是不是后面的型別,注意前面的是函式,呼叫從后面的主函式開始,不要開始傻傻的看函式不明所以(就是我),先看下面的變數定義
觀察發現這里接受了一個變數,$_REQUEST忘記了,查一查如下
request_order:這個配置項設定 PHP 將 GET, POST 和 Cookie 中的哪些添加到 $_REQUEST 中,并且指定了填充時的順序,如果 request_order 設定為空,則填充的順序會以 variables_order 配置項中的順序為準,例如,設定為 request_order = “GP” 時,代表 $_REQUEST 將包含 $_GET 和 $_POST 的值,并且當 $_GET 和 P O S T 中 的 鍵 相 同 時 , _POST 中的鍵相同時, P?OST中的鍵相同時,_POST的值將覆寫 $_GET 的值,
所以這里就先傳GET值試一試,畢竟簡便一些,這里傳什么呢,打開hint.php看一下

發現該資訊,再審計整體函式,傳一個參,必須要有且是字串,通過checkfile檢驗才能包含,而這個checkfile是一個白名單,只能包含兩個php檔案,貼兩個忘記用法的函式,也就是截取你的輸入看是不是白名單里的,三次檢查只要有一次是對的就行了,這里出題人考慮的很周到,所以你輸入url編碼還是直接輸入都行
mb_strpos (haystack ,needle ):回傳要查找的字串needle在別的字串hayback中首次出現的位置
string mb_substr( string s t r , i n t str, int str,intstart[, int l e n g t h [ , s t r i n g length[, string length[,stringencoding]] );截取字符,從str的開始位置計算,第一個字符的位置為0,第二個字符的位置是1,依此類推,
但是這實在是不好繞過,原來自己這么菜,百度啟動,經過查閱資料,得到這是phpmyadmin 4.8.1的一個遠程檔案包含的漏洞,仔細一想,其實也能分析出來,按照問號截取,檢查問號前面的字串,我問號前面給一個合法輸入source.php然后后面寫一個我想要的東西不就行了嘛,這里的漏洞就是你可以使用…/…/訪問web目錄上級檔案夾,一般是不行的,所以構造payload

成功檔案包含得到flag

驗證
這個地方還是有難度,后來發現主要是在于環境問題,首先一樣,phpstudy直接起一個環境,里面放如下檔案
1.php就是我們看到的原始碼,2.php用來包含,source里面什么都不用寫,避免報錯而已,flag.txt隨便寫個flag,我們在這里加一個包含路徑方便驗證

注意,這里環境最好在Linux虛擬機上配置,在本機上配置會出現各種錯誤
例如:
嘗試了很久未解決,估計是編碼的問題,按照上文分析應該是一重兩重和不url編碼應該都可以,但是在Windows上只能雙重編碼,所以轉移陣地,成功包含
這里也就是把source.php/當成一個路徑再…/回退讀取flag.txt,沒有漏洞的正常情況是這樣,但是試一試就知道這里如果再輸入…/就會報錯,這就是沒有遠程包含的漏洞,但是利用上文漏洞就可以一直讀取到根目錄,具體該漏洞成因可以自行百度,
這里解釋一下,有些術語可能剛剛入門看不懂也沒事,例如上文的檔案包含,但是諸如url,html之類非常基礎的東西,還是需要先學一下,不然后面學習會有點困難
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294139.html
標籤:其他
上一篇:攻防世界-web新手區wp
下一篇:怎么面試程式員的MySQL水平?
