日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件包含--简单的代码审计绕过

發布時間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件包含--简单的代码审计绕过 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解題思路:

查看頁面的每個鏈接都有些什么,最后目標鎖定在flag.php上
頁面顯示如下:

頁面下方源碼如下:

源碼分析:

$file = @$_GET['page']; //將url變量page的值賦給$file $url = parse_url($file); //parse_url函數用于解析整個URL,并返回其組成部分,舉例如下圖

if(strstr($file,'flag.txt'))( /* strstr()函數搜索字符串在另一字符串中是否存在,如果是,返回該字符串及剩余部分,否則返回 FALSE strstr(string,search,before_search) string 必需。規定被搜索的字符串。 search 必需。規定要搜索的字符串。如果該參數是數字,則搜索匹配該數字對應的 ASCII 值的字符。 before_search 可選。一個默認值為 "false" 的布爾值。如果設置為 "true",它將返回 search 參數第一次出現之前的字符串部分。 舉例: ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20191130143106545.png) 總結:這里表示搜索flag.txt是否在$file中,如果在,返回true,否則返回false */ if(empty($url['host']) || $url['host'] !='localhost'){ die('hacker detected'); } /* empty()函數用于檢查一個變量是否為空 empty()判斷一個變量是否被認為是空的。即當變量為空或者變量的值等同于false,那么返回true。若變量存在,則返回false。以下的變量會被認為是空的: "" (空字符串) 0 (作為整數的0) 0.0 (作為浮點數的0) "0" (作為字符串的0) NULL FALSE array() (一個空數組) $var; (一個聲明了,但是沒有值的變量)總結:這里表示若$url中的host不存在(true)或者$url中的host不是localhost(true),那么整體返回true,否則返回false */ elseif(preg_natch('/http/i',$file)){ die('hacker detected'); } /* 如果上面的if語句執行失敗,那么將執行這條語句。 preg_match — 執行匹配正則表達式 preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int 搜索subject與pattern給定的正則表達式的一個匹配. 參數 pattern 要搜索的模式,字符串類型。subject 輸入字符串。 matches 如果提供了參數matches,它將被填充為搜索結果。 $matches[0]將包含完整模式匹配到的文本, $matches[1] 將包含第一個捕獲子組匹配到的文本,以此類推。 flags flags可以被設置為以下標記值:PREG_OFFSET_CAPTURE,如果傳遞了這個標記,對于每一個出現的匹配返回時會附加字符串偏移量(相對于目標字符串的)。 注意:這會改變填充到matches參數的數組,使其每個元素成為一個由 第0個元素是匹配到的字符串,第1個元素是該匹配字符串 在目標字符串subject中的偏移量。 preg_match()返回pattern的匹配次數。 它的值將是0次(不匹配)或1次,因為preg_match()在第一次匹配后 將會停止搜索。preg_match_all()不同于此,它會一直搜索subject 直到到達結尾。如果發生錯誤preg_match()返回 FALSE。 總結:這里表示如果$file中有匹配到http,那么就返回true,否則返回false */ } @include($file); //包含$file

解題方法:

根據頁面釋義,flag.php頁面存在flag,那么可以猜測flag.php的源碼中是否存在flag,上面分析的頁面源碼,綜合來說就是url中page=后面的參數不可以存在flag.txt與http,只有這樣才可繞過if語句,從而進行文件包含
方法一:使用php偽協議進行base64編碼,再進行解碼,獲得flag.php的源碼

解碼:

方法二:依舊使用php偽協議,只不過這會我們進行POST提交


注:測試過程中,flag.zip也存在flag,由于題目環境已經沒有,不確定哪一個才是真正的flag

總結

以上是生活随笔為你收集整理的文件包含--简单的代码审计绕过的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。