目录
一、漏洞原理
1.php://input伪协议原理
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行,如果存在文件包含漏洞,可将php://input作为文件名传入,同时在post中注入设置想要注入的代码,php执行时就会将post的内容作为php代码执行。
2.php://input伪协议使用条件
使用条件:
1.allow_url_fopen: on
2.allow_url_include:on
3.file_get_contents()函数
在利用文件包含漏洞的时候经常会碰到file_get_contents()函数,这个函数的作用是把整个文件读入一个字符串中。file_get_contents() 是 PHP 中用于将整个文件读入一个字符串的函数。若在使用时未对输入进行严格处理,它可能会引发文件包含漏洞。
file_get_contents() 函数可接受一个 URL 作为参数,当它被用于读取文件时,如果程序未对传入的参数进行严格验证和过滤,攻击者就能构造恶意的 URL 来读取服务器上的任意文件,甚至执行任意代码。
4.file_get_content与include的区别
file_get_contents与include虽然后会引起文件包含漏洞,两者区别如下
| 特性 | include/require | file_get_contents |
|---|---|---|
| 代码执行 | 会执行PHP代码 | 不会执行PHP代码 |
| 文件包含漏洞 | 高危 | 中危 |
(1)执行环境
file_get_contents():只是简单地读取文件内容,不会执行文件中的代码。例如,读取一个包含 PHP 代码的文件,返回的只是代码字符串,而不会执行这些代码。include:会将包含的文件内容作为当前脚本的一部分来执行,包含文件中的代码会在当前脚本的环境中运行,能够访问和修改当前脚本的变量和函数等
(2)功能用途
file_get_contents():该函数的主要功能是将整个文件的内容读取到一个字符串中。简单来说,它就像是一个文件内容的 “搬运工”,把文件里的文本、代码等数据原封不动地搬到一个字符串变量里,供后续程序处理,比如分析文件内容、对内容进行字符串操作等。include:include语句(以及与之类似的require语句)主要用于在当前脚本中包含并执行另一个文件的内容。可以把它想象成是将另一个文件的代码 “粘贴” 到当前文件中指定的位置并运行,常用于模块化开发,将公共的代码、配置文件等包含到不同的脚本中,实现代码的复用。
第07关 php://input伪协议
1.打开靶场
http://iwebsec.com:81/fi/07.php

2.源码分析
<?php
require_once('../header.php');
?>
<html>
<head>
<title>php://input伪协议</title>
</head>
<h2>php://input伪协议</h2>
<div class="alert alert-success">
<p>/07.php?filename=php://input </p>
</div>
<body>
<?php
echo file_get_contents("php://input");
?>
如下所示关键源码中有file_get_contents函数,参数是"php://input", 通常file_get_content函数是结合代码审计做一些渗透。
<?php
echo file_get_contents("php://input");
?>
这时候只要将参数通过post传入到服务器即可。
3.伪协议利用1
(1)构造post信息
I am a hacker!
(2)利用
如下所示,通过传入参数I am a hacker!使用file_get_content将内容输出到页面

4.伪协议利用 2
(1)构造post信息
POST注入语句
<script>alert(document.cookie)</script>
(2)渗透
如下所示,通过传入参数<script>alert(document.cookie)</script>!使用file_get_content将内容输出到页面,同时触发了XSS漏洞
本文围绕php://input伪协议展开,介绍其原理,即能将post请求数据当作php代码执行,还说明了使用条件。同时讲解了file_get_contents()函数,结合第07关靶场进行源码分析,阐述如何构造post信息并利用该伪协议进行渗透。

被折叠的 条评论
为什么被折叠?



