打開靶機
查看頁面,是PHP info界面
只有這一個頁面,查找一下有沒有flag
拿到flag
淺談ctf中phpinfo需要關注的點(轉自先知社區)
1 https://xz.aliyun.com/t/6131
首先我們先談談
php各個版本的的差異
php5.2以前
- __autoload()加載類文件,但只能調用一次這個函數,所以可以用spl_autoload_register()加載類
關於 autoload()函數,如果定義了該函數,該代碼就會被調用
關於spl_autoload_register()函數:注冊給定的函數作為 autoload 的實現
當出現未定義的類時,標准PHP庫會按照注冊的倒序逐個調用被注冊的__autoload()函數
php5.2
- 增加了json_encode(),json_decode()等,關於json的函數。
php5.3
- 刪除了
Register Globals
, -
新增了glob://和phar://流包裝
glob用來列目錄,繞過open_baedir
phar在文件包含中可以用來繞過一些后綴的限制 -
新的全局變量DIR
- 默認開啟<?= $xxoo;?>,5.4也可用 //起止標簽
- 增加了魔術方法 invoke()、callStatic():
invoke():當嘗試以調用函數的方式調用一個對象時,invoke() 方法會被自動調用。
callStatic():在靜態上下文中調用一個不可訪問方法時,callStatic() 會被調用。
具體查看:php魔術方法- 三元操作符簡寫:可以省略第二部分,默認用第一部分代替
舊 echo $a?$a:’hello world’;
新 echo $a?:’hello world’;
- 三元操作符簡寫:可以省略第二部分,默認用第一部分代替
1 https://xz.aliyun.com/t/5535
php5.4
- register_globals 和 register_long_arrays php.ini 指令被移除。
- php.ini新增session.upload_progress.enabled,默認為1,可用來文件包含
php5.5
- 廢除preg_replace的/e模式(不是移除)
當使用被棄用的 /e 修飾符時, 這個函數會轉義一些字符(即:'、"、 和 NULL) 然后進行后向引用替換。
1 http://php.net/manual/zh/function.preg-replace.php
- 不再支持Windows XP
php5.6
- 定義常量時允許使用之前定義的常量進行計算:
- 使用 ... 運算符定義變長參數函數
參考:1 http://php.net/manual/zh/functions.arguments.php#functions.variable-arg-list
php7.0
1、十六進制字符串不再是認為是數字
2、移除asp和script php標簽
<% %>
<%= %>
<script language="php"></script>
3、在后面的版本中assert變成語言結構,這將意味着很多一句話不能使用。
目前經過測試,可使用的有。
call_user_func('assert', 'phpinfo();');
php7.1
1 http://php.net/manual/zh/migration71.new-features.php
- 廢除mb_ereg_replace()和mb_eregi_replace()的Eval選項
php7.2
- php 7.2大都是底層的更新,提高性能。沒有太大常用語法層面的更新,這里就略過了
php7.3
- 添加了 array_key_first() 和 array_key_last() 來獲取數組的第一個和最后一個元素的鍵名
- json_decode 添加了一個常量, JSON_THROW_ON_ERROR, 如果解析失敗可以拋出異常, 而不是通過之前的方法 json_last_error() 去獲取
接下來我們開始談正事ctfphpinfo中需要注意的點
system info 詳細的操作系統信息 確定window or linux
Registered PHP Streams and filters 注冊的php過濾器和流協議
extension_dir php擴展的路徑
short_open_tag <?= 和 <? echo 等價 允許php標簽為<? ?>形式
disable_function 禁用函數
open_basedir 將用戶可操作的文件限制在某目錄下
SERVER_ADDR 真實ip
DOCUMENT_ROOT web根目錄
_FILES["file"] 可以獲取臨時文件名字和路徑
session 可以查看session的相關配置
gopher 可以實現ssrf攻擊
fastcgi 查看是否開啟fastcgi和fastcgi的版本,可能導致解析漏洞、遠程命令執行、任意文件讀取等問題
allow_url_include和allow_url_fopen,都可以遠程包含文件
extension_dir php擴展的路徑
asp_tags 開啟后,才可以對asp標簽進行解析
magic_quotes_gpc 對字符進行轉義類似addslashes()
open_basedir 將用戶可操作的文件限制在某目錄下,可以繞過
libxml 2.9以前的版本默認支持並開啟了外部實體的引用,會導致XXE
opcache 當開啟了opcache並可以上傳文件時,可以在本地生成一個與服務器文件名相同的文件,並生成緩存文件xx.php.bin。上傳后惡意緩存文件會將服務器上的原文件覆蓋,從而getshell。
imap CVE-2018-19518
session 可以看session的存儲路徑,session包含可以用到
upload_tmp_dir 可以查看臨時文件存放的文件夾,但是文件名是隨機的